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/include/kodi/libKODI_inputstream.h | |
| 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/include/kodi/libKODI_inputstream.h')
| -rw-r--r-- | xbmc/addons/kodi-addon-dev-kit/include/kodi/libKODI_inputstream.h | 96 |
1 files changed, 67 insertions, 29 deletions
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 | }; |
