diff options
| author | manuel <manuel@mausz.at> | 2016-12-13 13:45:04 +0100 |
|---|---|---|
| committer | manuel <manuel@mausz.at> | 2016-12-13 13:45:04 +0100 |
| commit | 1e5bdca69f7676b2dbcd64f0f44f31b12b337b7c (patch) | |
| tree | de36b55c5b49c0b266ebf8a5276815d2ac1a8ae5 /xbmc/addons/kodi-addon-dev-kit/include/kodi/libKODI_inputstream.h | |
| parent | 8cdf8dec703d882b46ca50a769fabb95ffc48e2c (diff) | |
| download | kodi-pvr-build-1e5bdca69f7676b2dbcd64f0f44f31b12b337b7c.tar.gz kodi-pvr-build-1e5bdca69f7676b2dbcd64f0f44f31b12b337b7c.tar.bz2 kodi-pvr-build-1e5bdca69f7676b2dbcd64f0f44f31b12b337b7c.zip | |
sync with upstream
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, 29 insertions, 67 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 a6e83cb..c55a42b 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,27 +33,40 @@ | |||
| 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 | |||
| 39 | /* current input stream API version */ | 36 | /* current input stream API version */ |
| 40 | #define KODI_INPUTSTREAM_API_VERSION "1.0.0" | 37 | #define KODI_INPUTSTREAM_API_VERSION "1.0.0" |
| 41 | 38 | ||
| 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 | |||
| 42 | class CHelper_libKODI_inputstream | 56 | class CHelper_libKODI_inputstream |
| 43 | { | 57 | { |
| 44 | public: | 58 | public: |
| 45 | CHelper_libKODI_inputstream(void) | 59 | CHelper_libKODI_inputstream(void) |
| 46 | { | 60 | { |
| 47 | m_libKODI_inputstream = nullptr; | ||
| 48 | m_Handle = nullptr; | 61 | m_Handle = nullptr; |
| 62 | m_Callbacks = nullptr; | ||
| 49 | } | 63 | } |
| 50 | 64 | ||
| 51 | ~CHelper_libKODI_inputstream(void) | 65 | ~CHelper_libKODI_inputstream(void) |
| 52 | { | 66 | { |
| 53 | if (m_libKODI_inputstream) | 67 | if (m_Handle && m_Callbacks) |
| 54 | { | 68 | { |
| 55 | INPUTSTREAM_unregister_me(m_Handle, m_Callbacks); | 69 | m_Handle->INPUTSTREAMLib_UnRegisterMe(m_Handle->addonData, m_Callbacks); |
| 56 | dlclose(m_libKODI_inputstream); | ||
| 57 | } | 70 | } |
| 58 | } | 71 | } |
| 59 | 72 | ||
| @@ -64,52 +77,12 @@ public: | |||
| 64 | */ | 77 | */ |
| 65 | bool RegisterMe(void* handle) | 78 | bool RegisterMe(void* handle) |
| 66 | { | 79 | { |
| 67 | m_Handle = handle; | 80 | m_Handle = static_cast<AddonCB*>(handle); |
| 68 | 81 | if (m_Handle) | |
| 69 | std::string libBasePath; | 82 | m_Callbacks = (KodiAPI::V1::InputStream::CB_INPUTSTREAMLib*)m_Handle->INPUTSTREAMLib_RegisterMe(m_Handle->addonData); |
| 70 | libBasePath = ((cb_array*)m_Handle)->libPath; | 83 | if (!m_Callbacks) |
| 71 | libBasePath += INPUTSTREAM_HELPER_DLL; | 84 | fprintf(stderr, "libKODI_inputstream-ERROR: InputStream_RegisterMe can't get callback table from Kodi !!!\n"); |
| 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 | } | ||
| 87 | 85 | ||
| 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); | ||
| 113 | return m_Callbacks != nullptr; | 86 | return m_Callbacks != nullptr; |
| 114 | } | 87 | } |
| 115 | 88 | ||
| @@ -120,7 +93,7 @@ public: | |||
| 120 | */ | 93 | */ |
| 121 | DemuxPacket* AllocateDemuxPacket(int iDataSize) | 94 | DemuxPacket* AllocateDemuxPacket(int iDataSize) |
| 122 | { | 95 | { |
| 123 | return INPUTSTREAM_allocate_demux_packet(m_Handle, m_Callbacks, iDataSize); | 96 | return m_Callbacks->AllocateDemuxPacket(m_Handle->addonData, iDataSize); |
| 124 | } | 97 | } |
| 125 | 98 | ||
| 126 | /*! | 99 | /*! |
| @@ -129,21 +102,10 @@ public: | |||
| 129 | */ | 102 | */ |
| 130 | void FreeDemuxPacket(DemuxPacket* pPacket) | 103 | void FreeDemuxPacket(DemuxPacket* pPacket) |
| 131 | { | 104 | { |
| 132 | return INPUTSTREAM_free_demux_packet(m_Handle, m_Callbacks, pPacket); | 105 | return m_Callbacks->FreeDemuxPacket(m_Handle->addonData, pPacket); |
| 133 | } | 106 | } |
| 134 | 107 | ||
| 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 | |||
| 141 | private: | 108 | private: |
| 142 | void* m_libKODI_inputstream; | 109 | AddonCB* m_Handle; |
| 143 | void* m_Handle; | 110 | KodiAPI::V1::InputStream::CB_INPUTSTREAMLib* m_Callbacks; |
| 144 | void* m_Callbacks; | ||
| 145 | struct cb_array | ||
| 146 | { | ||
| 147 | const char* libPath; | ||
| 148 | }; | ||
| 149 | }; | 111 | }; |
