summaryrefslogtreecommitdiffstats
path: root/xbmc/addons/kodi-addon-dev-kit/include/kodi/libKODI_inputstream.h
diff options
context:
space:
mode:
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, 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
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
42class CHelper_libKODI_inputstream 56class CHelper_libKODI_inputstream
43{ 57{
44public: 58public:
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
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
141private: 108private:
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};