11 #include "../AddonBase.h" 12 #include "../c-api/addon-instance/audioencoder.h" 23 class CInstanceAudioEncoder;
39 class ATTR_DLL_LOCAL AudioEncoderInfoTag
43 AudioEncoderInfoTag() =
default;
75 void SetTitle(
const std::string& title) { m_title = title; }
78 const std::string& GetTitle()
const {
return m_title; }
81 void SetArtist(
const std::string& artist) { m_artist = artist; }
84 const std::string& GetArtist()
const {
return m_artist; }
87 void SetAlbum(
const std::string& album) { m_album = album; }
90 const std::string& GetAlbum()
const {
return m_album; }
93 void SetAlbumArtist(
const std::string& albumArtist) { m_album_artist = albumArtist; }
96 const std::string& GetAlbumArtist()
const {
return m_album_artist; }
108 void SetMediaType(
const std::string& mediaType) { m_media_type = mediaType; }
111 const std::string& GetMediaType()
const {
return m_media_type; }
114 void SetGenre(
const std::string& genre) { m_genre = genre; }
117 const std::string& GetGenre()
const {
return m_genre; }
120 void SetDuration(
int duration) { m_duration = duration; }
123 int GetDuration()
const {
return m_duration; }
126 void SetTrack(
int track) { m_track = track; }
129 int GetTrack()
const {
return m_track; }
132 void SetDisc(
int disc) { m_disc = disc; }
135 int GetDisc()
const {
return m_disc; }
138 void SetDiscSubtitle(
const std::string& discSubtitle) { m_disc_subtitle = discSubtitle; }
141 const std::string& GetDiscSubtitle()
const {
return m_disc_subtitle; }
144 void SetDiscTotal(
int discTotal) { m_disc_total = discTotal; }
147 int GetDiscTotal()
const {
return m_disc_total; }
151 void SetReleaseDate(
const std::string& releaseDate) { m_release_date = releaseDate; }
154 const std::string& GetReleaseDate()
const {
return m_release_date; }
157 void SetLyrics(
const std::string& lyrics) { m_lyrics = lyrics; }
160 const std::string& GetLyrics()
const {
return m_lyrics; }
163 void SetSamplerate(
int samplerate) { m_samplerate = samplerate; }
166 int GetSamplerate()
const {
return m_samplerate; }
169 void SetChannels(
int channels) { m_channels = channels; }
172 int GetChannels()
const {
return m_channels; }
175 void SetBitsPerSample(
int bits_per_sample) { m_bits_per_sample = bits_per_sample; }
178 int GetBitsPerSample()
const {
return m_bits_per_sample; }
181 void SetTrackLength(
int track_length) { m_track_length = track_length; }
184 int GetTrackLength()
const {
return m_track_length; }
187 void SetComment(
const std::string& comment) { m_comment = comment; }
190 const std::string& GetComment()
const {
return m_comment; }
195 friend class CInstanceAudioEncoder;
200 m_title = tag->title;
202 m_artist = tag->artist;
204 m_album = tag->album;
205 if (tag->album_artist)
206 m_album_artist = tag->album_artist;
208 m_media_type = tag->media_type;
210 m_genre = tag->genre;
211 m_duration = tag->duration;
212 m_track = tag->track;
215 m_disc_subtitle = tag->artist;
216 m_disc_total = tag->disc_total;
217 if (tag->release_date)
218 m_release_date = tag->release_date;
220 m_lyrics = tag->lyrics;
221 m_samplerate = tag->samplerate;
222 m_channels = tag->channels;
223 m_bits_per_sample = tag->bits_per_sample;
224 m_track_length = tag->track_length;
226 m_comment = tag->comment;
230 std::string m_artist;
232 std::string m_album_artist;
233 std::string m_media_type;
238 std::string m_disc_subtitle;
240 std::string m_release_date;
241 std::string m_lyrics;
244 int m_bits_per_sample{0};
245 int m_track_length{0};
246 std::string m_comment;
360 class ATTR_DLL_LOCAL CInstanceAudioEncoder :
public IAddonInstance
396 explicit CInstanceAudioEncoder(
const kodi::addon::IInstanceInfo&
instance)
397 : IAddonInstance(instance)
399 if (CPrivateBase::m_interface->globalSingleInstance !=
nullptr)
400 throw std::logic_error(
"kodi::addon::CInstanceAudioEncoder: Creation of multiple together " 401 "with single instance way is not allowed!");
403 SetAddonStruct(instance);
414 virtual bool Start(
const kodi::addon::AudioEncoderInfoTag& tag) = 0;
425 virtual ssize_t Encode(
const uint8_t* pbtStream,
size_t numBytesRead) = 0;
434 virtual bool Finish() {
return true; }
447 ssize_t Write(
const uint8_t* data,
size_t length)
449 return m_kodi->write(m_kodi->kodiInstance, data, length);
474 ssize_t Seek(ssize_t position,
int whence = SEEK_SET)
476 return m_kodi->seek(m_kodi->kodiInstance, position, whence);
483 instance->hdl =
this;
484 instance->audioencoder->toAddon->start = ADDON_start;
485 instance->audioencoder->toAddon->encode = ADDON_encode;
486 instance->audioencoder->toAddon->finish = ADDON_finish;
487 m_kodi = instance->audioencoder->toKodi;
490 inline static bool ADDON_start(
const KODI_ADDON_AUDIOENCODER_HDL hdl,
493 return static_cast<CInstanceAudioEncoder*
>(hdl)->Start(tag);
496 inline static ssize_t ADDON_encode(
const KODI_ADDON_AUDIOENCODER_HDL hdl,
497 const uint8_t* pbtStream,
498 size_t num_bytes_read)
500 return static_cast<CInstanceAudioEncoder*
>(hdl)->Encode(pbtStream, num_bytes_read);
503 inline static bool ADDON_finish(
const KODI_ADDON_AUDIOENCODER_HDL hdl)
505 return static_cast<CInstanceAudioEncoder*
>(hdl)->Finish();
Definition: audioencoder.h:50
Definition: addon_base.h:267
Definition: audioencoder.h:21
Definition: visualization.h:21