3 * Copyright (C) 2012-2013 Team XBMC
6 * This Program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2, or (at your option)
11 * This Program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with XBMC; see the file COPYING. If not, see
18 * <http://www.gnu.org/licenses/>.
22 #include "cores/dvdplayer/DVDDemuxers/DVDDemuxUtils.h"
23 #include "addons/include/xbmc_pvr_types.h"
24 #include "addons/include/xbmc_codec_types.h"
25 #include "../../addons/library.xbmc.addon/libXBMC_addon.h"
26 #include "../../addons/library.xbmc.gui/libXBMC_gui.h"
28 typedef void (*AddOnLogCallback)(void *addonData, const ADDON::addon_log_t loglevel, const char *msg);
29 typedef void (*AddOnQueueNotification)(void *addonData, const ADDON::queue_msg_t type, const char *msg);
30 typedef bool (*AddOnWakeOnLan)(const char* mac);
31 typedef bool (*AddOnGetSetting)(void *addonData, const char *settingName, void *settingValue);
32 typedef char* (*AddOnUnknownToUTF8)(const char *sourceDest);
33 typedef char* (*AddOnGetLocalizedString)(const void* addonData, long dwCode);
34 typedef char* (*AddOnGetDVDMenuLanguage)(const void* addonData);
35 typedef void (*AddOnFreeString)(const void* addonData, char* str);
37 typedef void* (*AddOnOpenFile)(const void* addonData, const char* strFileName, unsigned int flags);
38 typedef void* (*AddOnOpenFileForWrite)(const void* addonData, const char* strFileName, bool bOverWrite);
39 typedef unsigned int (*AddOnReadFile)(const void* addonData, void* file, void* lpBuf, int64_t uiBufSize);
40 typedef bool (*AddOnReadFileString)(const void* addonData, void* file, char *szLine, int iLineLength);
41 typedef int (*AddOnWriteFile)(const void* addonData, void* file, const void* lpBuf, int64_t uiBufSize);
42 typedef void (*AddOnFlushFile)(const void* addonData, void* file);
43 typedef int64_t (*AddOnSeekFile)(const void* addonData, void* file, int64_t iFilePosition, int iWhence);
44 typedef int (*AddOnTruncateFile)(const void* addonData, void* file, int64_t iSize);
45 typedef int64_t (*AddOnGetFilePosition)(const void* addonData, void* file);
46 typedef int64_t (*AddOnGetFileLength)(const void* addonData, void* file);
47 typedef void (*AddOnCloseFile)(const void* addonData, void* file);
48 typedef int (*AddOnGetFileChunkSize)(const void* addonData, void* file);
49 typedef bool (*AddOnFileExists)(const void* addonData, const char *strFileName, bool bUseCache);
50 typedef int (*AddOnStatFile)(const void* addonData, const char *strFileName, struct __stat64* buffer);
51 typedef bool (*AddOnDeleteFile)(const void* addonData, const char *strFileName);
52 typedef bool (*AddOnCanOpenDirectory)(const void* addonData, const char* strURL);
53 typedef bool (*AddOnCreateDirectory)(const void* addonData, const char *strPath);
54 typedef bool (*AddOnDirectoryExists)(const void* addonData, const char *strPath);
55 typedef bool (*AddOnRemoveDirectory)(const void* addonData, const char *strPath);
57 typedef struct CB_AddOn
60 AddOnQueueNotification QueueNotification;
61 AddOnWakeOnLan WakeOnLan;
62 AddOnGetSetting GetSetting;
63 AddOnUnknownToUTF8 UnknownToUTF8;
64 AddOnGetLocalizedString GetLocalizedString;
65 AddOnGetDVDMenuLanguage GetDVDMenuLanguage;
66 AddOnFreeString FreeString;
68 AddOnOpenFile OpenFile;
69 AddOnOpenFileForWrite OpenFileForWrite;
70 AddOnReadFile ReadFile;
71 AddOnReadFileString ReadFileString;
72 AddOnWriteFile WriteFile;
73 AddOnFlushFile FlushFile;
74 AddOnSeekFile SeekFile;
75 AddOnTruncateFile TruncateFile;
76 AddOnGetFilePosition GetFilePosition;
77 AddOnGetFileLength GetFileLength;
78 AddOnCloseFile CloseFile;
79 AddOnGetFileChunkSize GetFileChunkSize;
80 AddOnFileExists FileExists;
81 AddOnStatFile StatFile;
82 AddOnDeleteFile DeleteFile;
83 AddOnCanOpenDirectory CanOpenDirectory;
84 AddOnCreateDirectory CreateDirectory;
85 AddOnDirectoryExists DirectoryExists;
86 AddOnRemoveDirectory RemoveDirectory;
89 typedef xbmc_codec_t (*CODECGetCodecByName)(const void* addonData, const char* strCodecName);
91 typedef struct CB_CODEC
93 CODECGetCodecByName GetCodecByName;
96 typedef void (*GUILock)();
97 typedef void (*GUIUnlock)();
98 typedef int (*GUIGetScreenHeight)();
99 typedef int (*GUIGetScreenWidth)();
100 typedef int (*GUIGetVideoResolution)();
101 typedef GUIHANDLE (*GUIWindow_New)(void *addonData, const char *xmlFilename, const char *defaultSkin, bool forceFallback, bool asDialog);
102 typedef void (*GUIWindow_Delete)(void *addonData, GUIHANDLE handle);
103 typedef void (*GUIWindow_SetCallbacks)(void *addonData, GUIHANDLE handle, GUIHANDLE clienthandle, bool (*)(GUIHANDLE handle), bool (*)(GUIHANDLE handle, int), bool (*)(GUIHANDLE handle, int), bool (*)(GUIHANDLE handle, int));
104 typedef bool (*GUIWindow_Show)(void *addonData, GUIHANDLE handle);
105 typedef bool (*GUIWindow_Close)(void *addonData, GUIHANDLE handle);
106 typedef bool (*GUIWindow_DoModal)(void *addonData, GUIHANDLE handle);
107 typedef bool (*GUIWindow_SetFocusId)(void *addonData, GUIHANDLE handle, int iControlId);
108 typedef int (*GUIWindow_GetFocusId)(void *addonData, GUIHANDLE handle);
109 typedef bool (*GUIWindow_SetCoordinateResolution)(void *addonData, GUIHANDLE handle, int res);
110 typedef void (*GUIWindow_SetProperty)(void *addonData, GUIHANDLE handle, const char *key, const char *value);
111 typedef void (*GUIWindow_SetPropertyInt)(void *addonData, GUIHANDLE handle, const char *key, int value);
112 typedef void (*GUIWindow_SetPropertyBool)(void *addonData, GUIHANDLE handle, const char *key, bool value);
113 typedef void (*GUIWindow_SetPropertyDouble)(void *addonData, GUIHANDLE handle, const char *key, double value);
114 typedef const char* (*GUIWindow_GetProperty)(void *addonData, GUIHANDLE handle, const char *key);
115 typedef int (*GUIWindow_GetPropertyInt)(void *addonData, GUIHANDLE handle, const char *key);
116 typedef bool (*GUIWindow_GetPropertyBool)(void *addonData, GUIHANDLE handle, const char *key);
117 typedef double (*GUIWindow_GetPropertyDouble)(void *addonData, GUIHANDLE handle, const char *key);
118 typedef void (*GUIWindow_ClearProperties)(void *addonData, GUIHANDLE handle);
119 typedef int (*GUIWindow_GetListSize)(void *addonData, GUIHANDLE handle);
120 typedef void (*GUIWindow_ClearList)(void *addonData, GUIHANDLE handle);
121 typedef GUIHANDLE (*GUIWindow_AddItem)(void *addonData, GUIHANDLE handle, GUIHANDLE item, int itemPosition);
122 typedef GUIHANDLE (*GUIWindow_AddStringItem)(void *addonData, GUIHANDLE handle, const char *itemName, int itemPosition);
123 typedef void (*GUIWindow_RemoveItem)(void *addonData, GUIHANDLE handle, int itemPosition);
124 typedef GUIHANDLE (*GUIWindow_GetListItem)(void *addonData, GUIHANDLE handle, int listPos);
125 typedef void (*GUIWindow_SetCurrentListPosition)(void *addonData, GUIHANDLE handle, int listPos);
126 typedef int (*GUIWindow_GetCurrentListPosition)(void *addonData, GUIHANDLE handle);
127 typedef GUIHANDLE (*GUIWindow_GetControl_Spin)(void *addonData, GUIHANDLE handle, int controlId);
128 typedef GUIHANDLE (*GUIWindow_GetControl_Button)(void *addonData, GUIHANDLE handle, int controlId);
129 typedef GUIHANDLE (*GUIWindow_GetControl_RadioButton)(void *addonData, GUIHANDLE handle, int controlId);
130 typedef GUIHANDLE (*GUIWindow_GetControl_Edit)(void *addonData, GUIHANDLE handle, int controlId);
131 typedef GUIHANDLE (*GUIWindow_GetControl_Progress)(void *addonData, GUIHANDLE handle, int controlId);
132 typedef GUIHANDLE (*GUIWindow_GetControl_RenderAddon)(void *addonData, GUIHANDLE handle, int controlId);
133 typedef void (*GUIWindow_SetControlLabel)(void *addonData, GUIHANDLE handle, int controlId, const char *label);
134 typedef void (*GUIWindow_MarkDirtyRegion)(void *addonData, GUIHANDLE handle);
135 typedef void (*GUIControl_Spin_SetVisible)(void *addonData, GUIHANDLE spinhandle, bool yesNo);
136 typedef void (*GUIControl_Spin_SetText)(void *addonData, GUIHANDLE spinhandle, const char *label);
137 typedef void (*GUIControl_Spin_Clear)(void *addonData, GUIHANDLE spinhandle);
138 typedef void (*GUIControl_Spin_AddLabel)(void *addonData, GUIHANDLE spinhandle, const char *label, int iValue);
139 typedef int (*GUIControl_Spin_GetValue)(void *addonData, GUIHANDLE spinhandle);
140 typedef void (*GUIControl_Spin_SetValue)(void *addonData, GUIHANDLE spinhandle, int iValue);
141 typedef void (*GUIControl_RadioButton_SetVisible)(void *addonData, GUIHANDLE handle, bool yesNo);
142 typedef void (*GUIControl_RadioButton_SetText)(void *addonData, GUIHANDLE handle, const char *label);
143 typedef void (*GUIControl_RadioButton_SetSelected)(void *addonData, GUIHANDLE handle, bool yesNo);
144 typedef bool (*GUIControl_RadioButton_IsSelected)(void *addonData, GUIHANDLE handle);
145 typedef void (*GUIControl_Progress_SetPercentage)(void *addonData, GUIHANDLE handle, float fPercent);
146 typedef float (*GUIControl_Progress_GetPercentage)(void *addonData, GUIHANDLE handle);
147 typedef void (*GUIControl_Progress_SetInfo)(void *addonData, GUIHANDLE handle, int iInfo);
148 typedef int (*GUIControl_Progress_GetInfo)(void *addonData, GUIHANDLE handle);
149 typedef const char* (*GUIControl_Progress_GetDescription)(void *addonData, GUIHANDLE handle);
150 typedef GUIHANDLE (*GUIListItem_Create)(void *addonData, const char *label, const char *label2, const char *iconImage, const char *thumbnailImage, const char *path);
151 typedef const char* (*GUIListItem_GetLabel)(void *addonData, GUIHANDLE handle);
152 typedef void (*GUIListItem_SetLabel)(void *addonData, GUIHANDLE handle, const char *label);
153 typedef const char* (*GUIListItem_GetLabel2)(void *addonData, GUIHANDLE handle);
154 typedef void (*GUIListItem_SetLabel2)(void *addonData, GUIHANDLE handle, const char *label);
155 typedef void (*GUIListItem_SetIconImage)(void *addonData, GUIHANDLE handle, const char *image);
156 typedef void (*GUIListItem_SetThumbnailImage)(void *addonData, GUIHANDLE handle, const char *image);
157 typedef void (*GUIListItem_SetInfo)(void *addonData, GUIHANDLE handle, const char *info);
158 typedef void (*GUIListItem_SetProperty)(void *addonData, GUIHANDLE handle, const char *key, const char *value);
159 typedef const char* (*GUIListItem_GetProperty)(void *addonData, GUIHANDLE handle, const char *key);
160 typedef void (*GUIListItem_SetPath)(void *addonData, GUIHANDLE handle, const char *path);
161 typedef void (*GUIRenderAddon_SetCallbacks)(void *addonData, GUIHANDLE handle, GUIHANDLE clienthandle, bool (*createCB)(GUIHANDLE,int,int,int,int,void*), void (*renderCB)(GUIHANDLE), void (*stopCB)(GUIHANDLE), bool (*dirtyCB)(GUIHANDLE));
162 typedef void (*GUIRenderAddon_Delete)(void *addonData, GUIHANDLE handle);
163 typedef void (*GUIRenderAddon_MarkDirty)(void *addonData, GUIHANDLE handle);
165 typedef struct CB_GUILib
169 GUIGetScreenHeight GetScreenHeight;
170 GUIGetScreenWidth GetScreenWidth;
171 GUIGetVideoResolution GetVideoResolution;
172 GUIWindow_New Window_New;
173 GUIWindow_Delete Window_Delete;
174 GUIWindow_SetCallbacks Window_SetCallbacks;
175 GUIWindow_Show Window_Show;
176 GUIWindow_Close Window_Close;
177 GUIWindow_DoModal Window_DoModal;
178 GUIWindow_SetFocusId Window_SetFocusId;
179 GUIWindow_GetFocusId Window_GetFocusId;
180 GUIWindow_SetCoordinateResolution Window_SetCoordinateResolution;
181 GUIWindow_SetProperty Window_SetProperty;
182 GUIWindow_SetPropertyInt Window_SetPropertyInt;
183 GUIWindow_SetPropertyBool Window_SetPropertyBool;
184 GUIWindow_SetPropertyDouble Window_SetPropertyDouble;
185 GUIWindow_GetProperty Window_GetProperty;
186 GUIWindow_GetPropertyInt Window_GetPropertyInt;
187 GUIWindow_GetPropertyBool Window_GetPropertyBool;
188 GUIWindow_GetPropertyDouble Window_GetPropertyDouble;
189 GUIWindow_ClearProperties Window_ClearProperties;
190 GUIWindow_GetListSize Window_GetListSize;
191 GUIWindow_ClearList Window_ClearList;
192 GUIWindow_AddItem Window_AddItem;
193 GUIWindow_AddStringItem Window_AddStringItem;
194 GUIWindow_RemoveItem Window_RemoveItem;
195 GUIWindow_GetListItem Window_GetListItem;
196 GUIWindow_SetCurrentListPosition Window_SetCurrentListPosition;
197 GUIWindow_GetCurrentListPosition Window_GetCurrentListPosition;
198 GUIWindow_GetControl_Spin Window_GetControl_Spin;
199 GUIWindow_GetControl_Button Window_GetControl_Button;
200 GUIWindow_GetControl_RadioButton Window_GetControl_RadioButton;
201 GUIWindow_GetControl_Edit Window_GetControl_Edit;
202 GUIWindow_GetControl_Progress Window_GetControl_Progress;
203 GUIWindow_GetControl_RenderAddon Window_GetControl_RenderAddon;
204 GUIWindow_SetControlLabel Window_SetControlLabel;
205 GUIWindow_MarkDirtyRegion Window_MarkDirtyRegion;
206 GUIControl_Spin_SetVisible Control_Spin_SetVisible;
207 GUIControl_Spin_SetText Control_Spin_SetText;
208 GUIControl_Spin_Clear Control_Spin_Clear;
209 GUIControl_Spin_AddLabel Control_Spin_AddLabel;
210 GUIControl_Spin_GetValue Control_Spin_GetValue;
211 GUIControl_Spin_SetValue Control_Spin_SetValue;
212 GUIControl_RadioButton_SetVisible Control_RadioButton_SetVisible;
213 GUIControl_RadioButton_SetText Control_RadioButton_SetText;
214 GUIControl_RadioButton_SetSelected Control_RadioButton_SetSelected;
215 GUIControl_RadioButton_IsSelected Control_RadioButton_IsSelected;
216 GUIControl_Progress_SetPercentage Control_Progress_SetPercentage;
217 GUIControl_Progress_GetPercentage Control_Progress_GetPercentage;
218 GUIControl_Progress_SetInfo Control_Progress_SetInfo;
219 GUIControl_Progress_GetInfo Control_Progress_GetInfo;
220 GUIControl_Progress_GetDescription Control_Progress_GetDescription;
221 GUIListItem_Create ListItem_Create;
222 GUIListItem_GetLabel ListItem_GetLabel;
223 GUIListItem_SetLabel ListItem_SetLabel;
224 GUIListItem_GetLabel2 ListItem_GetLabel2;
225 GUIListItem_SetLabel2 ListItem_SetLabel2;
226 GUIListItem_SetIconImage ListItem_SetIconImage;
227 GUIListItem_SetThumbnailImage ListItem_SetThumbnailImage;
228 GUIListItem_SetInfo ListItem_SetInfo;
229 GUIListItem_SetProperty ListItem_SetProperty;
230 GUIListItem_GetProperty ListItem_GetProperty;
231 GUIListItem_SetPath ListItem_SetPath;
232 GUIRenderAddon_SetCallbacks RenderAddon_SetCallbacks;
233 GUIRenderAddon_Delete RenderAddon_Delete;
237 typedef void (*PVRTransferEpgEntry)(void *userData, const ADDON_HANDLE handle, const EPG_TAG *epgentry);
238 typedef void (*PVRTransferChannelEntry)(void *userData, const ADDON_HANDLE handle, const PVR_CHANNEL *chan);
239 typedef void (*PVRTransferTimerEntry)(void *userData, const ADDON_HANDLE handle, const PVR_TIMER *timer);
240 typedef void (*PVRTransferRecordingEntry)(void *userData, const ADDON_HANDLE handle, const PVR_RECORDING *recording);
241 typedef void (*PVRAddMenuHook)(void *addonData, PVR_MENUHOOK *hook);
242 typedef void (*PVRRecording)(void *addonData, const char *Name, const char *FileName, bool On);
243 typedef void (*PVRTriggerChannelUpdate)(void *addonData);
244 typedef void (*PVRTriggerTimerUpdate)(void *addonData);
245 typedef void (*PVRTriggerRecordingUpdate)(void *addonData);
246 typedef void (*PVRTriggerChannelGroupsUpdate)(void *addonData);
247 typedef void (*PVRTriggerEpgUpdate)(void *addonData, unsigned int iChannelUid);
249 typedef void (*PVRTransferChannelGroup)(void *addonData, const ADDON_HANDLE handle, const PVR_CHANNEL_GROUP *group);
250 typedef void (*PVRTransferChannelGroupMember)(void *addonData, const ADDON_HANDLE handle, const PVR_CHANNEL_GROUP_MEMBER *member);
252 typedef void (*PVRFreeDemuxPacket)(void *addonData, DemuxPacket* pPacket);
253 typedef DemuxPacket* (*PVRAllocateDemuxPacket)(void *addonData, int iDataSize);
255 typedef struct CB_PVRLib
257 PVRTransferEpgEntry TransferEpgEntry;
258 PVRTransferChannelEntry TransferChannelEntry;
259 PVRTransferTimerEntry TransferTimerEntry;
260 PVRTransferRecordingEntry TransferRecordingEntry;
261 PVRAddMenuHook AddMenuHook;
262 PVRRecording Recording;
263 PVRTriggerChannelUpdate TriggerChannelUpdate;
264 PVRTriggerTimerUpdate TriggerTimerUpdate;
265 PVRTriggerRecordingUpdate TriggerRecordingUpdate;
266 PVRTriggerChannelGroupsUpdate TriggerChannelGroupsUpdate;
267 PVRTriggerEpgUpdate TriggerEpgUpdate;
268 PVRFreeDemuxPacket FreeDemuxPacket;
269 PVRAllocateDemuxPacket AllocateDemuxPacket;
270 PVRTransferChannelGroup TransferChannelGroup;
271 PVRTransferChannelGroupMember TransferChannelGroupMember;
276 typedef CB_AddOnLib* (*XBMCAddOnLib_RegisterMe)(void *addonData);
277 typedef void (*XBMCAddOnLib_UnRegisterMe)(void *addonData, CB_AddOnLib *cbTable);
278 typedef CB_CODECLib* (*XBMCCODECLib_RegisterMe)(void *addonData);
279 typedef void (*XBMCCODECLib_UnRegisterMe)(void *addonData, CB_CODECLib *cbTable);
280 typedef CB_GUILib* (*XBMCGUILib_RegisterMe)(void *addonData);
281 typedef void (*XBMCGUILib_UnRegisterMe)(void *addonData, CB_GUILib *cbTable);
282 typedef CB_PVRLib* (*XBMCPVRLib_RegisterMe)(void *addonData);
283 typedef void (*XBMCPVRLib_UnRegisterMe)(void *addonData, CB_PVRLib *cbTable);
285 typedef struct AddonCB
287 const char *libBasePath; ///> Never, never change this!!!
289 XBMCAddOnLib_RegisterMe AddOnLib_RegisterMe;
290 XBMCAddOnLib_UnRegisterMe AddOnLib_UnRegisterMe;
291 XBMCCODECLib_RegisterMe CODECLib_RegisterMe;
292 XBMCCODECLib_UnRegisterMe CODECLib_UnRegisterMe;
293 XBMCGUILib_RegisterMe GUILib_RegisterMe;
294 XBMCGUILib_UnRegisterMe GUILib_UnRegisterMe;
295 XBMCPVRLib_RegisterMe PVRLib_RegisterMe;
296 XBMCPVRLib_UnRegisterMe PVRLib_UnRegisterMe;
304 class CAddonCallbacksAddon;
305 class CAddonCallbacksCodec;
306 class CAddonCallbacksGUI;
307 class CAddonCallbacksPVR;
309 class CAddonCallbacks
312 CAddonCallbacks(CAddon* addon);
314 AddonCB *GetCallbacks() { return m_callbacks; }
316 static CB_AddOnLib* AddOnLib_RegisterMe(void *addonData);
317 static void AddOnLib_UnRegisterMe(void *addonData, CB_AddOnLib *cbTable);
318 static CB_CODECLib* CODECLib_RegisterMe(void *addonData);
319 static void CODECLib_UnRegisterMe(void *addonData, CB_CODECLib *cbTable);
320 static CB_GUILib* GUILib_RegisterMe(void *addonData);
321 static void GUILib_UnRegisterMe(void *addonData, CB_GUILib *cbTable);
322 static CB_PVRLib* PVRLib_RegisterMe(void *addonData);
323 static void PVRLib_UnRegisterMe(void *addonData, CB_PVRLib *cbTable);
325 CAddonCallbacksAddon *GetHelperAddon() { return m_helperAddon; }
326 CAddonCallbacksCodec *GetHelperCodec() { return m_helperCODEC; }
327 CAddonCallbacksGUI *GetHelperGUI() { return m_helperGUI; }
328 CAddonCallbacksPVR *GetHelperPVR() { return m_helperPVR; }
331 AddonCB *m_callbacks;
333 CAddonCallbacksAddon *m_helperAddon;
334 CAddonCallbacksCodec *m_helperCODEC;
335 CAddonCallbacksGUI *m_helperGUI;
336 CAddonCallbacksPVR *m_helperPVR;
339 }; /* namespace ADDON */