summaryrefslogtreecommitdiffstats
path: root/xbmc
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
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')
-rw-r--r--xbmc/addons/addon-bindings.mk5
-rw-r--r--xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_inputstream_types.h7
-rw-r--r--xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_peripheral_types.h3
-rw-r--r--xbmc/addons/kodi-addon-dev-kit/include/kodi/libKODI_inputstream.h96
-rw-r--r--xbmc/addons/kodi-addon-dev-kit/include/kodi/libXBMC_addon.h43
-rw-r--r--xbmc/addons/kodi-addon-dev-kit/include/kodi/libXBMC_pvr.h211
6 files changed, 215 insertions, 150 deletions
diff --git a/xbmc/addons/addon-bindings.mk b/xbmc/addons/addon-bindings.mk
index 788b50e..6bfed36 100644
--- a/xbmc/addons/addon-bindings.mk
+++ b/xbmc/addons/addon-bindings.mk
@@ -13,9 +13,6 @@ BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_audioenc_types.h
13BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_audioengine_types.h 13BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_audioengine_types.h
14BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_codec_types.h 14BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_codec_types.h
15BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_epg_types.h 15BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_epg_types.h
16BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_game_callbacks.h
17BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_game_dll.h
18BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_game_types.h
19BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_inputstream_dll.h 16BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_inputstream_dll.h
20BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_inputstream_types.h 17BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_inputstream_types.h
21BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_peripheral_callbacks.h 18BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_peripheral_callbacks.h
@@ -33,7 +30,6 @@ BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_vis_types.h
33BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/libXBMC_addon.h 30BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/libXBMC_addon.h
34BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/libKODI_audioengine.h 31BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/libKODI_audioengine.h
35BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/libKODI_adsp.h 32BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/libKODI_adsp.h
36BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/libKODI_game.h
37BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/libKODI_guilib.h 33BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/libKODI_guilib.h
38BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/libKODI_inputstream.h 34BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/libKODI_inputstream.h
39BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/libKODI_peripheral.h 35BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/libKODI_peripheral.h
@@ -42,4 +38,3 @@ BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/libXBMC_codec.h
42BINDINGS+=xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxPacket.h 38BINDINGS+=xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxPacket.h
43BINDINGS+=xbmc/cores/AudioEngine/Utils/AEChannelData.h 39BINDINGS+=xbmc/cores/AudioEngine/Utils/AEChannelData.h
44BINDINGS+=xbmc/filesystem/IFileTypes.h 40BINDINGS+=xbmc/filesystem/IFileTypes.h
45BINDINGS+=xbmc/input/XBMC_vkeys.h
diff --git a/xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_inputstream_types.h b/xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_inputstream_types.h
index 46e9d03..87807e2 100644
--- a/xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_inputstream_types.h
+++ b/xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_inputstream_types.h
@@ -20,16 +20,9 @@
20 * 20 *
21 */ 21 */
22 22
23#ifdef TARGET_WINDOWS
24#include <windows.h>
25#else
26#ifndef __cdecl 23#ifndef __cdecl
27#define __cdecl 24#define __cdecl
28#endif 25#endif
29#ifndef __declspec
30#define __declspec(X)
31#endif
32#endif
33 26
34#ifdef BUILD_KODI_ADDON 27#ifdef BUILD_KODI_ADDON
35#include "DVDDemuxPacket.h" 28#include "DVDDemuxPacket.h"
diff --git a/xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_peripheral_types.h b/xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_peripheral_types.h
index d7c4282..2df5622 100644
--- a/xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_peripheral_types.h
+++ b/xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_peripheral_types.h
@@ -51,7 +51,7 @@
51#endif 51#endif
52 52
53/* current Peripheral API version */ 53/* current Peripheral API version */
54#define PERIPHERAL_API_VERSION "1.2.1" 54#define PERIPHERAL_API_VERSION "1.2.0"
55 55
56/* min. Peripheral API version */ 56/* min. Peripheral API version */
57#define PERIPHERAL_MIN_API_VERSION "1.2.0" 57#define PERIPHERAL_MIN_API_VERSION "1.2.0"
@@ -84,7 +84,6 @@ extern "C"
84 { 84 {
85 PERIPHERAL_TYPE_UNKNOWN, 85 PERIPHERAL_TYPE_UNKNOWN,
86 PERIPHERAL_TYPE_JOYSTICK, 86 PERIPHERAL_TYPE_JOYSTICK,
87 PERIPHERAL_TYPE_KEYBOARD,
88 } PERIPHERAL_TYPE; 87 } PERIPHERAL_TYPE;
89 88
90 typedef struct PERIPHERAL_INFO 89 typedef struct PERIPHERAL_INFO
diff --git a/xbmc/addons/kodi-addon-dev-kit/include/kodi/libKODI_inputstream.h b/xbmc/addons/kodi-addon-dev-kit/include/kodi/libKODI_inputstream.h
index c55a42b..a6e83cb 100644
--- a/xbmc/addons/kodi-addon-dev-kit/include/kodi/libKODI_inputstream.h
+++ b/xbmc/addons/kodi-addon-dev-kit/include/kodi/libKODI_inputstream.h
@@ -33,40 +33,27 @@
33#include "cores/VideoPlayer/DVDDemuxers/DVDDemuxPacket.h" 33#include "cores/VideoPlayer/DVDDemuxers/DVDDemuxPacket.h"
34#endif 34#endif
35 35
36#define INPUTSTREAM_HELPER_DLL KODI_DLL("inputstream")
37#define INPUTSTREAM_HELPER_DLL_NAME KODI_DLL_NAME("inputstream")
38
36/* current input stream API version */ 39/* current input stream API version */
37#define KODI_INPUTSTREAM_API_VERSION "1.0.0" 40#define KODI_INPUTSTREAM_API_VERSION "1.0.0"
38 41
39namespace KodiAPI
40{
41namespace V1
42{
43namespace InputStream
44{
45
46typedef struct CB_INPUTSTREAMLib
47{
48 void (*FreeDemuxPacket)(void *addonData, DemuxPacket* pPacket);
49 DemuxPacket* (*AllocateDemuxPacket)(void *addonData, int iDataSize);
50} CB_INPUTSTREAMLib;
51
52} /* namespace InputStream */
53} /* namespace V1 */
54} /* namespace KodiAPI */
55
56class CHelper_libKODI_inputstream 42class CHelper_libKODI_inputstream
57{ 43{
58public: 44public:
59 CHelper_libKODI_inputstream(void) 45 CHelper_libKODI_inputstream(void)
60 { 46 {
47 m_libKODI_inputstream = nullptr;
61 m_Handle = nullptr; 48 m_Handle = nullptr;
62 m_Callbacks = nullptr;
63 } 49 }
64 50
65 ~CHelper_libKODI_inputstream(void) 51 ~CHelper_libKODI_inputstream(void)
66 { 52 {
67 if (m_Handle && m_Callbacks) 53 if (m_libKODI_inputstream)
68 { 54 {
69 m_Handle->INPUTSTREAMLib_UnRegisterMe(m_Handle->addonData, m_Callbacks); 55 INPUTSTREAM_unregister_me(m_Handle, m_Callbacks);
56 dlclose(m_libKODI_inputstream);
70 } 57 }
71 } 58 }
72 59
@@ -77,12 +64,52 @@ public:
77 */ 64 */
78 bool RegisterMe(void* handle) 65 bool RegisterMe(void* handle)
79 { 66 {
80 m_Handle = static_cast<AddonCB*>(handle); 67 m_Handle = handle;
81 if (m_Handle) 68
82 m_Callbacks = (KodiAPI::V1::InputStream::CB_INPUTSTREAMLib*)m_Handle->INPUTSTREAMLib_RegisterMe(m_Handle->addonData); 69 std::string libBasePath;
83 if (!m_Callbacks) 70 libBasePath = ((cb_array*)m_Handle)->libPath;
84 fprintf(stderr, "libKODI_inputstream-ERROR: InputStream_RegisterMe can't get callback table from Kodi !!!\n"); 71 libBasePath += INPUTSTREAM_HELPER_DLL;
72
73 m_libKODI_inputstream = dlopen(libBasePath.c_str(), RTLD_LAZY);
74 if (m_libKODI_inputstream == nullptr)
75 {
76 fprintf(stderr, "Unable to load %s\n", dlerror());
77 return false;
78 }
79
80 INPUTSTREAM_register_me = (void* (*)(void *HANDLE))
81 dlsym(m_libKODI_inputstream, "INPUTSTREAM_register_me");
82 if (INPUTSTREAM_register_me == nullptr)
83 {
84 fprintf(stderr, "Unable to assign function %s\n", dlerror());
85 return false;
86 }
85 87
88 INPUTSTREAM_unregister_me = (void (*)(void* HANDLE, void* CB))
89 dlsym(m_libKODI_inputstream, "INPUTSTREAM_unregister_me");
90 if (INPUTSTREAM_unregister_me == nullptr)
91 {
92 fprintf(stderr, "Unable to assign function %s\n", dlerror());
93 return false;
94 }
95
96 INPUTSTREAM_free_demux_packet = (void (*)(void* HANDLE, void* CB, DemuxPacket* pPacket))
97 dlsym(m_libKODI_inputstream, "INPUTSTREAM_free_demux_packet");
98 if (INPUTSTREAM_free_demux_packet == NULL)
99 {
100 fprintf(stderr, "Unable to assign function %s\n", dlerror());
101 return false;
102 }
103
104 INPUTSTREAM_allocate_demux_packet = (DemuxPacket* (*)(void* HANDLE, void* CB, int iDataSize))
105 dlsym(m_libKODI_inputstream, "INPUTSTREAM_allocate_demux_packet");
106 if (INPUTSTREAM_allocate_demux_packet == NULL)
107 {
108 fprintf(stderr, "Unable to assign function %s\n", dlerror());
109 return false;
110 }
111
112 m_Callbacks = INPUTSTREAM_register_me(m_Handle);
86 return m_Callbacks != nullptr; 113 return m_Callbacks != nullptr;
87 } 114 }
88 115
@@ -93,7 +120,7 @@ public:
93 */ 120 */
94 DemuxPacket* AllocateDemuxPacket(int iDataSize) 121 DemuxPacket* AllocateDemuxPacket(int iDataSize)
95 { 122 {
96 return m_Callbacks->AllocateDemuxPacket(m_Handle->addonData, iDataSize); 123 return INPUTSTREAM_allocate_demux_packet(m_Handle, m_Callbacks, iDataSize);
97 } 124 }
98 125
99 /*! 126 /*!
@@ -102,10 +129,21 @@ public:
102 */ 129 */
103 void FreeDemuxPacket(DemuxPacket* pPacket) 130 void FreeDemuxPacket(DemuxPacket* pPacket)
104 { 131 {
105 return m_Callbacks->FreeDemuxPacket(m_Handle->addonData, pPacket); 132 return INPUTSTREAM_free_demux_packet(m_Handle, m_Callbacks, pPacket);
106 } 133 }
107 134
135protected:
136 void* (*INPUTSTREAM_register_me)(void*);
137 void (*INPUTSTREAM_unregister_me)(void*, void*);
138 void (*INPUTSTREAM_free_demux_packet)(void*, void*, DemuxPacket*);
139 DemuxPacket* (*INPUTSTREAM_allocate_demux_packet)(void*, void*, int);
140
108private: 141private:
109 AddonCB* m_Handle; 142 void* m_libKODI_inputstream;
110 KodiAPI::V1::InputStream::CB_INPUTSTREAMLib* m_Callbacks; 143 void* m_Handle;
144 void* m_Callbacks;
145 struct cb_array
146 {
147 const char* libPath;
148 };
111}; 149};
diff --git a/xbmc/addons/kodi-addon-dev-kit/include/kodi/libXBMC_addon.h b/xbmc/addons/kodi-addon-dev-kit/include/kodi/libXBMC_addon.h
index d9f72c1..70bd19b 100644
--- a/xbmc/addons/kodi-addon-dev-kit/include/kodi/libXBMC_addon.h
+++ b/xbmc/addons/kodi-addon-dev-kit/include/kodi/libXBMC_addon.h
@@ -116,49 +116,6 @@ typedef intptr_t ssize_t;
116/* current addon API version */ 116/* current addon API version */
117#define KODI_ADDON_API_VERSION "1.0.0" 117#define KODI_ADDON_API_VERSION "1.0.0"
118 118
119typedef void* (*KODIAddOnLib_RegisterMe)(void *addonData);
120typedef void (*KODIAddOnLib_UnRegisterMe)(void *addonData, void *cbTable);
121typedef void* (*KODIAudioEngineLib_RegisterMe)(void *addonData);
122typedef void (*KODIAudioEngineLib_UnRegisterMe)(void *addonData, void *cbTable);
123typedef void* (*KODIGUILib_RegisterMe)(void *addonData);
124typedef void (*KODIGUILib_UnRegisterMe)(void *addonData, void *cbTable);
125typedef void* (*KODIPVRLib_RegisterMe)(void *addonData);
126typedef void (*KODIPVRLib_UnRegisterMe)(void *addonData, void *cbTable);
127typedef void* (*KODIADSPLib_RegisterMe)(void *addonData);
128typedef void (*KODIADSPLib_UnRegisterMe)(void *addonData, void *cbTable);
129typedef void* (*KODICodecLib_RegisterMe)(void *addonData);
130typedef void (*KODICodecLib_UnRegisterMe)(void *addonData, void *cbTable);
131typedef void* (*KODIINPUTSTREAMLib_RegisterMe)(void *addonData);
132typedef void (*KODIINPUTSTREAMLib_UnRegisterMe)(void *addonData, void *cbTable);
133typedef void* (*KODIPeripheralLib_RegisterMe)(void *addonData);
134typedef void (*KODIPeripheralLib_UnRegisterMe)(void *addonData, void *cbTable);
135typedef void* (*KODIGameLib_RegisterMe)(void *addonData);
136typedef void (*KODIGameLib_UnRegisterMe)(void *addonData, void *cbTable);
137
138typedef struct AddonCB
139{
140 const char* libBasePath; ///< Never, never change this!!!
141 void* addonData;
142 KODIAddOnLib_RegisterMe AddOnLib_RegisterMe;
143 KODIAddOnLib_UnRegisterMe AddOnLib_UnRegisterMe;
144 KODIAudioEngineLib_RegisterMe AudioEngineLib_RegisterMe;
145 KODIAudioEngineLib_UnRegisterMe AudioEngineLib_UnRegisterMe;
146 KODICodecLib_RegisterMe CodecLib_RegisterMe;
147 KODICodecLib_UnRegisterMe CodecLib_UnRegisterMe;
148 KODIGUILib_RegisterMe GUILib_RegisterMe;
149 KODIGUILib_UnRegisterMe GUILib_UnRegisterMe;
150 KODIPVRLib_RegisterMe PVRLib_RegisterMe;
151 KODIPVRLib_UnRegisterMe PVRLib_UnRegisterMe;
152 KODIADSPLib_RegisterMe ADSPLib_RegisterMe;
153 KODIADSPLib_UnRegisterMe ADSPLib_UnRegisterMe;
154 KODIINPUTSTREAMLib_RegisterMe INPUTSTREAMLib_RegisterMe;
155 KODIINPUTSTREAMLib_UnRegisterMe INPUTSTREAMLib_UnRegisterMe;
156 KODIPeripheralLib_RegisterMe PeripheralLib_RegisterMe;
157 KODIPeripheralLib_UnRegisterMe PeripheralLib_UnRegisterMe;
158 KODIGameLib_RegisterMe GameLib_RegisterMe;
159 KODIGameLib_UnRegisterMe GameLib_UnRegisterMe;
160} AddonCB;
161
162namespace ADDON 119namespace ADDON
163{ 120{
164 typedef enum addon_log 121 typedef enum addon_log
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};