summaryrefslogtreecommitdiffstats
path: root/xbmc/addons/kodi-addon-dev-kit/include/kodi/libKODI_inputstream.h
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/addons/kodi-addon-dev-kit/include/kodi/libKODI_inputstream.h
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/addons/kodi-addon-dev-kit/include/kodi/libKODI_inputstream.h')
-rw-r--r--xbmc/addons/kodi-addon-dev-kit/include/kodi/libKODI_inputstream.h96
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
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};