diff options
| author | manuel <manuel@mausz.at> | 2016-12-14 02:24:46 +0100 |
|---|---|---|
| committer | manuel <manuel@mausz.at> | 2016-12-14 02:24:46 +0100 |
| commit | a662ba767a6444b76b0394eb60380eee3e839db7 (patch) | |
| tree | a13d904b75e8d899e2b11df3db5bd2a8a47b0acb /xbmc/addons/kodi-addon-dev-kit | |
| parent | 2818eb9609d118212211cd657134974f10428b31 (diff) | |
| download | kodi-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')
5 files changed, 215 insertions, 145 deletions
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 | ||
| 39 | namespace KodiAPI | ||
| 40 | { | ||
| 41 | namespace V1 | ||
| 42 | { | ||
| 43 | namespace InputStream | ||
| 44 | { | ||
| 45 | |||
| 46 | typedef 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 | |||
| 56 | class CHelper_libKODI_inputstream | 42 | class CHelper_libKODI_inputstream |
| 57 | { | 43 | { |
| 58 | public: | 44 | public: |
| 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 | ||
| 135 | protected: | ||
| 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 | |||
| 108 | private: | 141 | private: |
| 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 | ||
| 119 | typedef void* (*KODIAddOnLib_RegisterMe)(void *addonData); | ||
| 120 | typedef void (*KODIAddOnLib_UnRegisterMe)(void *addonData, void *cbTable); | ||
| 121 | typedef void* (*KODIAudioEngineLib_RegisterMe)(void *addonData); | ||
| 122 | typedef void (*KODIAudioEngineLib_UnRegisterMe)(void *addonData, void *cbTable); | ||
| 123 | typedef void* (*KODIGUILib_RegisterMe)(void *addonData); | ||
| 124 | typedef void (*KODIGUILib_UnRegisterMe)(void *addonData, void *cbTable); | ||
| 125 | typedef void* (*KODIPVRLib_RegisterMe)(void *addonData); | ||
| 126 | typedef void (*KODIPVRLib_UnRegisterMe)(void *addonData, void *cbTable); | ||
| 127 | typedef void* (*KODIADSPLib_RegisterMe)(void *addonData); | ||
| 128 | typedef void (*KODIADSPLib_UnRegisterMe)(void *addonData, void *cbTable); | ||
| 129 | typedef void* (*KODICodecLib_RegisterMe)(void *addonData); | ||
| 130 | typedef void (*KODICodecLib_UnRegisterMe)(void *addonData, void *cbTable); | ||
| 131 | typedef void* (*KODIINPUTSTREAMLib_RegisterMe)(void *addonData); | ||
| 132 | typedef void (*KODIINPUTSTREAMLib_UnRegisterMe)(void *addonData, void *cbTable); | ||
| 133 | typedef void* (*KODIPeripheralLib_RegisterMe)(void *addonData); | ||
| 134 | typedef void (*KODIPeripheralLib_UnRegisterMe)(void *addonData, void *cbTable); | ||
| 135 | typedef void* (*KODIGameLib_RegisterMe)(void *addonData); | ||
| 136 | typedef void (*KODIGameLib_UnRegisterMe)(void *addonData, void *cbTable); | ||
| 137 | |||
| 138 | typedef 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 | |||
| 162 | namespace ADDON | 119 | namespace 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 | ||
| 35 | namespace KodiAPI | ||
| 36 | { | ||
| 37 | namespace V1 | ||
| 38 | { | ||
| 39 | namespace PVR | ||
| 40 | { | ||
| 41 | |||
| 42 | typedef 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 | |||
| 70 | class CHelper_libXBMC_pvr | 38 | class CHelper_libXBMC_pvr |
| 71 | { | 39 | { |
| 72 | public: | 40 | public: |
| 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 | ||
| 324 | protected: | ||
| 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 | |||
| 269 | private: | 347 | private: |
| 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 | }; |
