Kodi Development 19.0
for Binary and Script based Add-Ons
AudioEncoder.h
1/*
2 * Copyright (C) 2005-2018 Team Kodi
3 * This file is part of Kodi - https://kodi.tv
4 *
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 * See LICENSES/README.md for more information.
7 */
8
9#pragma once
10
11#include "../AddonBase.h"
12#include "../c-api/addon-instance/audio_encoder.h"
13
14#ifdef __cplusplus
15namespace kodi
16{
17namespace addon
18{
19
20//==============================================================================
151class ATTRIBUTE_HIDDEN CInstanceAudioEncoder : public IAddonInstance
152{
153public:
154 //============================================================================
194 explicit CInstanceAudioEncoder(KODI_HANDLE instance, const std::string& kodiVersion = "")
196 !kodiVersion.empty() ? kodiVersion
198 {
199 if (CAddonBase::m_interface->globalSingleInstance != nullptr)
200 throw std::logic_error("kodi::addon::CInstanceAudioEncoder: Creation of multiple together "
201 "with single instance way is not allowed!");
202
203 SetAddonStruct(instance);
204 }
205 //----------------------------------------------------------------------------
206
207 //============================================================================
224 virtual bool Start(int inChannels,
225 int inRate,
226 int inBits,
227 const std::string& title,
228 const std::string& artist,
229 const std::string& albumartist,
230 const std::string& album,
231 const std::string& year,
232 const std::string& track,
233 const std::string& genre,
234 const std::string& comment,
235 int trackLength) = 0;
236 //----------------------------------------------------------------------------
237
238 //============================================================================
246 virtual int Encode(int numBytesRead, const uint8_t* pbtStream) = 0;
247 //----------------------------------------------------------------------------
248
249 //============================================================================
255 virtual bool Finish() { return true; }
256 //----------------------------------------------------------------------------
257
258 //============================================================================
268 int Write(const uint8_t* data, int length)
269 {
270 return m_instanceData->toKodi->write(m_instanceData->toKodi->kodiInstance, data, length);
271 }
272 //----------------------------------------------------------------------------
273
274 //============================================================================
295 int64_t Seek(int64_t position, int whence = SEEK_SET)
296 {
297 return m_instanceData->toKodi->seek(m_instanceData->toKodi->kodiInstance, position, whence);
298 }
299 //----------------------------------------------------------------------------
300
301private:
302 void SetAddonStruct(KODI_HANDLE instance)
303 {
304 if (instance == nullptr)
305 throw std::logic_error("kodi::addon::CInstanceAudioEncoder: Creation with empty addon "
306 "structure not allowed, table must be given from Kodi!");
307
308 m_instanceData = static_cast<AddonInstance_AudioEncoder*>(instance);
309 m_instanceData->toAddon->addonInstance = this;
310 m_instanceData->toAddon->start = ADDON_Start;
311 m_instanceData->toAddon->encode = ADDON_Encode;
312 m_instanceData->toAddon->finish = ADDON_Finish;
313 }
314
315 inline static bool ADDON_Start(const AddonInstance_AudioEncoder* instance,
316 int inChannels,
317 int inRate,
318 int inBits,
319 const char* title,
320 const char* artist,
321 const char* albumartist,
322 const char* album,
323 const char* year,
324 const char* track,
325 const char* genre,
326 const char* comment,
327 int trackLength)
328 {
329 return static_cast<CInstanceAudioEncoder*>(instance->toAddon->addonInstance)
330 ->Start(inChannels, inRate, inBits, title, artist, albumartist, album, year, track, genre,
331 comment, trackLength);
332 }
333
334 inline static int ADDON_Encode(const AddonInstance_AudioEncoder* instance,
335 int numBytesRead,
336 const uint8_t* pbtStream)
337 {
338 return static_cast<CInstanceAudioEncoder*>(instance->toAddon->addonInstance)
339 ->Encode(numBytesRead, pbtStream);
340 }
341
342 inline static bool ADDON_Finish(const AddonInstance_AudioEncoder* instance)
343 {
344 return static_cast<CInstanceAudioEncoder*>(instance->toAddon->addonInstance)->Finish();
345 }
346
347 AddonInstance_AudioEncoder* m_instanceData;
348};
349
350} /* namespace addon */
351} /* namespace kodi */
352
353#endif /* __cplusplus */
Definition: AudioEncoder.h:152
Definition: AddonBase.h:186
@ ADDON_INSTANCE_AUDIOENCODER
Audio encoder instance, see kodi::addon::CInstanceAudioEncoder.
Definition: versions.h:219
virtual bool Finish()
Finalize encoding (optional)
Definition: AudioEncoder.h:255
virtual bool Start(int inChannels, int inRate, int inBits, const std::string &title, const std::string &artist, const std::string &albumartist, const std::string &album, const std::string &year, const std::string &track, const std::string &genre, const std::string &comment, int trackLength)=0
Start encoder (required)
CInstanceAudioEncoder(KODI_HANDLE instance, const std::string &kodiVersion="")
Audio encoder class constructor used to support multiple instances.
Definition: AudioEncoder.h:194
int64_t Seek(int64_t position, int whence=SEEK_SET)
Set the file's current position.
Definition: AudioEncoder.h:295
int Write(const uint8_t *data, int length)
Write block of data.
Definition: AudioEncoder.h:268
virtual int Encode(int numBytesRead, const uint8_t *pbtStream)=0
Encode a chunk of audio (required)
std::string ATTRIBUTE_HIDDEN GetKodiTypeVersion(int type)
To get used version inside Kodi itself about asked type.
Definition: AddonBase.h:630
Definition: audio_encoder.h:55