summaryrefslogtreecommitdiffstats
path: root/xbmc/addons/kodi-addon-dev-kit/include/kodi/libKODI_adsp.h
diff options
context:
space:
mode:
authormanuel <manuel@mausz.at>2017-06-04 16:57:49 +0200
committermanuel <manuel@mausz.at>2017-06-04 16:57:49 +0200
commitf44ecaa4f27e7538ddcad66d40e543bffa2d2d86 (patch)
treed8de60fc7e17edeb6f0921726c038ee54b281445 /xbmc/addons/kodi-addon-dev-kit/include/kodi/libKODI_adsp.h
parentae08c8b7221bc965ac40d70e53fc8fcddb050c46 (diff)
downloadkodi-pvr-build-f44ecaa4f27e7538ddcad66d40e543bffa2d2d86.tar.gz
kodi-pvr-build-f44ecaa4f27e7538ddcad66d40e543bffa2d2d86.tar.bz2
kodi-pvr-build-f44ecaa4f27e7538ddcad66d40e543bffa2d2d86.zip
sync with upstream
Diffstat (limited to 'xbmc/addons/kodi-addon-dev-kit/include/kodi/libKODI_adsp.h')
-rw-r--r--xbmc/addons/kodi-addon-dev-kit/include/kodi/libKODI_adsp.h215
1 files changed, 100 insertions, 115 deletions
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 @@
27#include "kodi_adsp_types.h" 27#include "kodi_adsp_types.h"
28#include "libXBMC_addon.h" 28#include "libXBMC_addon.h"
29 29
30typedef void* ADSPHANDLE; 30class CAddonSoundPlay
31{
32public:
33 CAddonSoundPlay(AddonCB* hdl, AddonInstance_AudioDSP* cb, const char* filename)
34 : m_Filename(filename),
35 m_Handle(hdl),
36 m_cb(cb)
37 {
38 m_PlayHandle = nullptr;
39 if (!hdl || !cb)
40 fprintf(stderr, "libKODI_adsp-ERROR: ADSP_get_sound_play is called with NULL handle !!!\n");
41 else
42 {
43 m_PlayHandle = m_cb->toKodi.SoundPlay_GetHandle(m_cb->toKodi.kodiInstance, m_Filename.c_str());
44 if (!m_PlayHandle)
45 fprintf(stderr, "libKODI_adsp-ERROR: ADSP_get_sound_play can't get callback table from KODI !!!\n");
46 }
47 }
48
49 ~CAddonSoundPlay()
50 {
51 if (m_PlayHandle)
52 m_cb->toKodi.SoundPlay_ReleaseHandle(m_cb->toKodi.kodiInstance, m_PlayHandle);
53 }
54
55 /*! play the sound this object represents */
56 void Play()
57 {
58 if (m_PlayHandle)
59 m_cb->toKodi.SoundPlay_Play(m_cb->toKodi.kodiInstance, m_PlayHandle);
60 }
31 61
32#define ADSP_HELPER_DLL KODI_DLL("adsp")
33#define ADSP_HELPER_DLL_NAME KODI_DLL_NAME("adsp")
34 62
35class CAddonSoundPlay; 63 /*! stop playing the sound this object represents */
64 void Stop()
65 {
66 if (m_PlayHandle)
67 m_cb->toKodi.SoundPlay_Stop(m_cb->toKodi.kodiInstance, m_PlayHandle);
68 }
69
70 /*! return true if the sound is currently playing */
71 bool IsPlaying()
72 {
73 if (!m_PlayHandle)
74 return false;
75
76 return m_cb->toKodi.SoundPlay_IsPlaying(m_cb->toKodi.kodiInstance, m_PlayHandle);
77 }
78
79 /*! set the playback channel position of this sound, AE_DSP_CH_INVALID for all */
80 void SetChannel(AE_DSP_CHANNEL channel)
81 {
82 if (m_PlayHandle)
83 m_cb->toKodi.SoundPlay_SetChannel(m_cb->toKodi.kodiInstance, m_PlayHandle, channel);
84 }
85
86 /*! get the current playback volume of this sound, AE_DSP_CH_INVALID for all */
87 AE_DSP_CHANNEL GetChannel()
88 {
89 if (!m_PlayHandle)
90 return AE_DSP_CH_INVALID;
91 return m_cb->toKodi.SoundPlay_GetChannel(m_cb->toKodi.kodiInstance, m_PlayHandle);
92 }
93
94 /*! set the playback volume of this sound */
95 void SetVolume(float volume)
96 {
97 if (m_PlayHandle)
98 m_cb->toKodi.SoundPlay_SetVolume(m_cb->toKodi.kodiInstance, m_PlayHandle, volume);
99 }
100
101 /*! get the current playback volume of this sound */
102 float GetVolume()
103 {
104 if (!m_PlayHandle)
105 return 0.0f;
106
107 return m_cb->toKodi.SoundPlay_GetVolume(m_cb->toKodi.kodiInstance, m_PlayHandle);
108 }
109
110private:
111 std::string m_Filename;
112 AddonCB* m_Handle;
113 AddonInstance_AudioDSP *m_cb;
114 ADSPHANDLE m_PlayHandle;
115};
36 116
37class CHelper_libKODI_adsp 117class CHelper_libKODI_adsp
38{ 118{
39public: 119public:
40 CHelper_libKODI_adsp(void) 120 CHelper_libKODI_adsp(void)
41 { 121 {
42 m_libKODI_adsp = NULL; 122 m_Handle = nullptr;
43 m_Handle = NULL; 123 m_Callbacks = nullptr;
44 } 124 }
45 125
46 ~CHelper_libKODI_adsp(void) 126 ~CHelper_libKODI_adsp(void)
47 { 127 {
48 if (m_libKODI_adsp)
49 {
50 ADSP_unregister_me(m_Handle, m_Callbacks);
51 dlclose(m_libKODI_adsp);
52 }
53 } 128 }
54 129
55 /*! 130 /*!
@@ -59,53 +134,13 @@ public:
59 */ 134 */
60 bool RegisterMe(void* handle) 135 bool RegisterMe(void* handle)
61 { 136 {
62 m_Handle = handle; 137 m_Handle = static_cast<AddonCB*>(handle);
63 138 if (m_Handle)
64 std::string libBasePath; 139 m_Callbacks = (AddonInstance_AudioDSP*)m_Handle->ADSPLib_RegisterMe(m_Handle->addonData);
65 libBasePath = ((cb_array*)m_Handle)->libPath; 140 if (!m_Callbacks)
66 libBasePath += ADSP_HELPER_DLL; 141 fprintf(stderr, "libKODI_adsp-ERROR: ADSLib_RegisterMe can't get callback table from Kodi !!!\n");
67
68 m_libKODI_adsp = dlopen(libBasePath.c_str(), RTLD_LAZY);
69 if (m_libKODI_adsp == NULL)
70 {
71 fprintf(stderr, "Unable to load %s\n", dlerror());
72 return false;
73 }
74
75 ADSP_register_me = (void* (*)(void *HANDLE))
76 dlsym(m_libKODI_adsp, "ADSP_register_me");
77 if (ADSP_register_me == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
78
79 ADSP_unregister_me = (void (*)(void* HANDLE, void* CB))
80 dlsym(m_libKODI_adsp, "ADSP_unregister_me");
81 if (ADSP_unregister_me == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
82 142
83 ADSP_add_menu_hook = (void (*)(void* HANDLE, void* CB, AE_DSP_MENUHOOK *hook)) 143 return m_Callbacks != nullptr;
84 dlsym(m_libKODI_adsp, "ADSP_add_menu_hook");
85 if (ADSP_add_menu_hook == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
86
87 ADSP_remove_menu_hook = (void (*)(void* HANDLE, void* CB, AE_DSP_MENUHOOK *hook))
88 dlsym(m_libKODI_adsp, "ADSP_remove_menu_hook");
89 if (ADSP_remove_menu_hook == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
90
91 ADSP_register_mode = (void (*)(void *HANDLE, void* CB, AE_DSP_MODES::AE_DSP_MODE *modes))
92 dlsym(m_libKODI_adsp, "ADSP_register_mode");
93 if (ADSP_register_mode == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
94
95 ADSP_unregister_mode = (void (*)(void* HANDLE, void* CB, AE_DSP_MODES::AE_DSP_MODE *modes))
96 dlsym(m_libKODI_adsp, "ADSP_unregister_mode");
97 if (ADSP_unregister_mode == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
98
99 ADSP_get_sound_play = (CAddonSoundPlay* (*)(void *HANDLE, void *CB, const char *filename))
100 dlsym(m_libKODI_adsp, "ADSP_get_sound_play");
101 if (ADSP_get_sound_play == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
102
103 ADSP_release_sound_play = (void (*)(CAddonSoundPlay* p))
104 dlsym(m_libKODI_adsp, "ADSP_release_sound_play");
105 if (ADSP_release_sound_play == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
106
107 m_Callbacks = ADSP_register_me(m_Handle);
108 return m_Callbacks != NULL;
109 } 144 }
110 145
111 /*! 146 /*!
@@ -114,7 +149,7 @@ public:
114 */ 149 */
115 void AddMenuHook(AE_DSP_MENUHOOK* hook) 150 void AddMenuHook(AE_DSP_MENUHOOK* hook)
116 { 151 {
117 return ADSP_add_menu_hook(m_Handle, m_Callbacks, hook); 152 return m_Callbacks->toKodi.AddMenuHook(m_Callbacks->toKodi.kodiInstance, hook);
118 } 153 }
119 154
120 /*! 155 /*!
@@ -123,7 +158,7 @@ public:
123 */ 158 */
124 void RemoveMenuHook(AE_DSP_MENUHOOK* hook) 159 void RemoveMenuHook(AE_DSP_MENUHOOK* hook)
125 { 160 {
126 return ADSP_remove_menu_hook(m_Handle, m_Callbacks, hook); 161 return m_Callbacks->toKodi.RemoveMenuHook(m_Callbacks->toKodi.kodiInstance, hook);
127 } 162 }
128 163
129 /*! 164 /*!
@@ -133,7 +168,7 @@ public:
133 */ 168 */
134 void RegisterMode(AE_DSP_MODES::AE_DSP_MODE* mode) 169 void RegisterMode(AE_DSP_MODES::AE_DSP_MODE* mode)
135 { 170 {
136 return ADSP_register_mode(m_Handle, m_Callbacks, mode); 171 return m_Callbacks->toKodi.RegisterMode(m_Callbacks->toKodi.kodiInstance, mode);
137 } 172 }
138 173
139 /*! 174 /*!
@@ -142,7 +177,7 @@ public:
142 */ 177 */
143 void UnregisterMode(AE_DSP_MODES::AE_DSP_MODE* mode) 178 void UnregisterMode(AE_DSP_MODES::AE_DSP_MODE* mode)
144 { 179 {
145 return ADSP_unregister_mode(m_Handle, m_Callbacks, mode); 180 return m_Callbacks->toKodi.UnregisterMode(m_Callbacks->toKodi.kodiInstance, mode);
146 } 181 }
147 182
148 /*! 183 /*!
@@ -151,7 +186,7 @@ public:
151 */ 186 */
152 CAddonSoundPlay* GetSoundPlay(const char *filename) 187 CAddonSoundPlay* GetSoundPlay(const char *filename)
153 { 188 {
154 return ADSP_get_sound_play(m_Handle, m_Callbacks, filename); 189 return new CAddonSoundPlay(m_Handle, m_Callbacks, filename);
155 } 190 }
156 191
157 /*! 192 /*!
@@ -160,60 +195,10 @@ public:
160 */ 195 */
161 void ReleaseSoundPlay(CAddonSoundPlay* p) 196 void ReleaseSoundPlay(CAddonSoundPlay* p)
162 { 197 {
163 return ADSP_release_sound_play(p); 198 delete p;
164 } 199 }
165 200
166protected:
167 void* (*ADSP_register_me)(void*);
168
169 void (*ADSP_unregister_me)(void*, void*);
170 void (*ADSP_add_menu_hook)(void*, void*, AE_DSP_MENUHOOK*);
171 void (*ADSP_remove_menu_hook)(void*, void*, AE_DSP_MENUHOOK*);
172 void (*ADSP_register_mode)(void*, void*, AE_DSP_MODES::AE_DSP_MODE*);
173 void (*ADSP_unregister_mode)(void*, void*, AE_DSP_MODES::AE_DSP_MODE*);
174 CAddonSoundPlay* (*ADSP_get_sound_play)(void*, void*, const char *);
175 void (*ADSP_release_sound_play)(CAddonSoundPlay*);
176
177private: 201private:
178 void* m_libKODI_adsp; 202 AddonCB* m_Handle;
179 void* m_Handle; 203 AddonInstance_AudioDSP *m_Callbacks;
180 void* m_Callbacks;
181 struct cb_array
182 {
183 const char* libPath;
184 };
185};
186
187class CAddonSoundPlay
188{
189public:
190 CAddonSoundPlay(void *hdl, void *cb, const char *filename);
191 virtual ~CAddonSoundPlay();
192
193 /*! play the sound this object represents */
194 virtual void Play();
195
196 /*! stop playing the sound this object represents */
197 virtual void Stop();
198
199 /*! return true if the sound is currently playing */
200 virtual bool IsPlaying();
201
202 /*! set the playback channel position of this sound, AE_DSP_CH_INVALID for all */
203 virtual void SetChannel(AE_DSP_CHANNEL channel);
204
205 /*! get the current playback volume of this sound, AE_DSP_CH_INVALID for all */
206 virtual AE_DSP_CHANNEL GetChannel();
207
208 /*! set the playback volume of this sound */
209 virtual void SetVolume(float volume);
210
211 /*! get the current playback volume of this sound */
212 virtual float GetVolume();
213
214private:
215 std::string m_Filename;
216 void *m_Handle;
217 void *m_cb;
218 ADSPHANDLE m_PlayHandle;
219}; 204};