11#include "../AddonBase.h"
12#include "../AudioEngine.h"
13#include "../c-api/addon-instance/audio_decoder.h"
21class CInstanceAudioDecoder;
80 strncpy(m_cStructure->title, title.c_str(),
sizeof(m_cStructure->title) - 1);
84 std::string
GetTitle()
const {
return m_cStructure->title; }
89 strncpy(m_cStructure->artist, artist.c_str(),
sizeof(m_cStructure->artist) - 1);
93 std::string
GetArtist()
const {
return m_cStructure->artist; }
98 strncpy(m_cStructure->album, album.c_str(),
sizeof(m_cStructure->album) - 1);
102 std::string
GetAlbum()
const {
return m_cStructure->album; }
107 strncpy(m_cStructure->album_artist, albumArtist.c_str(),
108 sizeof(m_cStructure->album_artist) - 1);
126 strncpy(m_cStructure->media_type, mediaType.c_str(),
sizeof(m_cStructure->media_type) - 1);
135 strncpy(m_cStructure->genre, genre.c_str(),
sizeof(m_cStructure->genre) - 1);
139 std::string
GetGenre()
const {
return m_cStructure->genre; }
142 void SetDuration(
int duration) { m_cStructure->duration = duration; }
148 void SetTrack(
int track) { m_cStructure->track = track; }
151 int GetTrack()
const {
return m_cStructure->track; }
154 void SetDisc(
int disc) { m_cStructure->disc = disc; }
157 int GetDisc()
const {
return m_cStructure->disc; }
162 strncpy(m_cStructure->disc_subtitle, discSubtitle.c_str(),
163 sizeof(m_cStructure->disc_subtitle) - 1);
170 void SetDiscTotal(
int discTotal) { m_cStructure->disc_total = discTotal; }
179 strncpy(m_cStructure->release_date, releaseDate.c_str(),
180 sizeof(m_cStructure->release_date) - 1);
189 strncpy(m_cStructure->lyrics, lyrics.c_str(),
sizeof(m_cStructure->lyrics) - 1);
193 std::string
GetLyrics()
const {
return m_cStructure->lyrics; }
196 void SetSamplerate(
int samplerate) { m_cStructure->samplerate = samplerate; }
202 void SetChannels(
int channels) { m_cStructure->channels = channels; }
208 void SetBitrate(
int bitrate) { m_cStructure->bitrate = bitrate; }
216 strncpy(m_cStructure->comment, comment.c_str(),
sizeof(m_cStructure->comment) - 1);
220 std::string
GetComment()
const {
return m_cStructure->comment; }
427 !kodiVersion.empty() ? kodiVersion
430 if (CAddonBase::m_interface->globalSingleInstance !=
nullptr)
431 throw std::logic_error(
"kodi::addon::CInstanceAudioDecoder: Creation of multiple together with single instance way is not allowed!");
433 SetAddonStruct(instance);
456 virtual bool Init(
const std::string& filename,
457 unsigned int filecache,
464 std::vector<AudioEngineChannel>& channellist) = 0;
481 virtual int ReadPCM(uint8_t* buffer,
int size,
int& actualsize) = 0;
491 virtual int64_t
Seek(int64_t time) {
return time; }
519 virtual int TrackCount(
const std::string& file) {
return 1; }
523 void SetAddonStruct(KODI_HANDLE instance)
525 if (instance ==
nullptr)
526 throw std::logic_error(
"kodi::addon::CInstanceAudioDecoder: Creation with empty addon structure not allowed, table must be given from Kodi!");
530 m_instanceData->toAddon->addonInstance =
this;
531 m_instanceData->toAddon->init = ADDON_Init;
532 m_instanceData->toAddon->read_pcm = ADDON_ReadPCM;
533 m_instanceData->toAddon->seek = ADDON_Seek;
534 m_instanceData->toAddon->read_tag = ADDON_ReadTag;
535 m_instanceData->toAddon->track_count = ADDON_TrackCount;
540 unsigned int filecache,
549 CInstanceAudioDecoder* thisClass =
550 static_cast<CInstanceAudioDecoder*
>(instance->toAddon->addonInstance);
552 thisClass->m_channelList.clear();
553 bool ret = thisClass->Init(file, filecache, *channels, *samplerate, *bitspersample, *totaltime,
554 *bitrate, *format, thisClass->m_channelList);
555 if (!thisClass->m_channelList.empty())
559 *info = thisClass->m_channelList.data();
568 return static_cast<CInstanceAudioDecoder*
>(instance->toAddon->addonInstance)
569 ->ReadPCM(buffer, size, *actualsize);
574 return static_cast<CInstanceAudioDecoder*
>(instance->toAddon->addonInstance)->Seek(time);
582 return static_cast<CInstanceAudioDecoder*
>(instance->toAddon->addonInstance)
583 ->ReadTag(file, cppTag);
588 return static_cast<CInstanceAudioDecoder*
>(instance->toAddon->addonInstance)->TrackCount(file);
591 std::vector<AudioEngineChannel> m_channelList;
Definition: AudioDecoder.h:38
Definition: AudioDecoder.h:382
Definition: AddonBase.h:250
Definition: AddonBase.h:186
@ ADDON_INSTANCE_AUDIODECODER
Audio decoder instance, see kodi::addon::CInstanceAudioDecoder.
Definition: versions.h:216
int GetDisc() const
Get disk number (if present)
Definition: AudioDecoder.h:157
std::string GetAlbum() const
Set album name.
Definition: AudioDecoder.h:102
std::string GetLyrics() const
Get string from lyrics.
Definition: AudioDecoder.h:193
void SetDiscSubtitle(const std::string &discSubtitle)
Set disk subtitle name (if present) from music info.
Definition: AudioDecoder.h:160
std::string GetDiscSubtitle() const
Get disk subtitle name (if present) from music info.
Definition: AudioDecoder.h:167
void SetAlbum(const std::string &album)
Set album name.
Definition: AudioDecoder.h:96
std::string GetMediaType() const
Get the media type of the music item.
Definition: AudioDecoder.h:130
void SetComment(const std::string &comment)
Set additional information comment (if present).
Definition: AudioDecoder.h:214
std::string GetArtist() const
Get artist name.
Definition: AudioDecoder.h:93
void SetMediaType(const std::string &mediaType)
Set the media type of the music item.
Definition: AudioDecoder.h:124
void SetDuration(int duration)
Set the duration of music as integer from info.
Definition: AudioDecoder.h:142
void SetLyrics(const std::string &lyrics)
Set string from lyrics.
Definition: AudioDecoder.h:187
std::string GetAlbumArtist() const
Get album artist name.
Definition: AudioDecoder.h:112
void SetDiscTotal(int discTotal)
Set disks amount quantity (if present) from music info as integer.
Definition: AudioDecoder.h:170
std::string GetComment() const
Get additional information comment (if present).
Definition: AudioDecoder.h:220
void SetBitrate(int bitrate)
Set related stream bitrate.
Definition: AudioDecoder.h:208
void SetTitle(const std::string &title)
Set the title from music as string on info tag.
Definition: AudioDecoder.h:78
void SetDisc(int disc)
Set disk number (if present) from music info as integer.
Definition: AudioDecoder.h:154
void SetArtist(const std::string &artist)
Set artist name.
Definition: AudioDecoder.h:87
std::string GetGenre() const
Get genre name from music as string if present.
Definition: AudioDecoder.h:139
void SetAlbumArtist(const std::string &albumArtist)
Set album artist name.
Definition: AudioDecoder.h:105
void SetChannels(int channels)
Set related stream channels amount.
Definition: AudioDecoder.h:202
std::string GetTitle() const
Get title name.
Definition: AudioDecoder.h:84
int GetDuration() const
Get the duration of music as integer from info.
Definition: AudioDecoder.h:145
void SetTrack(int track)
Set track number (if present) from music info as integer.
Definition: AudioDecoder.h:148
int GetBitrate() const
Get related stream bitrate.
Definition: AudioDecoder.h:211
void SetReleaseDate(const std::string &releaseDate)
Set release date as string from music info (if present). ISO8601 date YYYY, YYYY-MM or YYYY-MM-DD.
Definition: AudioDecoder.h:177
void SetSamplerate(int samplerate)
Set related stream samplerate.
Definition: AudioDecoder.h:196
int GetDiscTotal() const
Get disks amount quantity (if present)
Definition: AudioDecoder.h:173
std::string GetReleaseDate() const
Get release date as string from music info (if present).
Definition: AudioDecoder.h:184
int GetTrack() const
Get track number (if present).
Definition: AudioDecoder.h:151
void SetGenre(const std::string &genre)
Set genre name from music as string if present.
Definition: AudioDecoder.h:133
int GetChannels() const
Get related stream channels amount.
Definition: AudioDecoder.h:205
int GetSamplerate() const
Get related stream samplerate.
Definition: AudioDecoder.h:199
virtual int ReadPCM(uint8_t *buffer, int size, int &actualsize)=0
Produce some noise.
virtual bool ReadTag(const std::string &file, kodi::addon::AudioDecoderInfoTag &tag)
Read tag of a file.
Definition: AudioDecoder.h:506
virtual int64_t Seek(int64_t time)
Seek in output stream.
Definition: AudioDecoder.h:491
CInstanceAudioDecoder(KODI_HANDLE instance, const std::string &kodiVersion="")
Audio decoder class constructor used to support multiple instance types.
Definition: AudioDecoder.h:425
virtual bool Init(const std::string &filename, unsigned int filecache, int &channels, int &samplerate, int &bitspersample, int64_t &totaltime, int &bitrate, AudioEngineDataFormat &format, std::vector< AudioEngineChannel > &channellist)=0
Initialize a decoder.
virtual int TrackCount(const std::string &file)
Get number of tracks in a file.
Definition: AudioDecoder.h:519
AudioEngineChannel
Definition: audio_engine.h:70
@ AUDIOENGINE_CH_NULL
Used inside to indicate the end of a list and not for addon use directly.
Definition: audio_engine.h:72
std::string ATTRIBUTE_HIDDEN GetKodiTypeVersion(int type)
To get used version inside Kodi itself about asked type.
Definition: AddonBase.h:630
Definition: audio_decoder.h:24
Definition: audio_decoder.h:80