Class: kodi::addon::CInstanceAudioDecoder
Audio decoder add-on instance
For audio decoders as binary add-ons. This class implements a way to handle special types of audio files.
The add-on handles loading of the source file and outputting the audio stream for consumption by the player.
The addon.xml defines the capabilities of this add-on.
- Note
- The option to have multiple instances is possible with audio-decoder add-ons. This is useful, since some playback engines are riddled by global variables, making decoding of multiple streams using the same instance impossible.
Here's an example on addon.xml:
<?xml version="1.0" encoding="UTF-8"?>
<addon
id="audiodecoder.myspecialnamefor"
version="1.0.0"
name="My special audio decoder addon"
provider-name="Your Name">
<requires>@ADDON_DEPENDS@</requires>
<extension
point="kodi.audiodecoder"
name="2sf"
tags="true"
library_@PLATFORM@="@LIBRARY_FILENAME@">
<support>
<extension name=".2sf">
<description>30100</description>
<icon>resources/file_format_music_sound.png</icon>
</extension>
<extension name=".mini2sf"/>
</support>
</extension>
<extension point="xbmc.addon.metadata">
<summary lang="en_GB">My audio decoder addon addon</summary>
<description lang="en_GB">My audio decoder addon description</description>
<platform>@PLATFORM@</platform>
</extension>
</addon>
Description to audio decoder related addon.xml values:
Name | Description |
point | Addon type specification
At all addon types and for this kind always "kodi.audiodecoder". |
library_@PLATFORM@ | Sets the used library name, which is automatically set by cmake at addon build. |
name | The name of the decoder used in Kodi for display. |
tags | Boolean to point out that addon can bring own information to replayed file, if false only the file name is used as info.
If true , CInstanceAudioDecoder::ReadTag is used and must be implemented. |
tracks | Boolean to in inform one file can contains several different streams. |
<support><extension name="..." /></support> | The file extensions / styles supported by this addon.\nOptional can be with <description> and <icon> additional info added where used for list views in Kodi. |
<support><mimetype name="..." /></support> | A stream URL mimetype where can be used to force to this addon.\nOptional can be with `<description> and <icon> additional info added where used for list views in Kodi. |
Here is a code example how this addon is used:
#include <kodi/addon-instance/AudioDecoder.h>
{
public:
bool Init(
const std::string& filename,
unsigned int filecache,
int& channels, int& samplerate,
int& bitspersample, int64_t& totaltime,
std::vector<AudioEngineChannel>& channellist) override;
int ReadPCM(uint8_t* buffer,
int size,
int& actualsize)
override;
};
: kodi::addon::CInstanceAudioDecoder(instance)
{
...
}
bool CMyAudioDecoder::Init(const std::string& filename, unsigned int filecache,
int& channels, int& samplerate,
int& bitspersample, int64_t& totaltime,
std::vector<AudioEngineChannel>& channellist)
{
...
return true;
}
int CMyAudioDecoder::ReadPCM(uint8_t* buffer, int size, int& actualsize)
{
...
}
{
public:
CMyAddon() = default;
KODI_ADDON_INSTANCE_HDL& hdl) override;
};
KODI_ADDON_INSTANCE_HDL& hdl)
{
{
hdl = new CMyAudioDecoder(instance);
}
else if (...)
{
...
}
}
ADDONCREATOR(CMyAddon)
Definition AddonBase.h:775
Definition AudioDecoder.h:431
Definition AddonBase.h:498
@ ADDON_LOG_INFO
1 : To include information messages in the log file.
Definition addon_base.h:187
ADDON_STATUS
Definition addon_base.h:138
@ ADDON_STATUS_OK
For everything OK and no error.
Definition addon_base.h:140
@ ADDON_STATUS_UNKNOWN
Unknown and incomprehensible error.
Definition addon_base.h:152
@ ADDON_INSTANCE_AUDIODECODER
Audio decoder instance, see kodi::addon::CInstanceAudioDecoder.
Definition versions.h:219
bool IsType(KODI_ADDON_INSTANCE_TYPE type) const
Check asked type used on this class.
Definition AddonBase.h:525
virtual ADDON_STATUS CreateInstance(const kodi::addon::IInstanceInfo &instance, KODI_ADDON_INSTANCE_HDL &hdl)
Instance created.
Definition AddonBase.h:924
@ AUDIODECODER_READ_SUCCESS
On success.
Definition audiodecoder.h:69
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 ReadPCM(uint8_t *buffer, size_t size, size_t &actualsize)=0
Produce some noise.
void ATTR_DLL_LOCAL Log(const ADDON_LOG loglevel, const char *format,...)
Add a message to Kodi's log.
Definition AddonBase.h:1938
The destruction of the example class CMyAudioDecoder
is called from Kodi's header. Manually deleting the add-on instance is not required.
◆ CInstanceAudioDecoder()
Audio decoder class constructor used to support multiple instance types.
- Parameters
-
[in] | instance | The instance value given to kodi::addon::CAddonBase::CreateInstance(...) . |
Here's example about the use of this:
{
public:
CMyAudioDecoder(KODI_HANDLE instance)
{
...
}
...
};
KODI_ADDON_INSTANCE_HDL& hdl)
{
hdl = new CMyAudioDecoder(instance);
}
◆ SupportsFile()
virtual bool SupportsFile |
( |
const std::string & | filename | ) |
|
|
inlinevirtual |
Checks addon support given file path.
- Parameters
-
[in] | filename | The file to read |
- Returns
- true if successfully done and supported, otherwise false
- Note
- Optional to add, as default becomes
true
used.
◆ Init()
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 ) |
|
pure virtual |
Initialize a decoder.
- Parameters
-
[in] | filename | The file to read |
[in] | filecache | The file cache size |
[out] | channels | Number of channels in output stream |
[out] | samplerate | Samplerate of output stream |
[out] | bitspersample | Bits per sample in output stream |
[out] | totaltime | Total time for stream |
[out] | bitrate | Average bitrate of input stream |
[out] | format | Data format for output stream, see class AudioEngineFormat for available values |
[out] | channellist | Channel mapping for output stream, see enum AudioEngineChannel for available values |
- Returns
- true if successfully done, otherwise false
◆ ReadPCM()
virtual int ReadPCM |
( |
uint8_t * | buffer, |
|
|
size_t | size, |
|
|
size_t & | actualsize ) |
|
pure virtual |
Produce some noise.
- Parameters
-
[in] | buffer | Output buffer |
[in] | size | Size of output buffer |
[out] | actualsize | Actual number of bytes written to output buffer |
- Returns
Possible values are:
◆ Seek()
virtual int64_t Seek |
( |
int64_t | time | ) |
|
|
inlinevirtual |
Seek in output stream.
- Parameters
-
[in] | time | Time position to seek to in milliseconds |
- Returns
- Time position seek ended up on
◆ ReadTag()
Read tag of a file.
- Parameters
-
[in] | file | File to read tag for |
[out] | tag | Information tag about |
- Returns
- True on success, false on failure
The following table contains values that can be set with class AudioDecoderInfoTag :
◆ TrackCount()
virtual int TrackCount |
( |
const std::string & | file | ) |
|
|
inlinevirtual |
Get number of tracks in a file.
- Parameters
-
[in] | file | File to read tag for |
- Returns
- Number of tracks in file
◆ GetTrack()
static std::string GetTrack |
( |
const std::string & | name, |
|
|
const std::string & | trackPath, |
|
|
int & | track ) |
|
inlinestatic |
Static auxiliary function to read the track number used from the given path.
If track number is not found in file name, the originally given file name is returned, track number then remains at "0".
- Parameters
-
[in] | name | The value specified in addon.xml extension under name="???" |
[in] | trackPath | The full path to evaluate |
[out] | track | The track number read out in the path, 0 if not identified as a track path. |
- Returns
- Path to the associated file