diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-10 18:07:22 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-10 18:07:22 +0000 |
commit | c04dcc2e7d834218ef2d4194331e383402495ae1 (patch) | |
tree | 7333e38d10d75386e60f336b80c2443c1166031d /xbmc/addons/interfaces/AudioEngine.h | |
parent | Initial commit. (diff) | |
download | kodi-c04dcc2e7d834218ef2d4194331e383402495ae1.tar.xz kodi-c04dcc2e7d834218ef2d4194331e383402495ae1.zip |
Adding upstream version 2:20.4+dfsg.upstream/2%20.4+dfsg
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r-- | xbmc/addons/interfaces/AudioEngine.h | 212 |
1 files changed, 212 insertions, 0 deletions
diff --git a/xbmc/addons/interfaces/AudioEngine.h b/xbmc/addons/interfaces/AudioEngine.h new file mode 100644 index 0000000..3700931 --- /dev/null +++ b/xbmc/addons/interfaces/AudioEngine.h @@ -0,0 +1,212 @@ +/* + * Copyright (C) 2005-2018 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +#pragma once + +#include "addons/kodi-dev-kit/include/kodi/AudioEngine.h" +#include "cores/AudioEngine/Utils/AEChannelData.h" + +extern "C" +{ +namespace ADDON +{ + +struct Interface_AudioEngine +{ + static void Init(AddonGlobalInterface* addonInterface); + static void DeInit(AddonGlobalInterface* addonInterface); + + /** + * @brief Translation functions to separate Kodi and addons + * + * This thought to make it more safe for cases as something changed inside + * Kodi, addons overseen and breaks API, further to have on addons a better + * documentation about this parts. + */ + //@{ + static AEChannel TranslateAEChannelToKodi(AudioEngineChannel channel); + static AudioEngineChannel TranslateAEChannelToAddon(AEChannel channel); + static AEDataFormat TranslateAEFormatToKodi(AudioEngineDataFormat format); + static AudioEngineDataFormat TranslateAEFormatToAddon(AEDataFormat format); + //@} + + /** + * Creates and returns a new handle to an IAEStream in the format specified, this function should never fail + * @param[in] streamFormat Format to use for stream + * @param[in] options A bit field of stream options (see: enum AEStreamOptions) + * @return a new Handle to an IAEStream that will accept data in the requested format + */ + static AEStreamHandle* audioengine_make_stream(void* kodiBase, + AUDIO_ENGINE_FORMAT* streamFormat, + unsigned int options); + + /** + * This method will remove the specified stream from the engine. + * For OSX/IOS this is essential to reconfigure the audio output. + * @param[in] streamHandle The stream to be altered + */ + static void audioengine_free_stream(void* kodiBase, AEStreamHandle* streamHandle); + + /** + * Get the current sink data format + * + * @param[in] sinkFormat sink data format. For more details see AUDIO_ENGINE_FORMAT. + * @return Returns true on success, else false. + */ + static bool get_current_sink_format(void* kodiBase, AUDIO_ENGINE_FORMAT* sinkFormat); + + /** + * Returns the amount of space available in the stream + * @return The number of bytes AddData will consume + */ + static unsigned int aestream_get_space(void* kodiBase, AEStreamHandle* streamHandle); + + /** + * Add planar or interleaved PCM data to the stream + * @param[in] data array of pointers to the planes + * @param[in] offset to frame in frames + * @param[in] frames number of frames + * @return The number of frames consumed + */ + static unsigned int aestream_add_data(void* kodiBase, + AEStreamHandle* streamHandle, + uint8_t* const* data, + unsigned int offset, + unsigned int frames, + double pts, + bool hasDownmix, + double centerMixLevel); + + /** + * Returns the time in seconds that it will take + * for the next added packet to be heard from the speakers. + * @return seconds + */ + static double aestream_get_delay(void* kodiBase, AEStreamHandle* streamHandle); + + /** + * Returns if the stream is buffering + * @return True if the stream is buffering + */ + static bool aestream_is_buffering(void* kodiBase, AEStreamHandle* streamHandle); + + /** + * Returns the time in seconds that it will take + * to underrun the cache if no sample is added. + * @return seconds + */ + static double aestream_get_cache_time(void* kodiBase, AEStreamHandle* streamHandle); + + /** + * Returns the total time in seconds of the cache + * @return seconds + */ + static double aestream_get_cache_total(void* kodiBase, AEStreamHandle* streamHandle); + + /** + * Pauses the stream playback + */ + static void aestream_pause(void* kodiBase, AEStreamHandle* streamHandle); + + /** + * Resumes the stream after pausing + */ + static void aestream_resume(void* kodiBase, AEStreamHandle* streamHandle); + + /** + * Start draining the stream + * @note Once called AddData will not consume more data. + */ + static void aestream_drain(void* kodiBase, AEStreamHandle* streamHandle, bool wait); + + /** + * Returns true if the is stream draining + */ + static bool aestream_is_draining(void* kodiBase, AEStreamHandle* streamHandle); + + /** + * Returns true if the is stream has finished draining + */ + static bool aestream_is_drained(void* kodiBase, AEStreamHandle* streamHandle); + + /** + * Flush all buffers dropping the audio data + */ + static void aestream_flush(void* kodiBase, AEStreamHandle* streamHandle); + + /** + * Return the stream's current volume level + * @return The volume level between 0.0 and 1.0 + */ + static float aestream_get_volume(void* kodiBase, AEStreamHandle* streamHandle); + + /** + * Set the stream's volume level + * @param volume The new volume level between 0.0 and 1.0 + */ + static void aestream_set_volume(void* kodiBase, AEStreamHandle* streamHandle, float volume); + + /** + * Gets the stream's volume amplification in linear units. + * @return The volume amplification factor between 1.0 and 1000.0 + */ + static float aestream_get_amplification(void* kodiBase, AEStreamHandle* streamHandle); + + /** + * Sets the stream's volume amplification in linear units. + * @param amplify The volume amplification factor between 1.0 and 1000.0 + */ + static void aestream_set_amplification(void* kodiBase, + AEStreamHandle* streamHandle, + float amplify); + + /** + * Returns the size of one audio frame in bytes (channelCount * resolution) + * @return The size in bytes of one frame + */ + static unsigned int aestream_get_frame_size(void* kodiBase, AEStreamHandle* streamHandle); + + /** + * Returns the number of channels the stream is configured to accept + * @return The channel count + */ + static unsigned int aestream_get_channel_count(void* kodiBase, AEStreamHandle* streamHandle); + + /** + * Returns the stream's sample rate, if the stream is using a dynamic sample + * rate, this value will NOT reflect any changes made by calls to SetResampleRatio() + * @return The stream's sample rate (eg, 48000) + */ + static unsigned int aestream_get_sample_rate(void* kodiBase, AEStreamHandle* streamHandle); + + /** + * Return the data format the stream has been configured with + * @return The stream's data format (eg, AE_FMT_S16LE) + */ + static AudioEngineDataFormat aestream_get_data_format(void* kodiBase, + AEStreamHandle* streamHandle); + + /** + * Return the resample ratio + * @note This will return an undefined value if the stream is not resampling + * @return the current resample ratio or undefined if the stream is not resampling + */ + static double aestream_get_resample_ratio(void* kodiBase, AEStreamHandle* streamHandle); + + /** + * Sets the resample ratio + * @note This function may return false if the stream is not resampling, if you wish to use this be sure to set the AESTREAM_FORCE_RESAMPLE option + * @param[in] ratio the new sample rate ratio, calculated by ((double)desiredRate / (double)GetSampleRate()) + */ + static void aestream_set_resample_ratio(void* kodiBase, + AEStreamHandle* streamHandle, + double ratio); +}; + +} /* namespace ADDON */ +} /* extern "C" */ |