summaryrefslogtreecommitdiffstats
path: root/xbmc/addons/interfaces/AudioEngine.h
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-10 18:07:22 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-10 18:07:22 +0000
commitc04dcc2e7d834218ef2d4194331e383402495ae1 (patch)
tree7333e38d10d75386e60f336b80c2443c1166031d /xbmc/addons/interfaces/AudioEngine.h
parentInitial commit. (diff)
downloadkodi-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 'xbmc/addons/interfaces/AudioEngine.h')
-rw-r--r--xbmc/addons/interfaces/AudioEngine.h212
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" */