summaryrefslogtreecommitdiffstats
path: root/xbmc/addons/kodi-addon-dev-kit/include/kodi/libXBMC_pvr.h
diff options
context:
space:
mode:
authormanuel <manuel@mausz.at>2016-12-14 02:24:46 +0100
committermanuel <manuel@mausz.at>2016-12-14 02:24:46 +0100
commita662ba767a6444b76b0394eb60380eee3e839db7 (patch)
treea13d904b75e8d899e2b11df3db5bd2a8a47b0acb /xbmc/addons/kodi-addon-dev-kit/include/kodi/libXBMC_pvr.h
parent2818eb9609d118212211cd657134974f10428b31 (diff)
downloadkodi-pvr-build-a662ba767a6444b76b0394eb60380eee3e839db7.tar.gz
kodi-pvr-build-a662ba767a6444b76b0394eb60380eee3e839db7.tar.bz2
kodi-pvr-build-a662ba767a6444b76b0394eb60380eee3e839db7.zip
Sync with Krypton branch
Diffstat (limited to 'xbmc/addons/kodi-addon-dev-kit/include/kodi/libXBMC_pvr.h')
-rw-r--r--xbmc/addons/kodi-addon-dev-kit/include/kodi/libXBMC_pvr.h211
1 files changed, 147 insertions, 64 deletions
diff --git a/xbmc/addons/kodi-addon-dev-kit/include/kodi/libXBMC_pvr.h b/xbmc/addons/kodi-addon-dev-kit/include/kodi/libXBMC_pvr.h
index 3ae30a7..a769328 100644
--- a/xbmc/addons/kodi-addon-dev-kit/include/kodi/libXBMC_pvr.h
+++ b/xbmc/addons/kodi-addon-dev-kit/include/kodi/libXBMC_pvr.h
@@ -27,60 +27,29 @@
27#include "xbmc_pvr_types.h" 27#include "xbmc_pvr_types.h"
28#include "libXBMC_addon.h" 28#include "libXBMC_addon.h"
29 29
30#define PVR_HELPER_DLL_NAME XBMC_DLL_NAME("pvr")
31#define PVR_HELPER_DLL XBMC_DLL("pvr")
32
30#define DVD_TIME_BASE 1000000 33#define DVD_TIME_BASE 1000000
31 34
32//! @todo original definition is in DVDClock.h 35//! @todo original definition is in DVDClock.h
33#define DVD_NOPTS_VALUE 0xFFF0000000000000 36#define DVD_NOPTS_VALUE 0xFFF0000000000000
34 37
35namespace KodiAPI
36{
37namespace V1
38{
39namespace PVR
40{
41
42typedef struct CB_PVRLib
43{
44 void (*TransferEpgEntry)(void *userData, const ADDON_HANDLE handle, const EPG_TAG *epgentry);
45 void (*TransferChannelEntry)(void *userData, const ADDON_HANDLE handle, const PVR_CHANNEL *chan);
46 void (*TransferTimerEntry)(void *userData, const ADDON_HANDLE handle, const PVR_TIMER *timer);
47 void (*TransferRecordingEntry)(void *userData, const ADDON_HANDLE handle, const PVR_RECORDING *recording);
48 void (*AddMenuHook)(void *addonData, PVR_MENUHOOK *hook);
49 void (*Recording)(void *addonData, const char *Name, const char *FileName, bool On);
50 void (*TriggerChannelUpdate)(void *addonData);
51 void (*TriggerTimerUpdate)(void *addonData);
52 void (*TriggerRecordingUpdate)(void *addonData);
53 void (*TriggerChannelGroupsUpdate)(void *addonData);
54 void (*TriggerEpgUpdate)(void *addonData, unsigned int iChannelUid);
55
56 void (*TransferChannelGroup)(void *addonData, const ADDON_HANDLE handle, const PVR_CHANNEL_GROUP *group);
57 void (*TransferChannelGroupMember)(void *addonData, const ADDON_HANDLE handle, const PVR_CHANNEL_GROUP_MEMBER *member);
58
59 void (*FreeDemuxPacket)(void *addonData, DemuxPacket* pPacket);
60 DemuxPacket* (*AllocateDemuxPacket)(void *addonData, int iDataSize);
61
62 void (*ConnectionStateChange)(void* addonData, const char* strConnectionString, PVR_CONNECTION_STATE newState, const char *strMessage);
63 void (*EpgEventStateChange)(void* addonData, EPG_TAG* tag, unsigned int iUniqueChannelId, EPG_EVENT_STATE newState);
64} CB_PVRLib;
65
66} /* namespace PVR */
67} /* namespace V1 */
68} /* namespace KodiAPI */
69
70class CHelper_libXBMC_pvr 38class CHelper_libXBMC_pvr
71{ 39{
72public: 40public:
73 CHelper_libXBMC_pvr(void) 41 CHelper_libXBMC_pvr(void)
74 { 42 {
75 m_Handle = nullptr; 43 m_libXBMC_pvr = NULL;
76 m_Callbacks = nullptr; 44 m_Handle = NULL;
77 } 45 }
78 46
79 ~CHelper_libXBMC_pvr(void) 47 ~CHelper_libXBMC_pvr(void)
80 { 48 {
81 if (m_Handle && m_Callbacks) 49 if (m_libXBMC_pvr)
82 { 50 {
83 m_Handle->PVRLib_UnRegisterMe(m_Handle->addonData, m_Callbacks); 51 PVR_unregister_me(m_Handle, m_Callbacks);
52 dlclose(m_libXBMC_pvr);
84 } 53 }
85 } 54 }
86 55
@@ -91,12 +60,98 @@ public:
91 */ 60 */
92 bool RegisterMe(void* handle) 61 bool RegisterMe(void* handle)
93 { 62 {
94 m_Handle = static_cast<AddonCB*>(handle); 63 m_Handle = handle;
95 if (m_Handle) 64
96 m_Callbacks = (KodiAPI::V1::PVR::CB_PVRLib*)m_Handle->PVRLib_RegisterMe(m_Handle->addonData); 65 std::string libBasePath;
97 if (!m_Callbacks) 66 libBasePath = ((cb_array*)m_Handle)->libPath;
98 fprintf(stderr, "libXBMC_pvr-ERROR: PVRLib_register_me can't get callback table from Kodi !!!\n"); 67 libBasePath += PVR_HELPER_DLL;
99 68
69 m_libXBMC_pvr = dlopen(libBasePath.c_str(), RTLD_LAZY);
70 if (m_libXBMC_pvr == NULL)
71 {
72 fprintf(stderr, "Unable to load %s\n", dlerror());
73 return false;
74 }
75
76 PVR_register_me = (void* (*)(void *HANDLE))
77 dlsym(m_libXBMC_pvr, "PVR_register_me");
78 if (PVR_register_me == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
79
80 PVR_unregister_me = (void (*)(void* HANDLE, void* CB))
81 dlsym(m_libXBMC_pvr, "PVR_unregister_me");
82 if (PVR_unregister_me == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
83
84 PVR_transfer_epg_entry = (void (*)(void* HANDLE, void* CB, const ADDON_HANDLE handle, const EPG_TAG *epgentry))
85 dlsym(m_libXBMC_pvr, "PVR_transfer_epg_entry");
86 if (PVR_transfer_epg_entry == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
87
88 PVR_transfer_channel_entry = (void (*)(void* HANDLE, void* CB, const ADDON_HANDLE handle, const PVR_CHANNEL *chan))
89 dlsym(m_libXBMC_pvr, "PVR_transfer_channel_entry");
90 if (PVR_transfer_channel_entry == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
91
92 PVR_transfer_timer_entry = (void (*)(void* HANDLE, void* CB, const ADDON_HANDLE handle, const PVR_TIMER *timer))
93 dlsym(m_libXBMC_pvr, "PVR_transfer_timer_entry");
94 if (PVR_transfer_timer_entry == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
95
96 PVR_transfer_recording_entry = (void (*)(void* HANDLE, void* CB, const ADDON_HANDLE handle, const PVR_RECORDING *recording))
97 dlsym(m_libXBMC_pvr, "PVR_transfer_recording_entry");
98 if (PVR_transfer_recording_entry == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
99
100 PVR_add_menu_hook = (void (*)(void* HANDLE, void* CB, PVR_MENUHOOK *hook))
101 dlsym(m_libXBMC_pvr, "PVR_add_menu_hook");
102 if (PVR_add_menu_hook == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
103
104 PVR_recording = (void (*)(void* HANDLE, void* CB, const char *Name, const char *FileName, bool On))
105 dlsym(m_libXBMC_pvr, "PVR_recording");
106 if (PVR_recording == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
107
108 PVR_trigger_timer_update = (void (*)(void* HANDLE, void* CB))
109 dlsym(m_libXBMC_pvr, "PVR_trigger_timer_update");
110 if (PVR_trigger_timer_update == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
111
112 PVR_trigger_recording_update = (void (*)(void* HANDLE, void* CB))
113 dlsym(m_libXBMC_pvr, "PVR_trigger_recording_update");
114 if (PVR_trigger_recording_update == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
115
116 PVR_trigger_channel_update = (void (*)(void* HANDLE, void* CB))
117 dlsym(m_libXBMC_pvr, "PVR_trigger_channel_update");
118 if (PVR_trigger_channel_update == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
119
120 PVR_trigger_channel_groups_update = (void (*)(void* HANDLE, void* CB))
121 dlsym(m_libXBMC_pvr, "PVR_trigger_channel_groups_update");
122 if (PVR_trigger_channel_groups_update == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
123
124 PVR_trigger_epg_update = (void (*)(void* HANDLE, void* CB, unsigned int iChannelUid))
125 dlsym(m_libXBMC_pvr, "PVR_trigger_epg_update");
126 if (PVR_trigger_epg_update == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
127
128 PVR_transfer_channel_group = (void (*)(void* HANDLE, void* CB, const ADDON_HANDLE handle, const PVR_CHANNEL_GROUP *group))
129 dlsym(m_libXBMC_pvr, "PVR_transfer_channel_group");
130 if (PVR_transfer_channel_group == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
131
132 PVR_transfer_channel_group_member = (void (*)(void* HANDLE, void* CB, const ADDON_HANDLE handle, const PVR_CHANNEL_GROUP_MEMBER *member))
133 dlsym(m_libXBMC_pvr, "PVR_transfer_channel_group_member");
134 if (PVR_transfer_channel_group_member == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
135
136#ifdef USE_DEMUX
137 PVR_free_demux_packet = (void (*)(void* HANDLE, void* CB, DemuxPacket* pPacket))
138 dlsym(m_libXBMC_pvr, "PVR_free_demux_packet");
139 if (PVR_free_demux_packet == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
140
141 PVR_allocate_demux_packet = (DemuxPacket* (*)(void* HANDLE, void* CB, int iDataSize))
142 dlsym(m_libXBMC_pvr, "PVR_allocate_demux_packet");
143 if (PVR_allocate_demux_packet == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
144#endif
145
146 PVR_connection_state_change = (void (*)(void* HANDLE, void* CB, const char *strConnectionString, PVR_CONNECTION_STATE newState, const char *strMessage))
147 dlsym(m_libXBMC_pvr, "PVR_connection_state_change");
148 if (PVR_connection_state_change == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
149
150 PVR_epg_event_state_change = (void (*)(void* HANDLE, void* CB, EPG_TAG* tag, unsigned int iUniqueChannelId, EPG_EVENT_STATE newState))
151 dlsym(m_libXBMC_pvr, "PVR_epg_event_state_change");
152 if (PVR_epg_event_state_change == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
153
154 m_Callbacks = PVR_register_me(m_Handle);
100 return m_Callbacks != NULL; 155 return m_Callbacks != NULL;
101 } 156 }
102 157
@@ -107,7 +162,7 @@ public:
107 */ 162 */
108 void TransferEpgEntry(const ADDON_HANDLE handle, const EPG_TAG* entry) 163 void TransferEpgEntry(const ADDON_HANDLE handle, const EPG_TAG* entry)
109 { 164 {
110 return m_Callbacks->TransferEpgEntry(m_Handle->addonData, handle, entry); 165 return PVR_transfer_epg_entry(m_Handle, m_Callbacks, handle, entry);
111 } 166 }
112 167
113 /*! 168 /*!
@@ -117,7 +172,7 @@ public:
117 */ 172 */
118 void TransferChannelEntry(const ADDON_HANDLE handle, const PVR_CHANNEL* entry) 173 void TransferChannelEntry(const ADDON_HANDLE handle, const PVR_CHANNEL* entry)
119 { 174 {
120 return m_Callbacks->TransferChannelEntry(m_Handle->addonData, handle, entry); 175 return PVR_transfer_channel_entry(m_Handle, m_Callbacks, handle, entry);
121 } 176 }
122 177
123 /*! 178 /*!
@@ -127,7 +182,7 @@ public:
127 */ 182 */
128 void TransferTimerEntry(const ADDON_HANDLE handle, const PVR_TIMER* entry) 183 void TransferTimerEntry(const ADDON_HANDLE handle, const PVR_TIMER* entry)
129 { 184 {
130 return m_Callbacks->TransferTimerEntry(m_Handle->addonData, handle, entry); 185 return PVR_transfer_timer_entry(m_Handle, m_Callbacks, handle, entry);
131 } 186 }
132 187
133 /*! 188 /*!
@@ -137,7 +192,7 @@ public:
137 */ 192 */
138 void TransferRecordingEntry(const ADDON_HANDLE handle, const PVR_RECORDING* entry) 193 void TransferRecordingEntry(const ADDON_HANDLE handle, const PVR_RECORDING* entry)
139 { 194 {
140 return m_Callbacks->TransferRecordingEntry(m_Handle->addonData, handle, entry); 195 return PVR_transfer_recording_entry(m_Handle, m_Callbacks, handle, entry);
141 } 196 }
142 197
143 /*! 198 /*!
@@ -147,7 +202,7 @@ public:
147 */ 202 */
148 void TransferChannelGroup(const ADDON_HANDLE handle, const PVR_CHANNEL_GROUP* entry) 203 void TransferChannelGroup(const ADDON_HANDLE handle, const PVR_CHANNEL_GROUP* entry)
149 { 204 {
150 return m_Callbacks->TransferChannelGroup(m_Handle->addonData, handle, entry); 205 return PVR_transfer_channel_group(m_Handle, m_Callbacks, handle, entry);
151 } 206 }
152 207
153 /*! 208 /*!
@@ -157,7 +212,7 @@ public:
157 */ 212 */
158 void TransferChannelGroupMember(const ADDON_HANDLE handle, const PVR_CHANNEL_GROUP_MEMBER* entry) 213 void TransferChannelGroupMember(const ADDON_HANDLE handle, const PVR_CHANNEL_GROUP_MEMBER* entry)
159 { 214 {
160 return m_Callbacks->TransferChannelGroupMember(m_Handle->addonData, handle, entry); 215 return PVR_transfer_channel_group_member(m_Handle, m_Callbacks, handle, entry);
161 } 216 }
162 217
163 /*! 218 /*!
@@ -166,7 +221,7 @@ public:
166 */ 221 */
167 void AddMenuHook(PVR_MENUHOOK* hook) 222 void AddMenuHook(PVR_MENUHOOK* hook)
168 { 223 {
169 return m_Callbacks->AddMenuHook(m_Handle->addonData, hook); 224 return PVR_add_menu_hook(m_Handle, m_Callbacks, hook);
170 } 225 }
171 226
172 /*! 227 /*!
@@ -177,7 +232,7 @@ public:
177 */ 232 */
178 void Recording(const char* strRecordingName, const char* strFileName, bool bOn) 233 void Recording(const char* strRecordingName, const char* strFileName, bool bOn)
179 { 234 {
180 return m_Callbacks->Recording(m_Handle->addonData, strRecordingName, strFileName, bOn); 235 return PVR_recording(m_Handle, m_Callbacks, strRecordingName, strFileName, bOn);
181 } 236 }
182 237
183 /*! 238 /*!
@@ -185,7 +240,7 @@ public:
185 */ 240 */
186 void TriggerTimerUpdate(void) 241 void TriggerTimerUpdate(void)
187 { 242 {
188 return m_Callbacks->TriggerTimerUpdate(m_Handle->addonData); 243 return PVR_trigger_timer_update(m_Handle, m_Callbacks);
189 } 244 }
190 245
191 /*! 246 /*!
@@ -193,7 +248,7 @@ public:
193 */ 248 */
194 void TriggerRecordingUpdate(void) 249 void TriggerRecordingUpdate(void)
195 { 250 {
196 return m_Callbacks->TriggerRecordingUpdate(m_Handle->addonData); 251 return PVR_trigger_recording_update(m_Handle, m_Callbacks);
197 } 252 }
198 253
199 /*! 254 /*!
@@ -201,7 +256,7 @@ public:
201 */ 256 */
202 void TriggerChannelUpdate(void) 257 void TriggerChannelUpdate(void)
203 { 258 {
204 return m_Callbacks->TriggerChannelUpdate(m_Handle->addonData); 259 return PVR_trigger_channel_update(m_Handle, m_Callbacks);
205 } 260 }
206 261
207 /*! 262 /*!
@@ -210,7 +265,7 @@ public:
210 */ 265 */
211 void TriggerEpgUpdate(unsigned int iChannelUid) 266 void TriggerEpgUpdate(unsigned int iChannelUid)
212 { 267 {
213 return m_Callbacks->TriggerEpgUpdate(m_Handle->addonData, iChannelUid); 268 return PVR_trigger_epg_update(m_Handle, m_Callbacks, iChannelUid);
214 } 269 }
215 270
216 /*! 271 /*!
@@ -218,7 +273,7 @@ public:
218 */ 273 */
219 void TriggerChannelGroupsUpdate(void) 274 void TriggerChannelGroupsUpdate(void)
220 { 275 {
221 return m_Callbacks->TriggerChannelGroupsUpdate(m_Handle->addonData); 276 return PVR_trigger_channel_groups_update(m_Handle, m_Callbacks);
222 } 277 }
223 278
224#ifdef USE_DEMUX 279#ifdef USE_DEMUX
@@ -228,7 +283,7 @@ public:
228 */ 283 */
229 void FreeDemuxPacket(DemuxPacket* pPacket) 284 void FreeDemuxPacket(DemuxPacket* pPacket)
230 { 285 {
231 return m_Callbacks->FreeDemuxPacket(m_Handle->addonData, pPacket); 286 return PVR_free_demux_packet(m_Handle, m_Callbacks, pPacket);
232 } 287 }
233 288
234 /*! 289 /*!
@@ -238,7 +293,7 @@ public:
238 */ 293 */
239 DemuxPacket* AllocateDemuxPacket(int iDataSize) 294 DemuxPacket* AllocateDemuxPacket(int iDataSize)
240 { 295 {
241 return m_Callbacks->AllocateDemuxPacket(m_Handle->addonData, iDataSize); 296 return PVR_allocate_demux_packet(m_Handle, m_Callbacks, iDataSize);
242 } 297 }
243#endif 298#endif
244 299
@@ -251,7 +306,7 @@ public:
251 */ 306 */
252 void ConnectionStateChange(const char *strConnectionString, PVR_CONNECTION_STATE newState, const char *strMessage) 307 void ConnectionStateChange(const char *strConnectionString, PVR_CONNECTION_STATE newState, const char *strMessage)
253 { 308 {
254 return m_Callbacks->ConnectionStateChange(m_Handle->addonData, strConnectionString, newState, strMessage); 309 return PVR_connection_state_change(m_Handle, m_Callbacks, strConnectionString, newState, strMessage);
255 } 310 }
256 311
257 /*! 312 /*!
@@ -263,10 +318,38 @@ public:
263 */ 318 */
264 void EpgEventStateChange(EPG_TAG *tag, unsigned int iUniqueChannelId, EPG_EVENT_STATE newState) 319 void EpgEventStateChange(EPG_TAG *tag, unsigned int iUniqueChannelId, EPG_EVENT_STATE newState)
265 { 320 {
266 return m_Callbacks->EpgEventStateChange(m_Handle->addonData, tag, iUniqueChannelId, newState); 321 return PVR_epg_event_state_change(m_Handle, m_Callbacks, tag, iUniqueChannelId, newState);
267 } 322 }
268 323
324protected:
325 void* (*PVR_register_me)(void*);
326 void (*PVR_unregister_me)(void*, void*);
327 void (*PVR_transfer_epg_entry)(void*, void*, const ADDON_HANDLE, const EPG_TAG*);
328 void (*PVR_transfer_channel_entry)(void*, void*, const ADDON_HANDLE, const PVR_CHANNEL*);
329 void (*PVR_transfer_timer_entry)(void*, void*, const ADDON_HANDLE, const PVR_TIMER*);
330 void (*PVR_transfer_recording_entry)(void*, void*, const ADDON_HANDLE, const PVR_RECORDING*);
331 void (*PVR_add_menu_hook)(void*, void*, PVR_MENUHOOK*);
332 void (*PVR_recording)(void*, void*, const char*, const char*, bool);
333 void (*PVR_trigger_channel_update)(void*, void*);
334 void (*PVR_trigger_channel_groups_update)(void*, void*);
335 void (*PVR_trigger_timer_update)(void*, void*);
336 void (*PVR_trigger_recording_update)(void* , void*);
337 void (*PVR_trigger_epg_update)(void*, void*, unsigned int);
338 void (*PVR_transfer_channel_group)(void*, void*, const ADDON_HANDLE, const PVR_CHANNEL_GROUP*);
339 void (*PVR_transfer_channel_group_member)(void*, void*, const ADDON_HANDLE, const PVR_CHANNEL_GROUP_MEMBER*);
340#ifdef USE_DEMUX
341 void (*PVR_free_demux_packet)(void*, void*, DemuxPacket*);
342 DemuxPacket* (*PVR_allocate_demux_packet)(void*, void*, int);
343#endif
344 void (*PVR_connection_state_change)(void*, void*, const char*, PVR_CONNECTION_STATE, const char*);
345 void (*PVR_epg_event_state_change)(void*, void*, EPG_TAG*, unsigned int, EPG_EVENT_STATE);
346
269private: 347private:
270 AddonCB* m_Handle; 348 void* m_libXBMC_pvr;
271 KodiAPI::V1::PVR::CB_PVRLib *m_Callbacks; 349 void* m_Handle;
350 void* m_Callbacks;
351 struct cb_array
352 {
353 const char* libPath;
354 };
272}; 355};