summaryrefslogtreecommitdiffstats
path: root/xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_pvr_dll.h
diff options
context:
space:
mode:
Diffstat (limited to 'xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_pvr_dll.h')
-rw-r--r--xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_pvr_dll.h784
1 files changed, 0 insertions, 784 deletions
diff --git a/xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_pvr_dll.h b/xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_pvr_dll.h
deleted file mode 100644
index 26e9099..0000000
--- a/xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_pvr_dll.h
+++ /dev/null
@@ -1,784 +0,0 @@
1/*
2 * Copyright (C) 2005-2018 Team Kodi
3 * This file is part of Kodi - https://kodi.tv
4 *
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 * See LICENSES/README.md for more information.
7 */
8
9#pragma once
10
11#include "xbmc_addon_dll.h"
12#include "xbmc_pvr_types.h"
13
14/*!
15 * Functions that the PVR client add-on must implement, but some can be empty.
16 *
17 * The 'remarks' field indicates which methods should be implemented, and which ones are optional.
18 */
19
20extern "C"
21{
22 /*! @name PVR add-on methods */
23 //@{
24 /*!
25 * Get the list of features that this add-on provides.
26 * Called by Kodi to query the add-on's capabilities.
27 * Used to check which options should be presented in the UI, which methods to call, etc.
28 * All capabilities that the add-on supports should be set to true.
29 * @param pCapabilities The add-on's capabilities.
30 * @return PVR_ERROR_NO_ERROR if the properties were fetched successfully.
31 * @remarks Valid implementation required.
32 */
33 PVR_ERROR GetAddonCapabilities(PVR_ADDON_CAPABILITIES *pCapabilities);
34
35 /*!
36 * @return The name reported by the backend that will be displayed in the UI.
37 * @remarks Valid implementation required.
38 */
39 const char* GetBackendName(void);
40
41 /*!
42 * @return The version string reported by the backend that will be displayed in the UI.
43 * @remarks Valid implementation required.
44 */
45 const char* GetBackendVersion(void);
46
47 /*!
48 * @return The connection string reported by the backend that will be displayed in the UI.
49 * @remarks Valid implementation required.
50 */
51 const char* GetConnectionString(void);
52
53 /*!
54 * Get the disk space reported by the backend (if supported).
55 * @param iTotal The total disk space in bytes.
56 * @param iUsed The used disk space in bytes.
57 * @return PVR_ERROR_NO_ERROR if the drive space has been fetched successfully.
58 * @remarks Optional. Return PVR_ERROR_NOT_IMPLEMENTED if this add-on won't provide this function.
59 */
60 PVR_ERROR GetDriveSpace(long long* iTotal, long long* iUsed);
61
62 /*!
63 * Call one of the menu hooks (if supported).
64 * Supported PVR_MENUHOOK instances have to be added in ADDON_Create(), by calling AddMenuHook() on the callback.
65 * @param menuhook The hook to call.
66 * @param item The selected item for which the hook was called.
67 * @return PVR_ERROR_NO_ERROR if the hook was called successfully.
68 * @remarks Optional. Return PVR_ERROR_NOT_IMPLEMENTED if this add-on won't provide this function.
69 */
70 PVR_ERROR CallMenuHook(const PVR_MENUHOOK& menuhook, const PVR_MENUHOOK_DATA &item);
71 //@}
72
73 /*! @name PVR EPG methods
74 * @remarks Only used by Kodi if bSupportsEPG is set to true.
75 */
76 //@{
77 /*!
78 * Request the EPG for a channel from the backend.
79 * EPG entries are added to Kodi by calling TransferEpgEntry() on the callback.
80 * @param handle Handle to pass to the callback method.
81 * @param iChannelUid The UID of the channel to get the EPG table for.
82 * @param iStart Get events after this time (UTC).
83 * @param iEnd Get events before this time (UTC).
84 * @return PVR_ERROR_NO_ERROR if the table has been fetched successfully.
85 * @remarks Required if bSupportsEPG is set to true.
86 * Return PVR_ERROR_NOT_IMPLEMENTED if this add-on won't provide this function.
87 */
88 PVR_ERROR GetEPGForChannel(ADDON_HANDLE handle, int iChannelUid, time_t iStart, time_t iEnd);
89
90 /*
91 * Check if the given EPG tag can be recorded.
92 * @param tag the epg tag to check.
93 * @param [out] bIsRecordable Set to true if the tag can be recorded.
94 * @return PVR_ERROR_NO_ERROR if bIsRecordable has been set successfully.
95 * @remarks Optional, return PVR_ERROR_NOT_IMPLEMENTED to let Kodi decide.
96 */
97 PVR_ERROR IsEPGTagRecordable(const EPG_TAG* tag, bool* bIsRecordable);
98
99 /*
100 * Check if the given EPG tag can be played.
101 * @param tag the epg tag to check.
102 * @param [out] bIsPlayable Set to true if the tag can be played.
103 * @return PVR_ERROR_NO_ERROR if bIsPlayable has been set successfully.
104 * @remarks Required if add-on supports playing epg tags.
105 * Return PVR_ERROR_NOT_IMPLEMENTED if this add-on won't provide this function.
106 */
107 PVR_ERROR IsEPGTagPlayable(const EPG_TAG* tag, bool* bIsPlayable);
108
109 /*!
110 * Retrieve the edit decision list (EDL) of an EPG tag on the backend.
111 * @param epgTag The EPG tag.
112 * @param edl out: The function has to write the EDL into this array.
113 * @param size in: The maximum size of the EDL, out: the actual size of the EDL.
114 * @return PVR_ERROR_NO_ERROR if the EDL was successfully read or no EDL exists.
115 * @remarks Required if bSupportsEpgEdl is set to true.
116 * Return PVR_ERROR_NOT_IMPLEMENTED if this add-on won't provide this function.
117 */
118 PVR_ERROR GetEPGTagEdl(const EPG_TAG* epgTag, PVR_EDL_ENTRY edl[], int *size);
119
120 /*!
121 * Get the stream properties for an epg tag from the backend.
122 * @param[in] tag The epg tag to get the stream properties for.
123 * @param[inout] properties in: an array for the properties to return, out: the properties required to play the stream.
124 * @param[inout] iPropertiesCount in: the size of the properties array, out: the number of properties returned.
125 * @return PVR_ERROR_NO_ERROR if the stream is available.
126 * @remarks Required if add-on supports playing epg tags.
127 * In this case your implementation must fill the property PVR_STREAM_PROPERTY_STREAMURL with the URL Kodi should resolve to playback the epg tag.
128 * Return PVR_ERROR_NOT_IMPLEMENTED if this add-on won't provide this function.
129 */
130 PVR_ERROR GetEPGTagStreamProperties(const EPG_TAG* tag, PVR_NAMED_VALUE* properties, unsigned int* iPropertiesCount);
131
132 //@}
133
134 /*! @name PVR channel group methods
135 * @remarks Only used by Kodi if bSupportsChannelGroups is set to true.
136 * If a group or one of the group members changes after the initial import, or if a new one was added, then the add-on
137 * should call TriggerChannelGroupsUpdate()
138 */
139 //@{
140 /*!
141 * Get the total amount of channel groups on the backend if it supports channel groups.
142 * @return The amount of channels, or -1 on error.
143 * @remarks Required if bSupportsChannelGroups is set to true.
144 * Return -1 if this add-on won't provide this function.
145 */
146 int GetChannelGroupsAmount(void);
147
148 /*!
149 * Request the list of all channel groups from the backend if it supports channel groups.
150 * Channel group entries are added to Kodi by calling TransferChannelGroup() on the callback.
151 * @param handle Handle to pass to the callback method.
152 * @param bRadio True to get the radio channel groups, false to get the TV channel groups.
153 * @return PVR_ERROR_NO_ERROR if the list has been fetched successfully.
154 * @remarks Required if bSupportsChannelGroups is set to true.
155 * Return PVR_ERROR_NOT_IMPLEMENTED if this add-on won't provide this function.
156 */
157 PVR_ERROR GetChannelGroups(ADDON_HANDLE handle, bool bRadio);
158
159 /*!
160 * Request the list of all group members of a group from the backend if it supports channel groups.
161 * Member entries are added to Kodi by calling TransferChannelGroupMember() on the callback.
162 * @param handle Handle to pass to the callback method.
163 * @param group The group to get the members for.
164 * @return PVR_ERROR_NO_ERROR if the list has been fetched successfully.
165 * @remarks Required if bSupportsChannelGroups is set to true.
166 * Return PVR_ERROR_NOT_IMPLEMENTED if this add-on won't provide this function.
167 */
168 PVR_ERROR GetChannelGroupMembers(ADDON_HANDLE handle, const PVR_CHANNEL_GROUP& group);
169 //@}
170
171 /** @name PVR channel methods
172 * @remarks Either bSupportsTV or bSupportsRadio is required to be set to true.
173 * If a channel changes after the initial import, or if a new one was added, then the add-on
174 * should call TriggerChannelUpdate()
175 */
176 //@{
177 /*!
178 * Show the channel scan dialog if this backend supports it.
179 * @return PVR_ERROR_NO_ERROR if the dialog was displayed successfully.
180 * @remarks Required if bSupportsChannelScan is set to true.
181 * Return PVR_ERROR_NOT_IMPLEMENTED if this add-on won't provide this function.
182 * @note see libKODI_guilib.h about related parts
183 */
184 PVR_ERROR OpenDialogChannelScan(void);
185
186 /*!
187 * @return The total amount of channels on the backend, or -1 on error.
188 * @remarks Valid implementation required.
189 */
190 int GetChannelsAmount(void);
191
192 /*!
193 * Request the list of all channels from the backend.
194 * Channel entries are added to Kodi by calling TransferChannelEntry() on the callback.
195 * @param handle Handle to pass to the callback method.
196 * @param bRadio True to get the radio channels, false to get the TV channels.
197 * @return PVR_ERROR_NO_ERROR if the list has been fetched successfully.
198 * @remarks If bSupportsTV is set to true, a valid result set needs to be provided for bRadio = false.
199 * If bSupportsRadio is set to true, a valid result set needs to be provided for bRadio = true.
200 * At least one of these two must provide a valid result set.
201 */
202 PVR_ERROR GetChannels(ADDON_HANDLE handle, bool bRadio);
203
204 /*!
205 * Delete a channel from the backend.
206 * @param channel The channel to delete.
207 * @return PVR_ERROR_NO_ERROR if the channel has been deleted successfully.
208 * @remarks Required if bSupportsChannelSettings is set to true.
209 */
210 PVR_ERROR DeleteChannel(const PVR_CHANNEL& channel);
211
212 /*!
213 * Rename a channel on the backend.
214 * @param channel The channel to rename, containing the new channel name.
215 * @return PVR_ERROR_NO_ERROR if the channel has been renamed successfully.
216 * @remarks Optional, and only used if bSupportsChannelSettings is set to true.
217 * Return PVR_ERROR_NOT_IMPLEMENTED if this add-on won't provide this function.
218 */
219 PVR_ERROR RenameChannel(const PVR_CHANNEL& channel);
220
221 /*!
222 * Show the channel settings dialog, if supported by the backend.
223 * @param channel The channel to show the dialog for.
224 * @return PVR_ERROR_NO_ERROR if the dialog has been displayed successfully.
225 * @remarks Required if bSupportsChannelSettings is set to true.
226 * @note see libKODI_guilib.h about related parts
227 */
228 PVR_ERROR OpenDialogChannelSettings(const PVR_CHANNEL& channel);
229
230 /*!
231 * Show the dialog to add a channel on the backend, if supported by the backend.
232 * @param channel The channel to add.
233 * @return PVR_ERROR_NO_ERROR if the channel has been added successfully.
234 * @remarks Required if bSupportsChannelSettings is set to true.
235 * @note see libKODI_guilib.h about related parts
236 */
237 PVR_ERROR OpenDialogChannelAdd(const PVR_CHANNEL& channel);
238 //@}
239
240 /** @name PVR recording methods
241 * @remarks Only used by Kodi if bSupportsRecordings is set to true.
242 * If a recording changes after the initial import, or if a new one was added,
243 * then the add-on should call TriggerRecordingUpdate()
244 */
245 //@{
246 /*!
247 * @return The total amount of recordings on the backend or -1 on error.
248 * @param deleted if set return deleted recording (called if bSupportsRecordingsUndelete set to true)
249 * @remarks Required if bSupportsRecordings is set to true. Return -1 if this add-on won't provide this function.
250 */
251 int GetRecordingsAmount(bool deleted);
252
253 /*!
254 * Request the list of all recordings from the backend, if supported.
255 * Recording entries are added to Kodi by calling TransferRecordingEntry() on the callback.
256 * @param handle Handle to pass to the callback method.
257 * @param deleted if set return deleted recording (called if bSupportsRecordingsUndelete set to true)
258 * @return PVR_ERROR_NO_ERROR if the recordings have been fetched successfully.
259 * @remarks Required if bSupportsRecordings is set to true.
260 * Return PVR_ERROR_NOT_IMPLEMENTED if this add-on won't provide this function.
261 */
262 PVR_ERROR GetRecordings(ADDON_HANDLE handle, bool deleted);
263
264 /*!
265 * Delete a recording on the backend.
266 * @param recording The recording to delete.
267 * @return PVR_ERROR_NO_ERROR if the recording has been deleted successfully.
268 * @remarks Optional, and only used if bSupportsRecordings is set to true.
269 * Return PVR_ERROR_NOT_IMPLEMENTED if this add-on won't provide this function.
270 */
271 PVR_ERROR DeleteRecording(const PVR_RECORDING& recording);
272
273 /*!
274 * Undelete a recording on the backend.
275 * @param recording The recording to undelete.
276 * @return PVR_ERROR_NO_ERROR if the recording has been undeleted successfully.
277 * @remarks Optional, and only used if bSupportsRecordingsUndelete is set to true.
278 * Return PVR_ERROR_NOT_IMPLEMENTED if this add-on won't provide this function.
279 */
280 PVR_ERROR UndeleteRecording(const PVR_RECORDING& recording);
281
282 /*!
283 * @brief Delete all recordings permanent which in the deleted folder on the backend.
284 * @return PVR_ERROR_NO_ERROR if the recordings has been deleted successfully.
285 */
286 PVR_ERROR DeleteAllRecordingsFromTrash();
287
288 /*!
289 * Rename a recording on the backend.
290 * @param recording The recording to rename, containing the new name.
291 * @return PVR_ERROR_NO_ERROR if the recording has been renamed successfully.
292 * @remarks Optional, and only used if bSupportsRecordings is set to true.
293 * Return PVR_ERROR_NOT_IMPLEMENTED if this add-on won't provide this function.
294 */
295 PVR_ERROR RenameRecording(const PVR_RECORDING& recording);
296
297 /*!
298 * Set the lifetime of a recording on the backend.
299 * @param recording The recording to change the lifetime for. recording.iLifetime contains the new lieftime value.
300 * @return PVR_ERROR_NO_ERROR if the recording's lifetime has been set successfully.
301 * @remarks Required if bSupportsRecordingsLifetimeChange is set to true.
302 * Return PVR_ERROR_NOT_IMPLEMENTED if this add-on won't provide this function.
303 */
304 PVR_ERROR SetRecordingLifetime(const PVR_RECORDING* recording);
305
306 /*!
307 * Set the play count of a recording on the backend.
308 * @param recording The recording to change the play count.
309 * @param count Play count.
310 * @return PVR_ERROR_NO_ERROR if the recording's play count has been set successfully.
311 * @remarks Required if bSupportsRecordingPlayCount is set to true.
312 * Return PVR_ERROR_NOT_IMPLEMENTED if this add-on won't provide this function.
313 */
314 PVR_ERROR SetRecordingPlayCount(const PVR_RECORDING& recording, int count);
315
316 /*!
317 * Set the last watched position of a recording on the backend.
318 * @param recording The recording.
319 * @param lastplayedposition The last watched position in seconds
320 * @return PVR_ERROR_NO_ERROR if the position has been stored successfully.
321 * @remarks Required if bSupportsLastPlayedPosition is set to true.
322 * Return PVR_ERROR_NOT_IMPLEMENTED if this add-on won't provide this function.
323 */
324 PVR_ERROR SetRecordingLastPlayedPosition(const PVR_RECORDING& recording, int lastplayedposition);
325
326 /*!
327 * Retrieve the last watched position of a recording on the backend.
328 * @param recording The recording.
329 * @return The last watched position in seconds or -1 on error
330 * @remarks Required if bSupportsRecordingPlayCount is set to true.
331 * Return -1 if this add-on won't provide this function.
332 */
333 int GetRecordingLastPlayedPosition(const PVR_RECORDING& recording);
334
335 /*!
336 * Retrieve the edit decision list (EDL) of a recording on the backend.
337 * @param recording The recording.
338 * @param edl out: The function has to write the EDL into this array.
339 * @param size in: The maximum size of the EDL, out: the actual size of the EDL.
340 * @return PVR_ERROR_NO_ERROR if the EDL was successfully read or no EDL exists.
341 * @remarks Required if bSupportsRecordingEdl is set to true.
342 * Return PVR_ERROR_NOT_IMPLEMENTED if this add-on won't provide this function.
343 */
344 PVR_ERROR GetRecordingEdl(const PVR_RECORDING& recording, PVR_EDL_ENTRY edl[], int *size);
345
346 /*!
347 * Retrieve the timer types supported by the backend.
348 * @param types out: The function has to write the definition of the supported timer types into this array.
349 * @param typesCount in: The maximum size of the list, out: the actual size of the list. default: PVR_ADDON_TIMERTYPE_ARRAY_SIZE
350 * @return PVR_ERROR_NO_ERROR if the types were successfully written to the array.
351 * @remarks Required if bSupportsTimers is set to true.
352 * Return PVR_ERROR_NOT_IMPLEMENTED if this add-on won't provide this function.
353 */
354 PVR_ERROR GetTimerTypes(PVR_TIMER_TYPE types[], int *typesCount);
355
356 //@}
357 /** @name PVR timer methods
358 * @remarks Only used by Kodi if bSupportsTimers is set to true.
359 * If a timer changes after the initial import, or if a new one was added,
360 * then the add-on should call TriggerTimerUpdate()
361 */
362 //@{
363 /*!
364 * @return The total amount of timers on the backend or -1 on error.
365 * @remarks Required if bSupportsTimers is set to true. Return -1 if this add-on won't provide this function.
366 */
367 int GetTimersAmount(void);
368
369 /*!
370 * Request the list of all timers from the backend if supported.
371 * Timer entries are added to Kodi by calling TransferTimerEntry() on the callback.
372 * @param handle Handle to pass to the callback method.
373 * @return PVR_ERROR_NO_ERROR if the list has been fetched successfully.
374 * @remarks Required if bSupportsTimers is set to true.
375 * Return PVR_ERROR_NOT_IMPLEMENTED if this add-on won't provide this function.
376 */
377 PVR_ERROR GetTimers(ADDON_HANDLE handle);
378
379 /*!
380 * Add a timer on the backend.
381 * @param timer The timer to add.
382 * @return PVR_ERROR_NO_ERROR if the timer has been added successfully.
383 * @remarks Required if bSupportsTimers is set to true.
384 * Return PVR_ERROR_NOT_IMPLEMENTED if this add-on won't provide this function.
385 */
386 PVR_ERROR AddTimer(const PVR_TIMER& timer);
387
388 /*!
389 * Delete a timer on the backend.
390 * @param timer The timer to delete.
391 * @param bForceDelete Set to true to delete a timer that is currently recording a program.
392 * @return PVR_ERROR_NO_ERROR if the timer has been deleted successfully.
393 * @remarks Required if bSupportsTimers is set to true.
394 * Return PVR_ERROR_NOT_IMPLEMENTED if this add-on won't provide this function.
395 */
396 PVR_ERROR DeleteTimer(const PVR_TIMER& timer, bool bForceDelete);
397
398 /*!
399 * Update the timer information on the backend.
400 * @param timer The timer to update.
401 * @return PVR_ERROR_NO_ERROR if the timer has been updated successfully.
402 * @remarks Required if bSupportsTimers is set to true.
403 * Return PVR_ERROR_NOT_IMPLEMENTED if this add-on won't provide this function.
404 */
405 PVR_ERROR UpdateTimer(const PVR_TIMER& timer);
406
407 //@}
408
409 /** @name PVR live stream methods, used to open and close a stream to a channel, and optionally perform read operations on the stream */
410 //@{
411 /*!
412 * Open a live stream on the backend.
413 * @param channel The channel to stream.
414 * @return True if the stream has been opened successfully, false otherwise.
415 * @remarks Required if bHandlesInputStream or bHandlesDemuxing is set to true.
416 * CloseLiveStream() will always be called by Kodi prior to calling this function.
417 * Return false if this add-on won't provide this function.
418 */
419 bool OpenLiveStream(const PVR_CHANNEL& channel);
420
421 /*!
422 * Close an open live stream.
423 * @remarks Required if bHandlesInputStream or bHandlesDemuxing is set to true.
424 */
425 void CloseLiveStream(void);
426
427 /*!
428 * Read from an open live stream.
429 * @param pBuffer The buffer to store the data in.
430 * @param iBufferSize The amount of bytes to read.
431 * @return The amount of bytes that were actually read from the stream.
432 * @remarks Required if bHandlesInputStream is set to true.
433 * Return -1 if this add-on won't provide this function.
434 */
435 int ReadLiveStream(unsigned char* pBuffer, unsigned int iBufferSize);
436
437 /*!
438 * Seek in a live stream on a backend that supports timeshifting.
439 * @param iPosition The position to seek to.
440 * @param iWhence ?
441 * @return The new position.
442 * @remarks Optional, and only used if bHandlesInputStream is set to true.
443 * Return -1 if this add-on won't provide this function.
444 */
445 long long SeekLiveStream(long long iPosition, int iWhence = SEEK_SET);
446
447 /*!
448 * Obtain the length of a live stream.
449 * @return The total length of the stream that's currently being read.
450 * @remarks Optional, and only used if bHandlesInputStream is set to true.
451 * Return -1 if this add-on won't provide this function.
452 */
453 long long LengthLiveStream(void);
454
455 /*!
456 * Get the signal status of the stream that's currently open.
457 * @param signalStatus The signal status.
458 * @return PVR_ERROR_NO_ERROR if the signal status has been read successfully, false otherwise.
459 * @remarks Optional, and only used if PVR_ADDON_CAPABILITIES::bHandlesInputStream or PVR_ADDON_CAPABILITIES::bHandlesDemuxing is set to true.
460 * Return PVR_ERROR_NOT_IMPLEMENTED if this add-on won't provide this function.
461 */
462 PVR_ERROR SignalStatus(PVR_SIGNAL_STATUS& signalStatus);
463
464 /*!
465 * Get the descramble information of the stream that's currently open.
466 * @param [out] descrambleInfo The descramble information.
467 * @return PVR_ERROR_NO_ERROR if the descramble information has been read successfully, false otherwise.
468 * @remarks Optional, and only used if PVR_ADDON_CAPABILITIES::bSupportsDescrambleInfo is set to true.
469 * Return PVR_ERROR_NOT_IMPLEMENTED if this add-on won't provide this function.
470 */
471 PVR_ERROR GetDescrambleInfo(PVR_DESCRAMBLE_INFO* descrambleInfo);
472
473 /*!
474 * Get the stream properties for a channel from the backend.
475 * @param[in] channel The channel to get the stream properties for.
476 * @param[inout] properties in: an array for the properties to return, out: the properties required to play the stream.
477 * @param[inout] iPropertiesCount in: the size of the properties array, out: the number of properties returned.
478 * @return PVR_ERROR_NO_ERROR if the stream is available.
479 * @remarks Required if PVR_ADDON_CAPABILITIES::bSupportsTV or PVR_ADDON_CAPABILITIES::bSupportsRadio are set to true and PVR_ADDON_CAPABILITIES::bHandlesInputStream is set to false.
480 * In this case the implementation must fill the property PVR_STREAM_PROPERTY_STREAMURL with the URL Kodi should resolve to playback the channel.
481 * Return PVR_ERROR_NOT_IMPLEMENTED if this add-on won't provide this function.
482 */
483 PVR_ERROR GetChannelStreamProperties(const PVR_CHANNEL* channel, PVR_NAMED_VALUE* properties, unsigned int* iPropertiesCount);
484
485 /*!
486 * Get the stream properties for a recording from the backend.
487 * @param[in] recording The recording to get the stream properties for.
488 * @param[inout] properties in: an array for the properties to return, out: the properties required to play the stream.
489 * @param[inout] iPropertiesCount in: the size of the properties array, out: the number of properties returned.
490 * @return PVR_ERROR_NO_ERROR if the stream is available.
491 * @remarks Required if PVR_ADDON_CAPABILITIES::bSupportsRecordings is set to true and the add-on does not implement recording stream functions (OpenRecordedStream, ...).
492 * In this case your implementation must fill the property PVR_STREAM_PROPERTY_STREAMURL with the URL Kodi should resolve to playback the recording.
493 * Return PVR_ERROR_NOT_IMPLEMENTED if this add-on won't provide this function.
494 */
495 PVR_ERROR GetRecordingStreamProperties(const PVR_RECORDING* recording, PVR_NAMED_VALUE* properties, unsigned int* iPropertiesCount);
496
497 /*!
498 * Get the stream properties of the stream that's currently being read.
499 * @param pProperties The properties of the currently playing stream.
500 * @return PVR_ERROR_NO_ERROR if the properties have been fetched successfully.
501 * @remarks Required if bHandlesDemuxing is set to true.
502 * Return PVR_ERROR_NOT_IMPLEMENTED if this add-on won't provide this function.
503 */
504 PVR_ERROR GetStreamProperties(PVR_STREAM_PROPERTIES* pProperties);
505 //@}
506
507 /** @name PVR recording stream methods, used to open and close a stream to a recording, and perform read operations on the stream.
508 * @remarks This will only be used if the backend doesn't provide a direct URL in the recording tag.
509 */
510 //@{
511 /*!
512 * Obtain the chunk size to use when reading streams.
513 * @param chunksize must be filled with the chunk size in bytes.
514 * @return PVR_ERROR_NO_ERROR if the chunk size has been fetched successfully.
515 * @remarks Optional, and only used if not reading from demuxer (=> DemuxRead) and
516 * PVR_ADDON_CAPABILITIES::bSupportsRecordings is true (=> ReadRecordedStream) or
517 * PVR_ADDON_CAPABILITIES::bHandlesInputStream is true (=> ReadLiveStream).
518 * Return PVR_ERROR_NOT_IMPLEMENTED if this add-on won't provide this function. In this case Kodi will decide on the chunk size to use.
519 */
520 PVR_ERROR GetStreamReadChunkSize(int* chunksize);
521
522 /*!
523 * Open a stream to a recording on the backend.
524 * @param recording The recording to open.
525 * @return True if the stream has been opened successfully, false otherwise.
526 * @remarks Optional, and only used if bSupportsRecordings is set to true.
527 * CloseRecordedStream() will always be called by Kodi prior to calling this function.
528 * Return false if this add-on won't provide this function.
529 */
530 bool OpenRecordedStream(const PVR_RECORDING& recording);
531
532 /*!
533 * Close an open stream from a recording.
534 * @remarks Optional, and only used if bSupportsRecordings is set to true.
535 */
536 void CloseRecordedStream(void);
537
538 /*!
539 * Read from a recording.
540 * @param pBuffer The buffer to store the data in.
541 * @param iBufferSize The amount of bytes to read.
542 * @return The amount of bytes that were actually read from the stream.
543 * @remarks Optional, and only used if bSupportsRecordings is set to true, but required if OpenRecordedStream() is implemented.
544 * Return -1 if this add-on won't provide this function.
545 */
546 int ReadRecordedStream(unsigned char* pBuffer, unsigned int iBufferSize);
547
548 /*!
549 * Seek in a recorded stream.
550 * @param iPosition The position to seek to.
551 * @param iWhence ?
552 * @return The new position.
553 * @remarks Optional, and only used if bSupportsRecordings is set to true.
554 * Return -1 if this add-on won't provide this function.
555 */
556 long long SeekRecordedStream(long long iPosition, int iWhence = SEEK_SET);
557
558 /*!
559 * Obtain the length of a recorded stream.
560 * @return The total length of the stream that's currently being read.
561 * @remarks Optional, and only used if bSupportsRecordings is set to true.
562 * Return -1 if this add-on won't provide this function.
563 */
564 long long LengthRecordedStream(void);
565
566 //@}
567
568 /** @name PVR demultiplexer methods
569 * @remarks Only used by Kodi if bHandlesDemuxing is set to true.
570 */
571 //@{
572 /*!
573 * Reset the demultiplexer in the add-on.
574 * @remarks Required if bHandlesDemuxing is set to true.
575 */
576 void DemuxReset(void);
577
578 /*!
579 * Abort the demultiplexer thread in the add-on.
580 * @remarks Required if bHandlesDemuxing is set to true.
581 */
582 void DemuxAbort(void);
583
584 /*!
585 * Flush all data that's currently in the demultiplexer buffer in the add-on.
586 * @remarks Required if bHandlesDemuxing is set to true.
587 */
588 void DemuxFlush(void);
589
590 /*!
591 * Read the next packet from the demultiplexer, if there is one.
592 * @return The next packet.
593 * If there is no next packet, then the add-on should return the
594 * packet created by calling AllocateDemuxPacket(0) on the callback.
595 * If the stream changed and Kodi's player needs to be reinitialised,
596 * then, the add-on should call AllocateDemuxPacket(0) on the
597 * callback, and set the streamid to DMX_SPECIALID_STREAMCHANGE and
598 * return the value.
599 * The add-on should return NULL if an error occured.
600 * @remarks Required if bHandlesDemuxing is set to true.
601 * Return NULL if this add-on won't provide this function.
602 */
603 DemuxPacket* DemuxRead(void);
604 //@}
605
606 /*!
607 * Check if the backend support pausing the currently playing stream
608 * This will enable/disable the pause button in Kodi based on the return value
609 * @return false if the PVR addon/backend does not support pausing, true if possible
610 */
611 bool CanPauseStream();
612
613 /*!
614 * Check if the backend supports seeking for the currently playing stream
615 * This will enable/disable the rewind/forward buttons in Kodi based on the return value
616 * @return false if the PVR addon/backend does not support seeking, true if possible
617 */
618 bool CanSeekStream();
619
620 /*!
621 * @brief Notify the pvr addon that Kodi (un)paused the currently playing stream
622 */
623 void PauseStream(bool bPaused);
624
625 /*!
626 * Notify the pvr addon/demuxer that Kodi wishes to seek the stream by time
627 * @param time The absolute time since stream start
628 * @param backwards True to seek to keyframe BEFORE time, else AFTER
629 * @param startpts can be updated to point to where display should start
630 * @return True if the seek operation was possible
631 * @remarks Optional, and only used if addon has its own demuxer.
632 * Return False if this add-on won't provide this function.
633 */
634 bool SeekTime(double time, bool backwards, double *startpts);
635
636 /*!
637 * Notify the pvr addon/demuxer that Kodi wishes to change playback speed
638 * @param speed The requested playback speed
639 * @remarks Optional, and only used if addon has its own demuxer.
640 */
641 void SetSpeed(int speed);
642
643 /*!
644 * Notify the pvr addon/demuxer that Kodi wishes to fill demux queue
645 * @param mode The requested filling mode
646 * @remarks Optional, and only used if addon has its own demuxer.
647 */
648 void FillBuffer(bool mode);
649
650 /*!
651 * Get the hostname of the pvr backend server
652 * @return hostname as ip address or alias. If backend does not utilize a server, return empty string.
653 */
654 const char* GetBackendHostname();
655
656 /*!
657 * Check for real-time streaming
658 * @return true if current stream is real-time
659 */
660 bool IsRealTimeStream();
661
662 /*!
663 * Tell the client the time frame to use when notifying epg events back to Kodi. The client might push epg events asynchronously
664 * to Kodi using the callback function EpgEventStateChange. To be able to only push events that are actually of interest for Kodi,
665 * client needs to know about the epg time frame Kodi uses. Kodi supplies the current epg time frame value in PVR_PROPERTIES.iEpgMaxDays
666 * when creating the addon and calls SetEPGTimeFrame later whenever Kodi's epg time frame value changes.
667 * @param iDays number of days from "now". EPG_TIMEFRAME_UNLIMITED means that Kodi is interested in all epg events, regardless of event times.
668 * @return PVR_ERROR_NO_ERROR if new value was successfully set.
669 * @remarks Required if bSupportsEPG is set to true. Return PVR_ERROR_NOT_IMPLEMENTED if this add-on won't provide this function.
670 */
671 PVR_ERROR SetEPGTimeFrame(int iDays);
672
673 /*!
674 * Notify the pvr addon for power management events
675 */
676 void OnSystemSleep();
677 void OnSystemWake();
678 void OnPowerSavingActivated();
679 void OnPowerSavingDeactivated();
680
681 /*!
682 * Get stream times.
683 * @param times A pointer to the data to be filled by the implementation.
684 * @return PVR_ERROR_NO_ERROR on success.
685 */
686 PVR_ERROR GetStreamTimes(PVR_STREAM_TIMES *times);
687
688 /*!
689 * Called by Kodi to assign the function pointers of this add-on to pClient.
690 * @param ptr The struct to assign the function pointers to.
691 */
692 void __declspec(dllexport) get_addon(void* ptr)
693 {
694 AddonInstance_PVR* pClient = static_cast<AddonInstance_PVR*>(ptr);
695
696 pClient->toAddon.addonInstance = nullptr; // used in future
697
698 pClient->toAddon.GetAddonCapabilities = GetAddonCapabilities;
699 pClient->toAddon.GetStreamProperties = GetStreamProperties;
700 pClient->toAddon.GetConnectionString = GetConnectionString;
701 pClient->toAddon.GetBackendName = GetBackendName;
702 pClient->toAddon.GetBackendVersion = GetBackendVersion;
703 pClient->toAddon.GetDriveSpace = GetDriveSpace;
704 pClient->toAddon.OpenDialogChannelScan = OpenDialogChannelScan;
705 pClient->toAddon.MenuHook = CallMenuHook;
706
707 pClient->toAddon.GetEPGForChannel = GetEPGForChannel;
708 pClient->toAddon.IsEPGTagRecordable = IsEPGTagRecordable;
709 pClient->toAddon.IsEPGTagPlayable = IsEPGTagPlayable;
710 pClient->toAddon.GetEPGTagEdl = GetEPGTagEdl;
711 pClient->toAddon.GetEPGTagStreamProperties = GetEPGTagStreamProperties;
712
713 pClient->toAddon.GetChannelGroupsAmount = GetChannelGroupsAmount;
714 pClient->toAddon.GetChannelGroups = GetChannelGroups;
715 pClient->toAddon.GetChannelGroupMembers = GetChannelGroupMembers;
716
717 pClient->toAddon.GetChannelsAmount = GetChannelsAmount;
718 pClient->toAddon.GetChannels = GetChannels;
719 pClient->toAddon.DeleteChannel = DeleteChannel;
720 pClient->toAddon.RenameChannel = RenameChannel;
721 pClient->toAddon.OpenDialogChannelSettings = OpenDialogChannelSettings;
722 pClient->toAddon.OpenDialogChannelAdd = OpenDialogChannelAdd;
723
724 pClient->toAddon.GetRecordingsAmount = GetRecordingsAmount;
725 pClient->toAddon.GetRecordings = GetRecordings;
726 pClient->toAddon.DeleteRecording = DeleteRecording;
727 pClient->toAddon.UndeleteRecording = UndeleteRecording;
728 pClient->toAddon.DeleteAllRecordingsFromTrash = DeleteAllRecordingsFromTrash;
729 pClient->toAddon.RenameRecording = RenameRecording;
730 pClient->toAddon.SetRecordingLifetime = SetRecordingLifetime;
731 pClient->toAddon.SetRecordingPlayCount = SetRecordingPlayCount;
732 pClient->toAddon.SetRecordingLastPlayedPosition = SetRecordingLastPlayedPosition;
733 pClient->toAddon.GetRecordingLastPlayedPosition = GetRecordingLastPlayedPosition;
734 pClient->toAddon.GetRecordingEdl = GetRecordingEdl;
735
736 pClient->toAddon.GetTimerTypes = GetTimerTypes;
737 pClient->toAddon.GetTimersAmount = GetTimersAmount;
738 pClient->toAddon.GetTimers = GetTimers;
739 pClient->toAddon.AddTimer = AddTimer;
740 pClient->toAddon.DeleteTimer = DeleteTimer;
741 pClient->toAddon.UpdateTimer = UpdateTimer;
742
743 pClient->toAddon.OpenLiveStream = OpenLiveStream;
744 pClient->toAddon.CloseLiveStream = CloseLiveStream;
745 pClient->toAddon.ReadLiveStream = ReadLiveStream;
746 pClient->toAddon.SeekLiveStream = SeekLiveStream;
747 pClient->toAddon.LengthLiveStream = LengthLiveStream;
748 pClient->toAddon.SignalStatus = SignalStatus;
749 pClient->toAddon.GetDescrambleInfo = GetDescrambleInfo;
750 pClient->toAddon.GetChannelStreamProperties = GetChannelStreamProperties;
751 pClient->toAddon.GetRecordingStreamProperties = GetRecordingStreamProperties;
752 pClient->toAddon.CanPauseStream = CanPauseStream;
753 pClient->toAddon.PauseStream = PauseStream;
754 pClient->toAddon.CanSeekStream = CanSeekStream;
755 pClient->toAddon.SeekTime = SeekTime;
756 pClient->toAddon.SetSpeed = SetSpeed;
757 pClient->toAddon.FillBuffer = FillBuffer;
758
759 pClient->toAddon.OpenRecordedStream = OpenRecordedStream;
760 pClient->toAddon.CloseRecordedStream = CloseRecordedStream;
761 pClient->toAddon.ReadRecordedStream = ReadRecordedStream;
762 pClient->toAddon.SeekRecordedStream = SeekRecordedStream;
763 pClient->toAddon.LengthRecordedStream = LengthRecordedStream;
764
765 pClient->toAddon.DemuxReset = DemuxReset;
766 pClient->toAddon.DemuxAbort = DemuxAbort;
767 pClient->toAddon.DemuxFlush = DemuxFlush;
768 pClient->toAddon.DemuxRead = DemuxRead;
769
770 pClient->toAddon.GetBackendHostname = GetBackendHostname;
771
772 pClient->toAddon.IsRealTimeStream = IsRealTimeStream;
773
774 pClient->toAddon.SetEPGTimeFrame = SetEPGTimeFrame;
775
776 pClient->toAddon.OnSystemSleep = OnSystemSleep;
777 pClient->toAddon.OnSystemWake = OnSystemWake;
778 pClient->toAddon.OnPowerSavingActivated = OnPowerSavingActivated;
779 pClient->toAddon.OnPowerSavingDeactivated = OnPowerSavingDeactivated;
780 pClient->toAddon.GetStreamTimes = GetStreamTimes;
781
782 pClient->toAddon.GetStreamReadChunkSize = GetStreamReadChunkSize;
783 };
784};