From 6099c4a34103ef732aab9e23e8558d0c4b9dfdee Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Tue, 17 Nov 2015 18:51:32 +0100 Subject: [PATCH] AE: pass entire AEAudioFormat to MakeStream --- .../libKODI_audioengine.h | 8 ++++---- .../libKODI_audioengine.cpp | 4 ++-- xbmc/addons/AddonCallbacks.h | 2 +- xbmc/addons/AddonCallbacksAudioEngine.cpp | 15 ++++++--------- xbmc/addons/AddonCallbacksAudioEngine.h | 6 ++---- xbmc/cores/AudioEngine/AEFactory.cpp | 5 ++--- xbmc/cores/AudioEngine/AEFactory.h | 3 +-- .../AudioEngine/Engines/ActiveAE/ActiveAE.cpp | 7 ++----- .../cores/AudioEngine/Engines/ActiveAE/ActiveAE.h | 2 +- xbmc/cores/AudioEngine/Interfaces/AE.h | 6 ++---- xbmc/cores/AudioEngine/Utils/AEUtil.cpp | 3 ++- xbmc/cores/VideoPlayer/DVDAudio.cpp | 9 ++++++--- xbmc/cores/paplayer/PAPlayer.cpp | 8 +++++--- 13 files changed, 36 insertions(+), 42 deletions(-) diff --git a/addons/library.kodi.audioengine/libKODI_audioengine.h b/addons/library.kodi.audioengine/libKODI_audioengine.h index d1782bf467cc5..85b429e590001 100644 --- a/addons/library.kodi.audioengine/libKODI_audioengine.h +++ b/addons/library.kodi.audioengine/libKODI_audioengine.h @@ -103,7 +103,7 @@ class CHelper_libKODI_audioengine dlsym(m_libKODI_audioengine, "AudioEngine_unregister_me"); if (AudioEngine_unregister_me == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } - AudioEngine_MakeStream = (CAddonAEStream* (*)(void*, void*, AEDataFormat, unsigned int, enum AEChannel*, unsigned int)) + AudioEngine_MakeStream = (CAddonAEStream* (*)(void*, void*, AudioEngineFormat, unsigned int)) dlsym(m_libKODI_audioengine, "AudioEngine_make_stream"); if (AudioEngine_MakeStream == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } @@ -127,9 +127,9 @@ class CHelper_libKODI_audioengine * @param 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 */ - CAddonAEStream* MakeStream(AEDataFormat DataFormat, unsigned int SampleRate, CAEChannelInfo &ChannelLayout, unsigned int Options = 0) + CAddonAEStream* MakeStream(AudioEngineFormat Format, unsigned int Options = 0) { - return AudioEngine_MakeStream(m_Handle, m_Callbacks, DataFormat, SampleRate, ChannelLayout.m_channels, Options); + return AudioEngine_MakeStream(m_Handle, m_Callbacks, Format, Options); } /** @@ -158,7 +158,7 @@ class CHelper_libKODI_audioengine protected: void* (*AudioEngine_register_me)(void*); void (*AudioEngine_unregister_me)(void*, void*); - CAddonAEStream* (*AudioEngine_MakeStream)(void*, void*, AEDataFormat, unsigned int, enum AEChannel*, unsigned int); + CAddonAEStream* (*AudioEngine_MakeStream)(void*, void*, AudioEngineFormat, unsigned int); bool (*AudioEngine_GetCurrentSinkFormat)(void*, void*, AudioEngineFormat *SinkFormat); void (*AudioEngine_FreeStream)(CAddonAEStream*); diff --git a/lib/addons/library.kodi.audioengine/libKODI_audioengine.cpp b/lib/addons/library.kodi.audioengine/libKODI_audioengine.cpp index 1cd9ea8f98428..9387df226e7da 100644 --- a/lib/addons/library.kodi.audioengine/libKODI_audioengine.cpp +++ b/lib/addons/library.kodi.audioengine/libKODI_audioengine.cpp @@ -62,7 +62,7 @@ DLLEXPORT void AudioEngine_unregister_me(void *hdl, void* cb) // --------------------------------------------- // CAddonAEStream implementations // --------------------------------------------- -DLLEXPORT CAddonAEStream* AudioEngine_make_stream(void *hdl, void *cb, AEDataFormat DataFormat, unsigned int SampleRate, enum AEChannel *Channels, unsigned int Options) +DLLEXPORT CAddonAEStream* AudioEngine_make_stream(void *hdl, void *cb, AudioEngineFormat Format, unsigned int Options) { if (!hdl || !cb) { @@ -70,7 +70,7 @@ DLLEXPORT CAddonAEStream* AudioEngine_make_stream(void *hdl, void *cb, AEDataFor return NULL; } - AEStreamHandle *streamHandle = ((CB_AudioEngineLib*)cb)->MakeStream(DataFormat, SampleRate, Channels, Options); + AEStreamHandle *streamHandle = ((CB_AudioEngineLib*)cb)->MakeStream(Format, Options); if (!streamHandle) { fprintf(stderr, "%s-ERROR: AudioEngine_make_stream MakeStream failed!\n", LIBRARY_NAME); diff --git a/xbmc/addons/AddonCallbacks.h b/xbmc/addons/AddonCallbacks.h index a04dc82f4b2cc..eb4f65e9c1523 100644 --- a/xbmc/addons/AddonCallbacks.h +++ b/xbmc/addons/AddonCallbacks.h @@ -402,7 +402,7 @@ typedef struct CB_ADSPLib // --------------------------------------- // libKODI_audioengine definitions // --------------------------------------- -typedef AEStreamHandle* (*AudioEngine_MakeStream)(AEDataFormat DataFormat, unsigned int SampleRate, enum AEChannel *ChannelLayout, unsigned int Options); +typedef AEStreamHandle* (*AudioEngine_MakeStream)(AudioEngineFormat Format, unsigned int Options); typedef void (*AudioEngine_FreeStream)(AEStreamHandle *stream); typedef bool (*AudioEngine_GetCurrentSinkFormat)(void *addonData, AudioEngineFormat *SinkFormat); diff --git a/xbmc/addons/AddonCallbacksAudioEngine.cpp b/xbmc/addons/AddonCallbacksAudioEngine.cpp index 2b3f9c21e2817..0ae59df09b39a 100644 --- a/xbmc/addons/AddonCallbacksAudioEngine.cpp +++ b/xbmc/addons/AddonCallbacksAudioEngine.cpp @@ -64,16 +64,13 @@ CAddonCallbacksAudioEngine::CAddonCallbacksAudioEngine(CAddon* addon) m_callbacks->AEStream_Discontinuity = AEStream_Discontinuity; } -AEStreamHandle* CAddonCallbacksAudioEngine::AudioEngine_MakeStream(AEDataFormat DataFormat, unsigned int SampleRate, enum AEChannel *Channels, unsigned int Options) +AEStreamHandle* CAddonCallbacksAudioEngine::AudioEngine_MakeStream(AudioEngineFormat StreamFormat, unsigned int Options) { - if (!Channels) - { - CLog::Log(LOGERROR, "CAddonCallbacksAudioEngine - %s - Invalid input! Channels is a NULL pointer!", __FUNCTION__); - return NULL; - } - - CAEChannelInfo channelInfo(Channels); - return CAEFactory::MakeStream(DataFormat, SampleRate, channelInfo, Options); + AEAudioFormat format; + format.m_dataFormat = StreamFormat.m_dataFormat; + format.m_sampleRate = StreamFormat.m_sampleRate; + format.m_channelLayout = StreamFormat.m_channels; + return CAEFactory::MakeStream(format, Options); } void CAddonCallbacksAudioEngine::AudioEngine_FreeStream(AEStreamHandle *StreamHandle) diff --git a/xbmc/addons/AddonCallbacksAudioEngine.h b/xbmc/addons/AddonCallbacksAudioEngine.h index 449c2edb21d82..aa19cb1c71cb0 100644 --- a/xbmc/addons/AddonCallbacksAudioEngine.h +++ b/xbmc/addons/AddonCallbacksAudioEngine.h @@ -41,13 +41,11 @@ class CAddonCallbacksAudioEngine /** * Creates and returns a new handle to an IAEStream in the format specified, this function should never fail - * @param dataFormat The data format the incoming audio will be in (eg, AE_FMT_S16LE) - * @param sampleRate The sample rate of the audio data (eg, 48000) - * @param channelLayout The order of the channels in the audio data + * @param audioFormat * @param 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_MakeStream(AEDataFormat DataFormat, unsigned int SampleRate, enum AEChannel *Channels, unsigned int Options); + static AEStreamHandle* AudioEngine_MakeStream(AudioEngineFormat StreamFormat, unsigned int Options); /** * This method will remove the specifyed stream from the engine. diff --git a/xbmc/cores/AudioEngine/AEFactory.cpp b/xbmc/cores/AudioEngine/AEFactory.cpp index 54a36dad0de5d..38df41170bdd4 100644 --- a/xbmc/cores/AudioEngine/AEFactory.cpp +++ b/xbmc/cores/AudioEngine/AEFactory.cpp @@ -277,11 +277,10 @@ void CAEFactory::Shutdown() AE->Shutdown(); } -IAEStream *CAEFactory::MakeStream(enum AEDataFormat dataFormat, unsigned int sampleRate, - CAEChannelInfo channelLayout, unsigned int options, IAEClockCallback *clock) +IAEStream *CAEFactory::MakeStream(AEAudioFormat &audioFormat, unsigned int options, IAEClockCallback *clock) { if(AE) - return AE->MakeStream(dataFormat, sampleRate, channelLayout, options, clock); + return AE->MakeStream(audioFormat, options, clock); return NULL; } diff --git a/xbmc/cores/AudioEngine/AEFactory.h b/xbmc/cores/AudioEngine/AEFactory.h index 0f07fb618fe07..651810dc7147b 100644 --- a/xbmc/cores/AudioEngine/AEFactory.h +++ b/xbmc/cores/AudioEngine/AEFactory.h @@ -60,8 +60,7 @@ class CAEFactory static float GetVolume(); static void SetVolume(const float volume); static void Shutdown(); - static IAEStream *MakeStream(enum AEDataFormat dataFormat, unsigned int sampleRate, - CAEChannelInfo channelLayout, unsigned int options = 0, IAEClockCallback *clock = NULL); + static IAEStream *MakeStream(AEAudioFormat &audioFormat, unsigned int options = 0, IAEClockCallback *clock = NULL); static bool FreeStream(IAEStream *stream); static void GarbageCollect(); diff --git a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.cpp b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.cpp index 4f199b369b407..821bc03b33a3e 100644 --- a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.cpp +++ b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.cpp @@ -3086,17 +3086,14 @@ bool CActiveAE::ResampleSound(CActiveAESound *sound) // Streams //----------------------------------------------------------------------------- -IAEStream *CActiveAE::MakeStream(enum AEDataFormat dataFormat, unsigned int sampleRate, CAEChannelInfo& channelLayout, unsigned int options, IAEClockCallback *clock) +IAEStream *CActiveAE::MakeStream(AEAudioFormat &audioFormat, unsigned int options, IAEClockCallback *clock) { if (IsSuspended()) return NULL; //TODO: pass number of samples in audio packet - AEAudioFormat format; - format.m_dataFormat = dataFormat; - format.m_sampleRate = sampleRate; - format.m_channelLayout = channelLayout; + AEAudioFormat format = audioFormat; format.m_frames = format.m_sampleRate / 10; format.m_frameSize = format.m_channelLayout.Count() * (CAEUtil::DataFormatToBits(format.m_dataFormat) >> 3); diff --git a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.h b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.h index 2f1d1171c0c30..1af0943910fe6 100644 --- a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.h +++ b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAE.h @@ -237,7 +237,7 @@ class CActiveAE : public IAE, private CThread virtual void SetSoundMode(const int mode); /* returns a new stream for data in the specified format */ - virtual IAEStream *MakeStream(enum AEDataFormat dataFormat, unsigned int sampleRate, CAEChannelInfo& channelLayout, unsigned int options = 0, IAEClockCallback *clock = NULL); + virtual IAEStream *MakeStream(AEAudioFormat &audioFormat, unsigned int options = 0, IAEClockCallback *clock = NULL); virtual bool FreeStream(IAEStream *stream); /* returns a new sound object */ diff --git a/xbmc/cores/AudioEngine/Interfaces/AE.h b/xbmc/cores/AudioEngine/Interfaces/AE.h index 53c2e3f70e3ae..51b5565ce5b82 100644 --- a/xbmc/cores/AudioEngine/Interfaces/AE.h +++ b/xbmc/cores/AudioEngine/Interfaces/AE.h @@ -153,13 +153,11 @@ class IAE /** * Creates and returns a new IAEStream in the format specified, this function should never fail - * @param dataFormat The data format the incoming audio will be in (eg, AE_FMT_S16LE) - * @param sampleRate The sample rate of the audio data (eg, 48000) - * @param channelLayout The order of the channels in the audio data + * @param audioFormat * @param options A bit field of stream options (see: enum AEStreamOptions) * @return a new IAEStream that will accept data in the requested format */ - virtual IAEStream *MakeStream(enum AEDataFormat dataFormat, unsigned int sampleRate, CAEChannelInfo& channelLayout, unsigned int options = 0, IAEClockCallback *clock = NULL) = 0; + virtual IAEStream *MakeStream(AEAudioFormat &audioFormat, unsigned int options = 0, IAEClockCallback *clock = NULL) = 0; /** * This method will remove the specifyed stream from the engine. diff --git a/xbmc/cores/AudioEngine/Utils/AEUtil.cpp b/xbmc/cores/AudioEngine/Utils/AEUtil.cpp index 90f6c44431ac5..0177a823abddc 100644 --- a/xbmc/cores/AudioEngine/Utils/AEUtil.cpp +++ b/xbmc/cores/AudioEngine/Utils/AEUtil.cpp @@ -123,7 +123,8 @@ const unsigned int CAEUtil::DataFormatToBits(const enum AEDataFormat dataFormat) sizeof(double) << 3, /* DOUBLE */ sizeof(float ) << 3, /* FLOAT */ - + + 16, /* RAW */ 16, /* AAC */ 16, /* AC3 */ 16, /* DTS */ diff --git a/xbmc/cores/VideoPlayer/DVDAudio.cpp b/xbmc/cores/VideoPlayer/DVDAudio.cpp index e2d07c677aaa4..921f18e31adaa 100644 --- a/xbmc/cores/VideoPlayer/DVDAudio.cpp +++ b/xbmc/cores/VideoPlayer/DVDAudio.cpp @@ -25,6 +25,7 @@ #include "DVDCodecs/Audio/DVDAudioCodec.h" #include "cores/AudioEngine/AEFactory.h" #include "cores/AudioEngine/Interfaces/AEStream.h" +#include "cores/AudioEngine/Utils/AEAudioFormat.h" #include "settings/MediaSettings.h" CDVDAudio::CDVDAudio(volatile bool &bStop, CDVDClock *clock) : m_bStop(bStop), m_pClock(clock) @@ -63,10 +64,12 @@ bool CDVDAudio::Create(const DVDAudioFrame &audioframe, AVCodecID codec, bool ne unsigned int options = needresampler && !audioframe.passthrough ? AESTREAM_FORCE_RESAMPLE : 0; options |= AESTREAM_PAUSED; + AEAudioFormat format; + format.m_dataFormat = audioframe.data_format; + format.m_sampleRate = audioframe.sample_rate; + format.m_channelLayout = audioframe.channel_layout; m_pAudioStream = CAEFactory::MakeStream( - audioframe.data_format, - audioframe.sample_rate, - audioframe.channel_layout, + format, options, this ); diff --git a/xbmc/cores/paplayer/PAPlayer.cpp b/xbmc/cores/paplayer/PAPlayer.cpp index 229841c414868..08e6fb75dd4d7 100644 --- a/xbmc/cores/paplayer/PAPlayer.cpp +++ b/xbmc/cores/paplayer/PAPlayer.cpp @@ -475,10 +475,12 @@ inline bool PAPlayer::PrepareStream(StreamInfo *si) return true; /* get a paused stream */ + AEAudioFormat format; + format.m_dataFormat = si->m_dataFormat; + format.m_sampleRate = si->m_sampleRate; + format.m_channelLayout = si->m_channelInfo; si->m_stream = CAEFactory::MakeStream( - si->m_dataFormat, - si->m_sampleRate, - si->m_channelInfo, + format, AESTREAM_PAUSED );