From f44ecaa4f27e7538ddcad66d40e543bffa2d2d86 Mon Sep 17 00:00:00 2001 From: manuel Date: Sun, 4 Jun 2017 16:57:49 +0200 Subject: sync with upstream --- .../kodi-addon-dev-kit/include/kodi/libKODI_adsp.h | 215 ++++++++++----------- 1 file changed, 100 insertions(+), 115 deletions(-) (limited to 'xbmc/addons/kodi-addon-dev-kit/include/kodi/libKODI_adsp.h') diff --git a/xbmc/addons/kodi-addon-dev-kit/include/kodi/libKODI_adsp.h b/xbmc/addons/kodi-addon-dev-kit/include/kodi/libKODI_adsp.h index fb0c15f..d4ea283 100644 --- a/xbmc/addons/kodi-addon-dev-kit/include/kodi/libKODI_adsp.h +++ b/xbmc/addons/kodi-addon-dev-kit/include/kodi/libKODI_adsp.h @@ -27,29 +27,104 @@ #include "kodi_adsp_types.h" #include "libXBMC_addon.h" -typedef void* ADSPHANDLE; +class CAddonSoundPlay +{ +public: + CAddonSoundPlay(AddonCB* hdl, AddonInstance_AudioDSP* cb, const char* filename) + : m_Filename(filename), + m_Handle(hdl), + m_cb(cb) + { + m_PlayHandle = nullptr; + if (!hdl || !cb) + fprintf(stderr, "libKODI_adsp-ERROR: ADSP_get_sound_play is called with NULL handle !!!\n"); + else + { + m_PlayHandle = m_cb->toKodi.SoundPlay_GetHandle(m_cb->toKodi.kodiInstance, m_Filename.c_str()); + if (!m_PlayHandle) + fprintf(stderr, "libKODI_adsp-ERROR: ADSP_get_sound_play can't get callback table from KODI !!!\n"); + } + } + + ~CAddonSoundPlay() + { + if (m_PlayHandle) + m_cb->toKodi.SoundPlay_ReleaseHandle(m_cb->toKodi.kodiInstance, m_PlayHandle); + } + + /*! play the sound this object represents */ + void Play() + { + if (m_PlayHandle) + m_cb->toKodi.SoundPlay_Play(m_cb->toKodi.kodiInstance, m_PlayHandle); + } -#define ADSP_HELPER_DLL KODI_DLL("adsp") -#define ADSP_HELPER_DLL_NAME KODI_DLL_NAME("adsp") -class CAddonSoundPlay; + /*! stop playing the sound this object represents */ + void Stop() + { + if (m_PlayHandle) + m_cb->toKodi.SoundPlay_Stop(m_cb->toKodi.kodiInstance, m_PlayHandle); + } + + /*! return true if the sound is currently playing */ + bool IsPlaying() + { + if (!m_PlayHandle) + return false; + + return m_cb->toKodi.SoundPlay_IsPlaying(m_cb->toKodi.kodiInstance, m_PlayHandle); + } + + /*! set the playback channel position of this sound, AE_DSP_CH_INVALID for all */ + void SetChannel(AE_DSP_CHANNEL channel) + { + if (m_PlayHandle) + m_cb->toKodi.SoundPlay_SetChannel(m_cb->toKodi.kodiInstance, m_PlayHandle, channel); + } + + /*! get the current playback volume of this sound, AE_DSP_CH_INVALID for all */ + AE_DSP_CHANNEL GetChannel() + { + if (!m_PlayHandle) + return AE_DSP_CH_INVALID; + return m_cb->toKodi.SoundPlay_GetChannel(m_cb->toKodi.kodiInstance, m_PlayHandle); + } + + /*! set the playback volume of this sound */ + void SetVolume(float volume) + { + if (m_PlayHandle) + m_cb->toKodi.SoundPlay_SetVolume(m_cb->toKodi.kodiInstance, m_PlayHandle, volume); + } + + /*! get the current playback volume of this sound */ + float GetVolume() + { + if (!m_PlayHandle) + return 0.0f; + + return m_cb->toKodi.SoundPlay_GetVolume(m_cb->toKodi.kodiInstance, m_PlayHandle); + } + +private: + std::string m_Filename; + AddonCB* m_Handle; + AddonInstance_AudioDSP *m_cb; + ADSPHANDLE m_PlayHandle; +}; class CHelper_libKODI_adsp { public: CHelper_libKODI_adsp(void) { - m_libKODI_adsp = NULL; - m_Handle = NULL; + m_Handle = nullptr; + m_Callbacks = nullptr; } ~CHelper_libKODI_adsp(void) { - if (m_libKODI_adsp) - { - ADSP_unregister_me(m_Handle, m_Callbacks); - dlclose(m_libKODI_adsp); - } } /*! @@ -59,53 +134,13 @@ public: */ bool RegisterMe(void* handle) { - m_Handle = handle; - - std::string libBasePath; - libBasePath = ((cb_array*)m_Handle)->libPath; - libBasePath += ADSP_HELPER_DLL; - - m_libKODI_adsp = dlopen(libBasePath.c_str(), RTLD_LAZY); - if (m_libKODI_adsp == NULL) - { - fprintf(stderr, "Unable to load %s\n", dlerror()); - return false; - } - - ADSP_register_me = (void* (*)(void *HANDLE)) - dlsym(m_libKODI_adsp, "ADSP_register_me"); - if (ADSP_register_me == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } - - ADSP_unregister_me = (void (*)(void* HANDLE, void* CB)) - dlsym(m_libKODI_adsp, "ADSP_unregister_me"); - if (ADSP_unregister_me == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } + m_Handle = static_cast(handle); + if (m_Handle) + m_Callbacks = (AddonInstance_AudioDSP*)m_Handle->ADSPLib_RegisterMe(m_Handle->addonData); + if (!m_Callbacks) + fprintf(stderr, "libKODI_adsp-ERROR: ADSLib_RegisterMe can't get callback table from Kodi !!!\n"); - ADSP_add_menu_hook = (void (*)(void* HANDLE, void* CB, AE_DSP_MENUHOOK *hook)) - dlsym(m_libKODI_adsp, "ADSP_add_menu_hook"); - if (ADSP_add_menu_hook == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } - - ADSP_remove_menu_hook = (void (*)(void* HANDLE, void* CB, AE_DSP_MENUHOOK *hook)) - dlsym(m_libKODI_adsp, "ADSP_remove_menu_hook"); - if (ADSP_remove_menu_hook == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } - - ADSP_register_mode = (void (*)(void *HANDLE, void* CB, AE_DSP_MODES::AE_DSP_MODE *modes)) - dlsym(m_libKODI_adsp, "ADSP_register_mode"); - if (ADSP_register_mode == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } - - ADSP_unregister_mode = (void (*)(void* HANDLE, void* CB, AE_DSP_MODES::AE_DSP_MODE *modes)) - dlsym(m_libKODI_adsp, "ADSP_unregister_mode"); - if (ADSP_unregister_mode == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } - - ADSP_get_sound_play = (CAddonSoundPlay* (*)(void *HANDLE, void *CB, const char *filename)) - dlsym(m_libKODI_adsp, "ADSP_get_sound_play"); - if (ADSP_get_sound_play == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } - - ADSP_release_sound_play = (void (*)(CAddonSoundPlay* p)) - dlsym(m_libKODI_adsp, "ADSP_release_sound_play"); - if (ADSP_release_sound_play == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } - - m_Callbacks = ADSP_register_me(m_Handle); - return m_Callbacks != NULL; + return m_Callbacks != nullptr; } /*! @@ -114,7 +149,7 @@ public: */ void AddMenuHook(AE_DSP_MENUHOOK* hook) { - return ADSP_add_menu_hook(m_Handle, m_Callbacks, hook); + return m_Callbacks->toKodi.AddMenuHook(m_Callbacks->toKodi.kodiInstance, hook); } /*! @@ -123,7 +158,7 @@ public: */ void RemoveMenuHook(AE_DSP_MENUHOOK* hook) { - return ADSP_remove_menu_hook(m_Handle, m_Callbacks, hook); + return m_Callbacks->toKodi.RemoveMenuHook(m_Callbacks->toKodi.kodiInstance, hook); } /*! @@ -133,7 +168,7 @@ public: */ void RegisterMode(AE_DSP_MODES::AE_DSP_MODE* mode) { - return ADSP_register_mode(m_Handle, m_Callbacks, mode); + return m_Callbacks->toKodi.RegisterMode(m_Callbacks->toKodi.kodiInstance, mode); } /*! @@ -142,7 +177,7 @@ public: */ void UnregisterMode(AE_DSP_MODES::AE_DSP_MODE* mode) { - return ADSP_unregister_mode(m_Handle, m_Callbacks, mode); + return m_Callbacks->toKodi.UnregisterMode(m_Callbacks->toKodi.kodiInstance, mode); } /*! @@ -151,7 +186,7 @@ public: */ CAddonSoundPlay* GetSoundPlay(const char *filename) { - return ADSP_get_sound_play(m_Handle, m_Callbacks, filename); + return new CAddonSoundPlay(m_Handle, m_Callbacks, filename); } /*! @@ -160,60 +195,10 @@ public: */ void ReleaseSoundPlay(CAddonSoundPlay* p) { - return ADSP_release_sound_play(p); + delete p; } -protected: - void* (*ADSP_register_me)(void*); - - void (*ADSP_unregister_me)(void*, void*); - void (*ADSP_add_menu_hook)(void*, void*, AE_DSP_MENUHOOK*); - void (*ADSP_remove_menu_hook)(void*, void*, AE_DSP_MENUHOOK*); - void (*ADSP_register_mode)(void*, void*, AE_DSP_MODES::AE_DSP_MODE*); - void (*ADSP_unregister_mode)(void*, void*, AE_DSP_MODES::AE_DSP_MODE*); - CAddonSoundPlay* (*ADSP_get_sound_play)(void*, void*, const char *); - void (*ADSP_release_sound_play)(CAddonSoundPlay*); - private: - void* m_libKODI_adsp; - void* m_Handle; - void* m_Callbacks; - struct cb_array - { - const char* libPath; - }; -}; - -class CAddonSoundPlay -{ -public: - CAddonSoundPlay(void *hdl, void *cb, const char *filename); - virtual ~CAddonSoundPlay(); - - /*! play the sound this object represents */ - virtual void Play(); - - /*! stop playing the sound this object represents */ - virtual void Stop(); - - /*! return true if the sound is currently playing */ - virtual bool IsPlaying(); - - /*! set the playback channel position of this sound, AE_DSP_CH_INVALID for all */ - virtual void SetChannel(AE_DSP_CHANNEL channel); - - /*! get the current playback volume of this sound, AE_DSP_CH_INVALID for all */ - virtual AE_DSP_CHANNEL GetChannel(); - - /*! set the playback volume of this sound */ - virtual void SetVolume(float volume); - - /*! get the current playback volume of this sound */ - virtual float GetVolume(); - -private: - std::string m_Filename; - void *m_Handle; - void *m_cb; - ADSPHANDLE m_PlayHandle; + AddonCB* m_Handle; + AddonInstance_AudioDSP *m_Callbacks; }; -- cgit v1.2.3