From a662ba767a6444b76b0394eb60380eee3e839db7 Mon Sep 17 00:00:00 2001 From: manuel Date: Wed, 14 Dec 2016 02:24:46 +0100 Subject: Sync with Krypton branch --- xbmc/addons/addon-bindings.mk | 5 - .../include/kodi/kodi_inputstream_types.h | 7 - .../include/kodi/kodi_peripheral_types.h | 3 +- .../include/kodi/libKODI_inputstream.h | 96 +++++++--- .../include/kodi/libXBMC_addon.h | 43 ----- .../kodi-addon-dev-kit/include/kodi/libXBMC_pvr.h | 211 ++++++++++++++------- 6 files changed, 215 insertions(+), 150 deletions(-) (limited to 'xbmc') 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 BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_audioengine_types.h BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_codec_types.h BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_epg_types.h -BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_game_callbacks.h -BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_game_dll.h -BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_game_types.h BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_inputstream_dll.h BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/kodi_inputstream_types.h BINDINGS+=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 BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/libXBMC_addon.h BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/libKODI_audioengine.h BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/libKODI_adsp.h -BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/libKODI_game.h BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/libKODI_guilib.h BINDINGS+=xbmc/addons/kodi-addon-dev-kit/include/kodi/libKODI_inputstream.h BINDINGS+=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 BINDINGS+=xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxPacket.h BINDINGS+=xbmc/cores/AudioEngine/Utils/AEChannelData.h BINDINGS+=xbmc/filesystem/IFileTypes.h -BINDINGS+=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 @@ * */ -#ifdef TARGET_WINDOWS -#include -#else #ifndef __cdecl #define __cdecl #endif -#ifndef __declspec -#define __declspec(X) -#endif -#endif #ifdef BUILD_KODI_ADDON #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 @@ #endif /* current Peripheral API version */ -#define PERIPHERAL_API_VERSION "1.2.1" +#define PERIPHERAL_API_VERSION "1.2.0" /* min. Peripheral API version */ #define PERIPHERAL_MIN_API_VERSION "1.2.0" @@ -84,7 +84,6 @@ extern "C" { PERIPHERAL_TYPE_UNKNOWN, PERIPHERAL_TYPE_JOYSTICK, - PERIPHERAL_TYPE_KEYBOARD, } PERIPHERAL_TYPE; 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 @@ #include "cores/VideoPlayer/DVDDemuxers/DVDDemuxPacket.h" #endif +#define INPUTSTREAM_HELPER_DLL KODI_DLL("inputstream") +#define INPUTSTREAM_HELPER_DLL_NAME KODI_DLL_NAME("inputstream") + /* current input stream API version */ #define KODI_INPUTSTREAM_API_VERSION "1.0.0" -namespace KodiAPI -{ -namespace V1 -{ -namespace InputStream -{ - -typedef struct CB_INPUTSTREAMLib -{ - void (*FreeDemuxPacket)(void *addonData, DemuxPacket* pPacket); - DemuxPacket* (*AllocateDemuxPacket)(void *addonData, int iDataSize); -} CB_INPUTSTREAMLib; - -} /* namespace InputStream */ -} /* namespace V1 */ -} /* namespace KodiAPI */ - class CHelper_libKODI_inputstream { public: CHelper_libKODI_inputstream(void) { + m_libKODI_inputstream = nullptr; m_Handle = nullptr; - m_Callbacks = nullptr; } ~CHelper_libKODI_inputstream(void) { - if (m_Handle && m_Callbacks) + if (m_libKODI_inputstream) { - m_Handle->INPUTSTREAMLib_UnRegisterMe(m_Handle->addonData, m_Callbacks); + INPUTSTREAM_unregister_me(m_Handle, m_Callbacks); + dlclose(m_libKODI_inputstream); } } @@ -77,12 +64,52 @@ public: */ bool RegisterMe(void* handle) { - m_Handle = static_cast(handle); - if (m_Handle) - m_Callbacks = (KodiAPI::V1::InputStream::CB_INPUTSTREAMLib*)m_Handle->INPUTSTREAMLib_RegisterMe(m_Handle->addonData); - if (!m_Callbacks) - fprintf(stderr, "libKODI_inputstream-ERROR: InputStream_RegisterMe can't get callback table from Kodi !!!\n"); + m_Handle = handle; + + std::string libBasePath; + libBasePath = ((cb_array*)m_Handle)->libPath; + libBasePath += INPUTSTREAM_HELPER_DLL; + + m_libKODI_inputstream = dlopen(libBasePath.c_str(), RTLD_LAZY); + if (m_libKODI_inputstream == nullptr) + { + fprintf(stderr, "Unable to load %s\n", dlerror()); + return false; + } + + INPUTSTREAM_register_me = (void* (*)(void *HANDLE)) + dlsym(m_libKODI_inputstream, "INPUTSTREAM_register_me"); + if (INPUTSTREAM_register_me == nullptr) + { + fprintf(stderr, "Unable to assign function %s\n", dlerror()); + return false; + } + INPUTSTREAM_unregister_me = (void (*)(void* HANDLE, void* CB)) + dlsym(m_libKODI_inputstream, "INPUTSTREAM_unregister_me"); + if (INPUTSTREAM_unregister_me == nullptr) + { + fprintf(stderr, "Unable to assign function %s\n", dlerror()); + return false; + } + + INPUTSTREAM_free_demux_packet = (void (*)(void* HANDLE, void* CB, DemuxPacket* pPacket)) + dlsym(m_libKODI_inputstream, "INPUTSTREAM_free_demux_packet"); + if (INPUTSTREAM_free_demux_packet == NULL) + { + fprintf(stderr, "Unable to assign function %s\n", dlerror()); + return false; + } + + INPUTSTREAM_allocate_demux_packet = (DemuxPacket* (*)(void* HANDLE, void* CB, int iDataSize)) + dlsym(m_libKODI_inputstream, "INPUTSTREAM_allocate_demux_packet"); + if (INPUTSTREAM_allocate_demux_packet == NULL) + { + fprintf(stderr, "Unable to assign function %s\n", dlerror()); + return false; + } + + m_Callbacks = INPUTSTREAM_register_me(m_Handle); return m_Callbacks != nullptr; } @@ -93,7 +120,7 @@ public: */ DemuxPacket* AllocateDemuxPacket(int iDataSize) { - return m_Callbacks->AllocateDemuxPacket(m_Handle->addonData, iDataSize); + return INPUTSTREAM_allocate_demux_packet(m_Handle, m_Callbacks, iDataSize); } /*! @@ -102,10 +129,21 @@ public: */ void FreeDemuxPacket(DemuxPacket* pPacket) { - return m_Callbacks->FreeDemuxPacket(m_Handle->addonData, pPacket); + return INPUTSTREAM_free_demux_packet(m_Handle, m_Callbacks, pPacket); } +protected: + void* (*INPUTSTREAM_register_me)(void*); + void (*INPUTSTREAM_unregister_me)(void*, void*); + void (*INPUTSTREAM_free_demux_packet)(void*, void*, DemuxPacket*); + DemuxPacket* (*INPUTSTREAM_allocate_demux_packet)(void*, void*, int); + private: - AddonCB* m_Handle; - KodiAPI::V1::InputStream::CB_INPUTSTREAMLib* m_Callbacks; + void* m_libKODI_inputstream; + void* m_Handle; + void* m_Callbacks; + struct cb_array + { + const char* libPath; + }; }; 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; /* current addon API version */ #define KODI_ADDON_API_VERSION "1.0.0" -typedef void* (*KODIAddOnLib_RegisterMe)(void *addonData); -typedef void (*KODIAddOnLib_UnRegisterMe)(void *addonData, void *cbTable); -typedef void* (*KODIAudioEngineLib_RegisterMe)(void *addonData); -typedef void (*KODIAudioEngineLib_UnRegisterMe)(void *addonData, void *cbTable); -typedef void* (*KODIGUILib_RegisterMe)(void *addonData); -typedef void (*KODIGUILib_UnRegisterMe)(void *addonData, void *cbTable); -typedef void* (*KODIPVRLib_RegisterMe)(void *addonData); -typedef void (*KODIPVRLib_UnRegisterMe)(void *addonData, void *cbTable); -typedef void* (*KODIADSPLib_RegisterMe)(void *addonData); -typedef void (*KODIADSPLib_UnRegisterMe)(void *addonData, void *cbTable); -typedef void* (*KODICodecLib_RegisterMe)(void *addonData); -typedef void (*KODICodecLib_UnRegisterMe)(void *addonData, void *cbTable); -typedef void* (*KODIINPUTSTREAMLib_RegisterMe)(void *addonData); -typedef void (*KODIINPUTSTREAMLib_UnRegisterMe)(void *addonData, void *cbTable); -typedef void* (*KODIPeripheralLib_RegisterMe)(void *addonData); -typedef void (*KODIPeripheralLib_UnRegisterMe)(void *addonData, void *cbTable); -typedef void* (*KODIGameLib_RegisterMe)(void *addonData); -typedef void (*KODIGameLib_UnRegisterMe)(void *addonData, void *cbTable); - -typedef struct AddonCB -{ - const char* libBasePath; ///< Never, never change this!!! - void* addonData; - KODIAddOnLib_RegisterMe AddOnLib_RegisterMe; - KODIAddOnLib_UnRegisterMe AddOnLib_UnRegisterMe; - KODIAudioEngineLib_RegisterMe AudioEngineLib_RegisterMe; - KODIAudioEngineLib_UnRegisterMe AudioEngineLib_UnRegisterMe; - KODICodecLib_RegisterMe CodecLib_RegisterMe; - KODICodecLib_UnRegisterMe CodecLib_UnRegisterMe; - KODIGUILib_RegisterMe GUILib_RegisterMe; - KODIGUILib_UnRegisterMe GUILib_UnRegisterMe; - KODIPVRLib_RegisterMe PVRLib_RegisterMe; - KODIPVRLib_UnRegisterMe PVRLib_UnRegisterMe; - KODIADSPLib_RegisterMe ADSPLib_RegisterMe; - KODIADSPLib_UnRegisterMe ADSPLib_UnRegisterMe; - KODIINPUTSTREAMLib_RegisterMe INPUTSTREAMLib_RegisterMe; - KODIINPUTSTREAMLib_UnRegisterMe INPUTSTREAMLib_UnRegisterMe; - KODIPeripheralLib_RegisterMe PeripheralLib_RegisterMe; - KODIPeripheralLib_UnRegisterMe PeripheralLib_UnRegisterMe; - KODIGameLib_RegisterMe GameLib_RegisterMe; - KODIGameLib_UnRegisterMe GameLib_UnRegisterMe; -} AddonCB; - namespace ADDON { 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 @@ #include "xbmc_pvr_types.h" #include "libXBMC_addon.h" +#define PVR_HELPER_DLL_NAME XBMC_DLL_NAME("pvr") +#define PVR_HELPER_DLL XBMC_DLL("pvr") + #define DVD_TIME_BASE 1000000 //! @todo original definition is in DVDClock.h #define DVD_NOPTS_VALUE 0xFFF0000000000000 -namespace KodiAPI -{ -namespace V1 -{ -namespace PVR -{ - -typedef struct CB_PVRLib -{ - void (*TransferEpgEntry)(void *userData, const ADDON_HANDLE handle, const EPG_TAG *epgentry); - void (*TransferChannelEntry)(void *userData, const ADDON_HANDLE handle, const PVR_CHANNEL *chan); - void (*TransferTimerEntry)(void *userData, const ADDON_HANDLE handle, const PVR_TIMER *timer); - void (*TransferRecordingEntry)(void *userData, const ADDON_HANDLE handle, const PVR_RECORDING *recording); - void (*AddMenuHook)(void *addonData, PVR_MENUHOOK *hook); - void (*Recording)(void *addonData, const char *Name, const char *FileName, bool On); - void (*TriggerChannelUpdate)(void *addonData); - void (*TriggerTimerUpdate)(void *addonData); - void (*TriggerRecordingUpdate)(void *addonData); - void (*TriggerChannelGroupsUpdate)(void *addonData); - void (*TriggerEpgUpdate)(void *addonData, unsigned int iChannelUid); - - void (*TransferChannelGroup)(void *addonData, const ADDON_HANDLE handle, const PVR_CHANNEL_GROUP *group); - void (*TransferChannelGroupMember)(void *addonData, const ADDON_HANDLE handle, const PVR_CHANNEL_GROUP_MEMBER *member); - - void (*FreeDemuxPacket)(void *addonData, DemuxPacket* pPacket); - DemuxPacket* (*AllocateDemuxPacket)(void *addonData, int iDataSize); - - void (*ConnectionStateChange)(void* addonData, const char* strConnectionString, PVR_CONNECTION_STATE newState, const char *strMessage); - void (*EpgEventStateChange)(void* addonData, EPG_TAG* tag, unsigned int iUniqueChannelId, EPG_EVENT_STATE newState); -} CB_PVRLib; - -} /* namespace PVR */ -} /* namespace V1 */ -} /* namespace KodiAPI */ - class CHelper_libXBMC_pvr { public: CHelper_libXBMC_pvr(void) { - m_Handle = nullptr; - m_Callbacks = nullptr; + m_libXBMC_pvr = NULL; + m_Handle = NULL; } ~CHelper_libXBMC_pvr(void) { - if (m_Handle && m_Callbacks) + if (m_libXBMC_pvr) { - m_Handle->PVRLib_UnRegisterMe(m_Handle->addonData, m_Callbacks); + PVR_unregister_me(m_Handle, m_Callbacks); + dlclose(m_libXBMC_pvr); } } @@ -91,12 +60,98 @@ public: */ bool RegisterMe(void* handle) { - m_Handle = static_cast(handle); - if (m_Handle) - m_Callbacks = (KodiAPI::V1::PVR::CB_PVRLib*)m_Handle->PVRLib_RegisterMe(m_Handle->addonData); - if (!m_Callbacks) - fprintf(stderr, "libXBMC_pvr-ERROR: PVRLib_register_me can't get callback table from Kodi !!!\n"); - + m_Handle = handle; + + std::string libBasePath; + libBasePath = ((cb_array*)m_Handle)->libPath; + libBasePath += PVR_HELPER_DLL; + + m_libXBMC_pvr = dlopen(libBasePath.c_str(), RTLD_LAZY); + if (m_libXBMC_pvr == NULL) + { + fprintf(stderr, "Unable to load %s\n", dlerror()); + return false; + } + + PVR_register_me = (void* (*)(void *HANDLE)) + dlsym(m_libXBMC_pvr, "PVR_register_me"); + if (PVR_register_me == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } + + PVR_unregister_me = (void (*)(void* HANDLE, void* CB)) + dlsym(m_libXBMC_pvr, "PVR_unregister_me"); + if (PVR_unregister_me == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } + + PVR_transfer_epg_entry = (void (*)(void* HANDLE, void* CB, const ADDON_HANDLE handle, const EPG_TAG *epgentry)) + dlsym(m_libXBMC_pvr, "PVR_transfer_epg_entry"); + if (PVR_transfer_epg_entry == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } + + PVR_transfer_channel_entry = (void (*)(void* HANDLE, void* CB, const ADDON_HANDLE handle, const PVR_CHANNEL *chan)) + dlsym(m_libXBMC_pvr, "PVR_transfer_channel_entry"); + if (PVR_transfer_channel_entry == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } + + PVR_transfer_timer_entry = (void (*)(void* HANDLE, void* CB, const ADDON_HANDLE handle, const PVR_TIMER *timer)) + dlsym(m_libXBMC_pvr, "PVR_transfer_timer_entry"); + if (PVR_transfer_timer_entry == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } + + PVR_transfer_recording_entry = (void (*)(void* HANDLE, void* CB, const ADDON_HANDLE handle, const PVR_RECORDING *recording)) + dlsym(m_libXBMC_pvr, "PVR_transfer_recording_entry"); + if (PVR_transfer_recording_entry == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } + + PVR_add_menu_hook = (void (*)(void* HANDLE, void* CB, PVR_MENUHOOK *hook)) + dlsym(m_libXBMC_pvr, "PVR_add_menu_hook"); + if (PVR_add_menu_hook == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } + + PVR_recording = (void (*)(void* HANDLE, void* CB, const char *Name, const char *FileName, bool On)) + dlsym(m_libXBMC_pvr, "PVR_recording"); + if (PVR_recording == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } + + PVR_trigger_timer_update = (void (*)(void* HANDLE, void* CB)) + dlsym(m_libXBMC_pvr, "PVR_trigger_timer_update"); + if (PVR_trigger_timer_update == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } + + PVR_trigger_recording_update = (void (*)(void* HANDLE, void* CB)) + dlsym(m_libXBMC_pvr, "PVR_trigger_recording_update"); + if (PVR_trigger_recording_update == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } + + PVR_trigger_channel_update = (void (*)(void* HANDLE, void* CB)) + dlsym(m_libXBMC_pvr, "PVR_trigger_channel_update"); + if (PVR_trigger_channel_update == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } + + PVR_trigger_channel_groups_update = (void (*)(void* HANDLE, void* CB)) + dlsym(m_libXBMC_pvr, "PVR_trigger_channel_groups_update"); + if (PVR_trigger_channel_groups_update == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } + + PVR_trigger_epg_update = (void (*)(void* HANDLE, void* CB, unsigned int iChannelUid)) + dlsym(m_libXBMC_pvr, "PVR_trigger_epg_update"); + if (PVR_trigger_epg_update == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } + + PVR_transfer_channel_group = (void (*)(void* HANDLE, void* CB, const ADDON_HANDLE handle, const PVR_CHANNEL_GROUP *group)) + dlsym(m_libXBMC_pvr, "PVR_transfer_channel_group"); + if (PVR_transfer_channel_group == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } + + PVR_transfer_channel_group_member = (void (*)(void* HANDLE, void* CB, const ADDON_HANDLE handle, const PVR_CHANNEL_GROUP_MEMBER *member)) + dlsym(m_libXBMC_pvr, "PVR_transfer_channel_group_member"); + if (PVR_transfer_channel_group_member == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } + +#ifdef USE_DEMUX + PVR_free_demux_packet = (void (*)(void* HANDLE, void* CB, DemuxPacket* pPacket)) + dlsym(m_libXBMC_pvr, "PVR_free_demux_packet"); + if (PVR_free_demux_packet == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } + + PVR_allocate_demux_packet = (DemuxPacket* (*)(void* HANDLE, void* CB, int iDataSize)) + dlsym(m_libXBMC_pvr, "PVR_allocate_demux_packet"); + if (PVR_allocate_demux_packet == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } +#endif + + PVR_connection_state_change = (void (*)(void* HANDLE, void* CB, const char *strConnectionString, PVR_CONNECTION_STATE newState, const char *strMessage)) + dlsym(m_libXBMC_pvr, "PVR_connection_state_change"); + if (PVR_connection_state_change == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } + + PVR_epg_event_state_change = (void (*)(void* HANDLE, void* CB, EPG_TAG* tag, unsigned int iUniqueChannelId, EPG_EVENT_STATE newState)) + dlsym(m_libXBMC_pvr, "PVR_epg_event_state_change"); + if (PVR_epg_event_state_change == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } + + m_Callbacks = PVR_register_me(m_Handle); return m_Callbacks != NULL; } @@ -107,7 +162,7 @@ public: */ void TransferEpgEntry(const ADDON_HANDLE handle, const EPG_TAG* entry) { - return m_Callbacks->TransferEpgEntry(m_Handle->addonData, handle, entry); + return PVR_transfer_epg_entry(m_Handle, m_Callbacks, handle, entry); } /*! @@ -117,7 +172,7 @@ public: */ void TransferChannelEntry(const ADDON_HANDLE handle, const PVR_CHANNEL* entry) { - return m_Callbacks->TransferChannelEntry(m_Handle->addonData, handle, entry); + return PVR_transfer_channel_entry(m_Handle, m_Callbacks, handle, entry); } /*! @@ -127,7 +182,7 @@ public: */ void TransferTimerEntry(const ADDON_HANDLE handle, const PVR_TIMER* entry) { - return m_Callbacks->TransferTimerEntry(m_Handle->addonData, handle, entry); + return PVR_transfer_timer_entry(m_Handle, m_Callbacks, handle, entry); } /*! @@ -137,7 +192,7 @@ public: */ void TransferRecordingEntry(const ADDON_HANDLE handle, const PVR_RECORDING* entry) { - return m_Callbacks->TransferRecordingEntry(m_Handle->addonData, handle, entry); + return PVR_transfer_recording_entry(m_Handle, m_Callbacks, handle, entry); } /*! @@ -147,7 +202,7 @@ public: */ void TransferChannelGroup(const ADDON_HANDLE handle, const PVR_CHANNEL_GROUP* entry) { - return m_Callbacks->TransferChannelGroup(m_Handle->addonData, handle, entry); + return PVR_transfer_channel_group(m_Handle, m_Callbacks, handle, entry); } /*! @@ -157,7 +212,7 @@ public: */ void TransferChannelGroupMember(const ADDON_HANDLE handle, const PVR_CHANNEL_GROUP_MEMBER* entry) { - return m_Callbacks->TransferChannelGroupMember(m_Handle->addonData, handle, entry); + return PVR_transfer_channel_group_member(m_Handle, m_Callbacks, handle, entry); } /*! @@ -166,7 +221,7 @@ public: */ void AddMenuHook(PVR_MENUHOOK* hook) { - return m_Callbacks->AddMenuHook(m_Handle->addonData, hook); + return PVR_add_menu_hook(m_Handle, m_Callbacks, hook); } /*! @@ -177,7 +232,7 @@ public: */ void Recording(const char* strRecordingName, const char* strFileName, bool bOn) { - return m_Callbacks->Recording(m_Handle->addonData, strRecordingName, strFileName, bOn); + return PVR_recording(m_Handle, m_Callbacks, strRecordingName, strFileName, bOn); } /*! @@ -185,7 +240,7 @@ public: */ void TriggerTimerUpdate(void) { - return m_Callbacks->TriggerTimerUpdate(m_Handle->addonData); + return PVR_trigger_timer_update(m_Handle, m_Callbacks); } /*! @@ -193,7 +248,7 @@ public: */ void TriggerRecordingUpdate(void) { - return m_Callbacks->TriggerRecordingUpdate(m_Handle->addonData); + return PVR_trigger_recording_update(m_Handle, m_Callbacks); } /*! @@ -201,7 +256,7 @@ public: */ void TriggerChannelUpdate(void) { - return m_Callbacks->TriggerChannelUpdate(m_Handle->addonData); + return PVR_trigger_channel_update(m_Handle, m_Callbacks); } /*! @@ -210,7 +265,7 @@ public: */ void TriggerEpgUpdate(unsigned int iChannelUid) { - return m_Callbacks->TriggerEpgUpdate(m_Handle->addonData, iChannelUid); + return PVR_trigger_epg_update(m_Handle, m_Callbacks, iChannelUid); } /*! @@ -218,7 +273,7 @@ public: */ void TriggerChannelGroupsUpdate(void) { - return m_Callbacks->TriggerChannelGroupsUpdate(m_Handle->addonData); + return PVR_trigger_channel_groups_update(m_Handle, m_Callbacks); } #ifdef USE_DEMUX @@ -228,7 +283,7 @@ public: */ void FreeDemuxPacket(DemuxPacket* pPacket) { - return m_Callbacks->FreeDemuxPacket(m_Handle->addonData, pPacket); + return PVR_free_demux_packet(m_Handle, m_Callbacks, pPacket); } /*! @@ -238,7 +293,7 @@ public: */ DemuxPacket* AllocateDemuxPacket(int iDataSize) { - return m_Callbacks->AllocateDemuxPacket(m_Handle->addonData, iDataSize); + return PVR_allocate_demux_packet(m_Handle, m_Callbacks, iDataSize); } #endif @@ -251,7 +306,7 @@ public: */ void ConnectionStateChange(const char *strConnectionString, PVR_CONNECTION_STATE newState, const char *strMessage) { - return m_Callbacks->ConnectionStateChange(m_Handle->addonData, strConnectionString, newState, strMessage); + return PVR_connection_state_change(m_Handle, m_Callbacks, strConnectionString, newState, strMessage); } /*! @@ -263,10 +318,38 @@ public: */ void EpgEventStateChange(EPG_TAG *tag, unsigned int iUniqueChannelId, EPG_EVENT_STATE newState) { - return m_Callbacks->EpgEventStateChange(m_Handle->addonData, tag, iUniqueChannelId, newState); + return PVR_epg_event_state_change(m_Handle, m_Callbacks, tag, iUniqueChannelId, newState); } +protected: + void* (*PVR_register_me)(void*); + void (*PVR_unregister_me)(void*, void*); + void (*PVR_transfer_epg_entry)(void*, void*, const ADDON_HANDLE, const EPG_TAG*); + void (*PVR_transfer_channel_entry)(void*, void*, const ADDON_HANDLE, const PVR_CHANNEL*); + void (*PVR_transfer_timer_entry)(void*, void*, const ADDON_HANDLE, const PVR_TIMER*); + void (*PVR_transfer_recording_entry)(void*, void*, const ADDON_HANDLE, const PVR_RECORDING*); + void (*PVR_add_menu_hook)(void*, void*, PVR_MENUHOOK*); + void (*PVR_recording)(void*, void*, const char*, const char*, bool); + void (*PVR_trigger_channel_update)(void*, void*); + void (*PVR_trigger_channel_groups_update)(void*, void*); + void (*PVR_trigger_timer_update)(void*, void*); + void (*PVR_trigger_recording_update)(void* , void*); + void (*PVR_trigger_epg_update)(void*, void*, unsigned int); + void (*PVR_transfer_channel_group)(void*, void*, const ADDON_HANDLE, const PVR_CHANNEL_GROUP*); + void (*PVR_transfer_channel_group_member)(void*, void*, const ADDON_HANDLE, const PVR_CHANNEL_GROUP_MEMBER*); +#ifdef USE_DEMUX + void (*PVR_free_demux_packet)(void*, void*, DemuxPacket*); + DemuxPacket* (*PVR_allocate_demux_packet)(void*, void*, int); +#endif + void (*PVR_connection_state_change)(void*, void*, const char*, PVR_CONNECTION_STATE, const char*); + void (*PVR_epg_event_state_change)(void*, void*, EPG_TAG*, unsigned int, EPG_EVENT_STATE); + private: - AddonCB* m_Handle; - KodiAPI::V1::PVR::CB_PVRLib *m_Callbacks; + void* m_libXBMC_pvr; + void* m_Handle; + void* m_Callbacks; + struct cb_array + { + const char* libPath; + }; }; -- cgit v1.2.3