summaryrefslogtreecommitdiffstats
path: root/xbmc/addons/kodi-addon-dev-kit
diff options
context:
space:
mode:
Diffstat (limited to 'xbmc/addons/kodi-addon-dev-kit')
-rw-r--r--xbmc/addons/kodi-addon-dev-kit/include/kodi/AddonBase.h13
-rw-r--r--xbmc/addons/kodi-addon-dev-kit/include/kodi/AudioEngine.h20
-rw-r--r--xbmc/addons/kodi-addon-dev-kit/include/kodi/addon-instance/AudioDSP.h2
-rw-r--r--xbmc/addons/kodi-addon-dev-kit/include/kodi/addon-instance/Peripheral.h17
-rw-r--r--xbmc/addons/kodi-addon-dev-kit/include/kodi/addon-instance/PeripheralUtils.h4
-rw-r--r--xbmc/addons/kodi-addon-dev-kit/include/kodi/versions.h8
-rw-r--r--xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_epg_types.h1
-rw-r--r--xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_pvr_dll.h50
-rw-r--r--xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_pvr_types.h45
9 files changed, 105 insertions, 55 deletions
diff --git a/xbmc/addons/kodi-addon-dev-kit/include/kodi/AddonBase.h b/xbmc/addons/kodi-addon-dev-kit/include/kodi/AddonBase.h
index 07fd8ce..0c5e617 100644
--- a/xbmc/addons/kodi-addon-dev-kit/include/kodi/AddonBase.h
+++ b/xbmc/addons/kodi-addon-dev-kit/include/kodi/AddonBase.h
@@ -43,6 +43,9 @@
43 #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) 43 #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)
44 #define ATTRIBUTE_PACKED __attribute__ ((packed)) 44 #define ATTRIBUTE_PACKED __attribute__ ((packed))
45 #define PRAGMA_PACK 0 45 #define PRAGMA_PACK 0
46 #if __GNUC__ >= 4
47 #define ATTRIBUTE_HIDDEN __attribute__ ((visibility ("hidden")))
48 #endif
46 #endif 49 #endif
47#endif 50#endif
48 51
@@ -51,6 +54,10 @@
51 #define PRAGMA_PACK 1 54 #define PRAGMA_PACK 1
52#endif 55#endif
53 56
57#if !defined(ATTRIBUTE_HIDDEN)
58 #define ATTRIBUTE_HIDDEN
59#endif
60
54#include "versions.h" 61#include "versions.h"
55 62
56namespace kodi { namespace addon { class CAddonBase; }} 63namespace kodi { namespace addon { class CAddonBase; }}
@@ -234,7 +241,7 @@ namespace addon {
234class IAddonInstance 241class IAddonInstance
235{ 242{
236public: 243public:
237 IAddonInstance(ADDON_TYPE type) : m_type(type) { } 244 explicit IAddonInstance(ADDON_TYPE type) : m_type(type) { }
238 virtual ~IAddonInstance() = default; 245 virtual ~IAddonInstance() = default;
239 246
240 virtual ADDON_STATUS CreateInstance(int instanceType, std::string instanceID, KODI_HANDLE instance, KODI_HANDLE& addonInstance) 247 virtual ADDON_STATUS CreateInstance(int instanceType, std::string instanceID, KODI_HANDLE instance, KODI_HANDLE& addonInstance)
@@ -254,7 +261,7 @@ namespace kodi {
254class CSettingValue 261class CSettingValue
255{ 262{
256public: 263public:
257 CSettingValue(const void *settingValue) : m_settingValue(settingValue) {} 264 explicit CSettingValue(const void *settingValue) : m_settingValue(settingValue) {}
258 265
259 bool empty() const { return (m_settingValue == nullptr) ? true : false; } 266 bool empty() const { return (m_settingValue == nullptr) ? true : false; }
260 std::string GetString() const { return (char*)m_settingValue; } 267 std::string GetString() const { return (char*)m_settingValue; }
@@ -273,7 +280,7 @@ private:
273namespace kodi { 280namespace kodi {
274namespace addon { 281namespace addon {
275/// Add-on main instance class. 282/// Add-on main instance class.
276class CAddonBase 283class ATTRIBUTE_HIDDEN CAddonBase
277{ 284{
278public: 285public:
279 CAddonBase() 286 CAddonBase()
diff --git a/xbmc/addons/kodi-addon-dev-kit/include/kodi/AudioEngine.h b/xbmc/addons/kodi-addon-dev-kit/include/kodi/AudioEngine.h
index 380e5e2..1265dcd 100644
--- a/xbmc/addons/kodi-addon-dev-kit/include/kodi/AudioEngine.h
+++ b/xbmc/addons/kodi-addon-dev-kit/include/kodi/AudioEngine.h
@@ -175,10 +175,10 @@ extern "C"
175 void (*AEStream_SetVolume)(void *kodiBase, AEStreamHandle *handle, float Volume); 175 void (*AEStream_SetVolume)(void *kodiBase, AEStreamHandle *handle, float Volume);
176 float (*AEStream_GetAmplification)(void *kodiBase, AEStreamHandle *handle); 176 float (*AEStream_GetAmplification)(void *kodiBase, AEStreamHandle *handle);
177 void (*AEStream_SetAmplification)(void *kodiBase, AEStreamHandle *handle, float Amplify); 177 void (*AEStream_SetAmplification)(void *kodiBase, AEStreamHandle *handle, float Amplify);
178 const unsigned int (*AEStream_GetFrameSize)(void *kodiBase, AEStreamHandle *handle); 178 unsigned int (*AEStream_GetFrameSize)(void *kodiBase, AEStreamHandle *handle);
179 const unsigned int (*AEStream_GetChannelCount)(void *kodiBase, AEStreamHandle *handle); 179 unsigned int (*AEStream_GetChannelCount)(void *kodiBase, AEStreamHandle *handle);
180 const unsigned int (*AEStream_GetSampleRate)(void *kodiBase, AEStreamHandle *handle); 180 unsigned int (*AEStream_GetSampleRate)(void *kodiBase, AEStreamHandle *handle);
181 const AEDataFormat (*AEStream_GetDataFormat)(void *kodiBase, AEStreamHandle *handle); 181 AEDataFormat (*AEStream_GetDataFormat)(void *kodiBase, AEStreamHandle *handle);
182 double (*AEStream_GetResampleRatio)(void *kodiBase, AEStreamHandle *handle); 182 double (*AEStream_GetResampleRatio)(void *kodiBase, AEStreamHandle *handle);
183 void (*AEStream_SetResampleRatio)(void *kodiBase, AEStreamHandle *handle, double Ratio); 183 void (*AEStream_SetResampleRatio)(void *kodiBase, AEStreamHandle *handle, double Ratio);
184 } AddonToKodiFuncTable_kodi_audioengine; 184 } AddonToKodiFuncTable_kodi_audioengine;
@@ -269,8 +269,8 @@ namespace audioengine
269 : m_kodiBase(::kodi::addon::CAddonBase::m_interface->toKodi->kodiBase), 269 : m_kodiBase(::kodi::addon::CAddonBase::m_interface->toKodi->kodiBase),
270 m_cb(::kodi::addon::CAddonBase::m_interface->toKodi->kodi_audioengine) 270 m_cb(::kodi::addon::CAddonBase::m_interface->toKodi->kodi_audioengine)
271 { 271 {
272 AEStreamHandle *streamHandle = m_cb->MakeStream(m_kodiBase, format, options); 272 m_StreamHandle = m_cb->MakeStream(m_kodiBase, format, options);
273 if (streamHandle == nullptr) 273 if (m_StreamHandle == nullptr)
274 { 274 {
275 kodi::Log(ADDON_LOG_FATAL, "CAddonAEStream: MakeStream failed!"); 275 kodi::Log(ADDON_LOG_FATAL, "CAddonAEStream: MakeStream failed!");
276 } 276 }
@@ -483,7 +483,7 @@ namespace audioengine
483 /// 483 ///
484 /// @return The size in bytes of one frame 484 /// @return The size in bytes of one frame
485 /// 485 ///
486 const unsigned int GetFrameSize() const 486 unsigned int GetFrameSize() const
487 { 487 {
488 return m_cb->AEStream_GetFrameSize(m_kodiBase, m_StreamHandle); 488 return m_cb->AEStream_GetFrameSize(m_kodiBase, m_StreamHandle);
489 } 489 }
@@ -495,7 +495,7 @@ namespace audioengine
495 /// 495 ///
496 /// @return The channel count 496 /// @return The channel count
497 /// 497 ///
498 const unsigned int GetChannelCount() const 498 unsigned int GetChannelCount() const
499 { 499 {
500 return m_cb->AEStream_GetChannelCount(m_kodiBase, m_StreamHandle); 500 return m_cb->AEStream_GetChannelCount(m_kodiBase, m_StreamHandle);
501 } 501 }
@@ -509,7 +509,7 @@ namespace audioengine
509 /// 509 ///
510 /// @return The stream's sample rate (eg, 48000) 510 /// @return The stream's sample rate (eg, 48000)
511 /// 511 ///
512 const unsigned int GetSampleRate() const 512 unsigned int GetSampleRate() const
513 { 513 {
514 return m_cb->AEStream_GetSampleRate(m_kodiBase, m_StreamHandle); 514 return m_cb->AEStream_GetSampleRate(m_kodiBase, m_StreamHandle);
515 } 515 }
@@ -521,7 +521,7 @@ namespace audioengine
521 /// 521 ///
522 /// @return The stream's data format (eg, AUDIOENGINE_FMT_S16LE) 522 /// @return The stream's data format (eg, AUDIOENGINE_FMT_S16LE)
523 /// 523 ///
524 const AEDataFormat GetDataFormat() const 524 AEDataFormat GetDataFormat() const
525 { 525 {
526 return m_cb->AEStream_GetDataFormat(m_kodiBase, m_StreamHandle); 526 return m_cb->AEStream_GetDataFormat(m_kodiBase, m_StreamHandle);
527 } 527 }
diff --git a/xbmc/addons/kodi-addon-dev-kit/include/kodi/addon-instance/AudioDSP.h b/xbmc/addons/kodi-addon-dev-kit/include/kodi/addon-instance/AudioDSP.h
index c508f80..3587a33 100644
--- a/xbmc/addons/kodi-addon-dev-kit/include/kodi/addon-instance/AudioDSP.h
+++ b/xbmc/addons/kodi-addon-dev-kit/include/kodi/addon-instance/AudioDSP.h
@@ -580,7 +580,7 @@ namespace addon {
580 /// add-on CreateInstance call with instance 580 /// add-on CreateInstance call with instance
581 /// id ADDON_INSTANCE_ADSP. 581 /// id ADDON_INSTANCE_ADSP.
582 /// 582 ///
583 CInstanceAudioDSP(KODI_HANDLE instance) 583 explicit CInstanceAudioDSP(KODI_HANDLE instance)
584 : IAddonInstance(ADDON_INSTANCE_ADSP) 584 : IAddonInstance(ADDON_INSTANCE_ADSP)
585 { 585 {
586 if (CAddonBase::m_interface->globalSingleInstance != nullptr) 586 if (CAddonBase::m_interface->globalSingleInstance != nullptr)
diff --git a/xbmc/addons/kodi-addon-dev-kit/include/kodi/addon-instance/Peripheral.h b/xbmc/addons/kodi-addon-dev-kit/include/kodi/addon-instance/Peripheral.h
index 631b9b4..045a925 100644
--- a/xbmc/addons/kodi-addon-dev-kit/include/kodi/addon-instance/Peripheral.h
+++ b/xbmc/addons/kodi-addon-dev-kit/include/kodi/addon-instance/Peripheral.h
@@ -210,6 +210,8 @@ extern "C"
210 JOYSTICK_FEATURE_TYPE_ANALOG_STICK, 210 JOYSTICK_FEATURE_TYPE_ANALOG_STICK,
211 JOYSTICK_FEATURE_TYPE_ACCELEROMETER, 211 JOYSTICK_FEATURE_TYPE_ACCELEROMETER,
212 JOYSTICK_FEATURE_TYPE_MOTOR, 212 JOYSTICK_FEATURE_TYPE_MOTOR,
213 JOYSTICK_FEATURE_TYPE_RELPOINTER,
214 JOYSTICK_FEATURE_TYPE_ABSPOINTER,
213 } JOYSTICK_FEATURE_TYPE; 215 } JOYSTICK_FEATURE_TYPE;
214 216
215 typedef enum JOYSTICK_FEATURE_PRIMITIVE 217 typedef enum JOYSTICK_FEATURE_PRIMITIVE
@@ -257,6 +259,7 @@ extern "C"
257 void (*trigger_scan)(void* kodiInstance); 259 void (*trigger_scan)(void* kodiInstance);
258 void (*refresh_button_maps)(void* kodiInstance, const char* device_name, const char* controller_id); 260 void (*refresh_button_maps)(void* kodiInstance, const char* device_name, const char* controller_id);
259 unsigned int (*feature_count)(void* kodiInstance, const char* controller_id, JOYSTICK_FEATURE_TYPE type); 261 unsigned int (*feature_count)(void* kodiInstance, const char* controller_id, JOYSTICK_FEATURE_TYPE type);
262 JOYSTICK_FEATURE_TYPE (*feature_type)(void* kodiInstance, const char* controller_id, const char* feature_name);
260 } AddonToKodiFuncTable_Peripheral; 263 } AddonToKodiFuncTable_Peripheral;
261 264
262 //! @todo Mouse, light gun, multitouch 265 //! @todo Mouse, light gun, multitouch
@@ -545,6 +548,20 @@ namespace addon
545 return m_instanceData->toKodi.feature_count(m_instanceData->toKodi.kodiInstance, strControllerId.c_str(), type); 548 return m_instanceData->toKodi.feature_count(m_instanceData->toKodi.kodiInstance, strControllerId.c_str(), type);
546 } 549 }
547 550
551 /*!
552 * @brief Return the type of the feature
553 *
554 * @param controllerId The controller ID to check
555 * @param featureName The feature to check
556 *
557 * @return The type of the specified feature, or JOYSTICK_FEATURE_TYPE_UNKNOWN
558 * if unknown
559 */
560 JOYSTICK_FEATURE_TYPE FeatureType(const std::string& strControllerId, const std::string &featureName)
561 {
562 return m_instanceData->toKodi.feature_type(m_instanceData->toKodi.kodiInstance, strControllerId.c_str(), featureName.c_str());
563 }
564
548 private: 565 private:
549 void SetAddonStruct(KODI_HANDLE instance) 566 void SetAddonStruct(KODI_HANDLE instance)
550 { 567 {
diff --git a/xbmc/addons/kodi-addon-dev-kit/include/kodi/addon-instance/PeripheralUtils.h b/xbmc/addons/kodi-addon-dev-kit/include/kodi/addon-instance/PeripheralUtils.h
index 8cfa91b..721da35 100644
--- a/xbmc/addons/kodi-addon-dev-kit/include/kodi/addon-instance/PeripheralUtils.h
+++ b/xbmc/addons/kodi-addon-dev-kit/include/kodi/addon-instance/PeripheralUtils.h
@@ -580,10 +580,14 @@ namespace addon
580 * 2) analog stick 580 * 2) analog stick
581 * 3) accelerometer 581 * 3) accelerometer
582 * 4) motor 582 * 4) motor
583 * 5) relative pointer[2]
583 * 584 *
584 * [1] All three driver primitives (buttons, hats and axes) have a state that 585 * [1] All three driver primitives (buttons, hats and axes) have a state that
585 * can be represented using a single scalar value. For this reason, 586 * can be represented using a single scalar value. For this reason,
586 * features that map to a single primitive are called "scalar features". 587 * features that map to a single primitive are called "scalar features".
588 *
589 * [2] Relative pointers are similar to analog sticks, but they use
590 * relative distances instead of positions.
587 */ 591 */
588 class JoystickFeature 592 class JoystickFeature
589 { 593 {
diff --git a/xbmc/addons/kodi-addon-dev-kit/include/kodi/versions.h b/xbmc/addons/kodi-addon-dev-kit/include/kodi/versions.h
index b9d37b4..870a646 100644
--- a/xbmc/addons/kodi-addon-dev-kit/include/kodi/versions.h
+++ b/xbmc/addons/kodi-addon-dev-kit/include/kodi/versions.h
@@ -107,14 +107,14 @@
107#define ADDON_INSTANCE_VERSION_INPUTSTREAM_XML_ID "kodi.binary.instance.inputstream" 107#define ADDON_INSTANCE_VERSION_INPUTSTREAM_XML_ID "kodi.binary.instance.inputstream"
108#define ADDON_INSTANCE_VERSION_INPUTSTREAM_DEPENDS "addon-instance/Inputstream.h" 108#define ADDON_INSTANCE_VERSION_INPUTSTREAM_DEPENDS "addon-instance/Inputstream.h"
109 109
110#define ADDON_INSTANCE_VERSION_PERIPHERAL "1.3.3" 110#define ADDON_INSTANCE_VERSION_PERIPHERAL "1.3.4"
111#define ADDON_INSTANCE_VERSION_PERIPHERAL_MIN "1.3.3" 111#define ADDON_INSTANCE_VERSION_PERIPHERAL_MIN "1.3.4"
112#define ADDON_INSTANCE_VERSION_PERIPHERAL_XML_ID "kodi.binary.instance.peripheral" 112#define ADDON_INSTANCE_VERSION_PERIPHERAL_XML_ID "kodi.binary.instance.peripheral"
113#define ADDON_INSTANCE_VERSION_PERIPHERAL_DEPENDS "addon-instance/Peripheral.h" \ 113#define ADDON_INSTANCE_VERSION_PERIPHERAL_DEPENDS "addon-instance/Peripheral.h" \
114 "addon-instance/PeripheralUtils.h" 114 "addon-instance/PeripheralUtils.h"
115 115
116#define ADDON_INSTANCE_VERSION_PVR "5.3.0" 116#define ADDON_INSTANCE_VERSION_PVR "5.6.0"
117#define ADDON_INSTANCE_VERSION_PVR_MIN "5.3.0" 117#define ADDON_INSTANCE_VERSION_PVR_MIN "5.6.0"
118#define ADDON_INSTANCE_VERSION_PVR_XML_ID "kodi.binary.instance.pvr" 118#define ADDON_INSTANCE_VERSION_PVR_XML_ID "kodi.binary.instance.pvr"
119#define ADDON_INSTANCE_VERSION_PVR_DEPENDS "xbmc_pvr_dll.h" \ 119#define ADDON_INSTANCE_VERSION_PVR_DEPENDS "xbmc_pvr_dll.h" \
120 "xbmc_pvr_types.h" \ 120 "xbmc_pvr_types.h" \
diff --git a/xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_epg_types.h b/xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_epg_types.h
index b6200bf..c2b5458 100644
--- a/xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_epg_types.h
+++ b/xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_epg_types.h
@@ -116,6 +116,7 @@ extern "C" {
116 int iEpisodePartNumber; /*!< @brief (optional) episode part number */ 116 int iEpisodePartNumber; /*!< @brief (optional) episode part number */
117 const char * strEpisodeName; /*!< @brief (optional) episode name */ 117 const char * strEpisodeName; /*!< @brief (optional) episode name */
118 unsigned int iFlags; /*!< @brief (optional) bit field of independent flags associated with the EPG entry */ 118 unsigned int iFlags; /*!< @brief (optional) bit field of independent flags associated with the EPG entry */
119 const char * strSeriesLink; /*!< @brief (optional) series link for this event */
119 } ATTRIBUTE_PACKED EPG_TAG; 120 } ATTRIBUTE_PACKED EPG_TAG;
120 121
121#ifdef __cplusplus 122#ifdef __cplusplus
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
index 11e39f8..3dbf1c8 100644
--- 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
@@ -410,14 +410,6 @@ extern "C"
410 long long LengthLiveStream(void); 410 long long LengthLiveStream(void);
411 411
412 /*! 412 /*!
413 * Switch to another channel. Only to be called when a live stream has already been opened.
414 * @param channel The channel to switch to.
415 * @return True if the switch was successful, false otherwise.
416 * @remarks Required if bHandlesInputStream or bHandlesDemuxing is set to true. Return false if this add-on won't provide this function.
417 */
418 bool SwitchChannel(const PVR_CHANNEL& channel);
419
420 /*!
421 * Get the signal status of the stream that's currently open. 413 * Get the signal status of the stream that's currently open.
422 * @param signalStatus The signal status. 414 * @param signalStatus The signal status.
423 * @return True if the signal status has been read successfully, false otherwise. 415 * @return True if the signal status has been read successfully, false otherwise.
@@ -434,12 +426,24 @@ extern "C"
434 PVR_ERROR GetDescrambleInfo(PVR_DESCRAMBLE_INFO* descrambleInfo); 426 PVR_ERROR GetDescrambleInfo(PVR_DESCRAMBLE_INFO* descrambleInfo);
435 427
436 /*! 428 /*!
437 * Get the stream URL for a channel from the backend. Used by the MediaPortal add-on. 429 * Get the stream properties for a channel from the backend.
438 * @param channel The channel to get the stream URL for. 430 * @param[in] channel The channel to get the stream properties for.
439 * @return The requested URL. 431 * @param[inout] properties in: an array for the properties to return, out: the properties required to play the stream.
440 * @remarks Optional, and only used if bHandlesInputStream is set to true. Return NULL if this add-on won't provide this function. 432 * @param[inout] iPropertiesCount: in the size of the properties array, out: the number of properties returned.
433 * @return PVR_ERROR_NO_ERROR if the stream is available.
434 * @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. In this case the implementation must fill the property PVR_STREAM_PROPERTY_STREAMURL with the URL Kodi should resolve to playback the channel. Return PVR_ERROR_NOT_IMPLEMENTED if this add-on won't provide this function.
435 */
436 PVR_ERROR GetChannelStreamProperties(const PVR_CHANNEL* channel, PVR_NAMED_VALUE* properties, unsigned int* iPropertiesCount);
437
438 /*!
439 * Get the stream properties for a recording from the backend.
440 * @param[in] channel The recording to get the stream properties for.
441 * @param[inout] properties in: an array for the properties to return, out: the properties required to play the stream.
442 * @param[inout] iPropertiesCount: in the size of the properties array, out: the number of properties returned.
443 * @return PVR_ERROR_NO_ERROR if the stream is available.
444 * @remarks Required if PVR_ADDON_CAPABILITIES::bSupportsRecordings is set to true and the add-on does not implement recording stream functions (OpenRecordedStream, ...). In this case your implementation must fill the property PVR_STREAM_PROPERTY_STREAMURL with the URL Kodi should resolve to playback the recording. Return PVR_ERROR_NOT_IMPLEMENTED if this add-on won't provide this function.
441 */ 445 */
442 const char* GetLiveStreamURL(const PVR_CHANNEL& channel); 446 PVR_ERROR GetRecordingStreamProperties(const PVR_RECORDING* recording, PVR_NAMED_VALUE* properties, unsigned int* iPropertiesCount);
443 447
444 /*! 448 /*!
445 * Get the stream properties of the stream that's currently being read. 449 * Get the stream properties of the stream that's currently being read.
@@ -537,14 +541,6 @@ extern "C"
537 //@} 541 //@}
538 542
539 /*! 543 /*!
540 * Delay to use when using switching channels for add-ons not providing an input stream.
541 * If the add-on does provide an input stream, then this method will not be called.
542 * Those add-ons can do that in OpenLiveStream() if needed.
543 * @return The delay in milliseconds.
544 */
545 unsigned int GetChannelSwitchDelay(void);
546
547 /*!
548 * Check if the backend support pausing the currently playing stream 544 * Check if the backend support pausing the currently playing stream
549 * This will enable/disable the pause button in XBMC based on the return value 545 * This will enable/disable the pause button in XBMC based on the return value
550 * @return false if the PVR addon/backend does not support pausing, true if possible 546 * @return false if the PVR addon/backend does not support pausing, true if possible
@@ -638,6 +634,11 @@ extern "C"
638 void OnPowerSavingDeactivated(); 634 void OnPowerSavingDeactivated();
639 635
640 /*! 636 /*!
637 * Get stream times. Intermediate, will be moved to inputstream
638 */
639 PVR_ERROR GetStreamTimes(PVR_STREAM_TIMES *times);
640
641 /*!
641 * Called by XBMC to assign the function pointers of this add-on to pClient. 642 * Called by XBMC to assign the function pointers of this add-on to pClient.
642 * @param ptr The struct to assign the function pointers to. 643 * @param ptr The struct to assign the function pointers to.
643 */ 644 */
@@ -695,11 +696,10 @@ extern "C"
695 pClient->toAddon.SeekLiveStream = SeekLiveStream; 696 pClient->toAddon.SeekLiveStream = SeekLiveStream;
696 pClient->toAddon.PositionLiveStream = PositionLiveStream; 697 pClient->toAddon.PositionLiveStream = PositionLiveStream;
697 pClient->toAddon.LengthLiveStream = LengthLiveStream; 698 pClient->toAddon.LengthLiveStream = LengthLiveStream;
698 pClient->toAddon.SwitchChannel = SwitchChannel;
699 pClient->toAddon.SignalStatus = SignalStatus; 699 pClient->toAddon.SignalStatus = SignalStatus;
700 pClient->toAddon.GetDescrambleInfo = GetDescrambleInfo; 700 pClient->toAddon.GetDescrambleInfo = GetDescrambleInfo;
701 pClient->toAddon.GetLiveStreamURL = GetLiveStreamURL; 701 pClient->toAddon.GetChannelStreamProperties = GetChannelStreamProperties;
702 pClient->toAddon.GetChannelSwitchDelay = GetChannelSwitchDelay; 702 pClient->toAddon.GetRecordingStreamProperties = GetRecordingStreamProperties;
703 pClient->toAddon.CanPauseStream = CanPauseStream; 703 pClient->toAddon.CanPauseStream = CanPauseStream;
704 pClient->toAddon.PauseStream = PauseStream; 704 pClient->toAddon.PauseStream = PauseStream;
705 pClient->toAddon.CanSeekStream = CanSeekStream; 705 pClient->toAddon.CanSeekStream = CanSeekStream;
@@ -733,6 +733,6 @@ extern "C"
733 pClient->toAddon.OnSystemWake = OnSystemWake; 733 pClient->toAddon.OnSystemWake = OnSystemWake;
734 pClient->toAddon.OnPowerSavingActivated = OnPowerSavingActivated; 734 pClient->toAddon.OnPowerSavingActivated = OnPowerSavingActivated;
735 pClient->toAddon.OnPowerSavingDeactivated = OnPowerSavingDeactivated; 735 pClient->toAddon.OnPowerSavingDeactivated = OnPowerSavingDeactivated;
736 pClient->toAddon.GetStreamTimes = GetStreamTimes;
736 }; 737 };
737}; 738};
738
diff --git a/xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_pvr_types.h b/xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_pvr_types.h
index e7fed7b..9a64f92 100644
--- a/xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_pvr_types.h
+++ b/xbmc/addons/kodi-addon-dev-kit/include/kodi/xbmc_pvr_types.h
@@ -77,6 +77,10 @@ struct DemuxPacket;
77#define XBMC_INVALID_CODEC_ID 0 77#define XBMC_INVALID_CODEC_ID 0
78#define XBMC_INVALID_CODEC { XBMC_CODEC_TYPE_UNKNOWN, XBMC_INVALID_CODEC_ID } 78#define XBMC_INVALID_CODEC { XBMC_CODEC_TYPE_UNKNOWN, XBMC_INVALID_CODEC_ID }
79 79
80/* defines for GetChannelStreamProperties and GetRecordingStreamProperties */
81#define PVR_STREAM_MAX_PROPERTIES 20
82#define PVR_STREAM_PROPERTY_STREAMURL "streamurl"
83
80/* using the default avformat's MAX_STREAMS value to be safe */ 84/* using the default avformat's MAX_STREAMS value to be safe */
81#define PVR_STREAM_MAX_STREAMS 20 85#define PVR_STREAM_MAX_STREAMS 20
82 86
@@ -155,10 +159,11 @@ extern "C" {
155 const unsigned int PVR_TIMER_TYPE_SUPPORTS_START_ANYTIME = 0x00040000; /*!< @brief enables an 'Any Time' over-ride option for startTime (using PVR_TIMER.bStartAnyTime) */ 159 const unsigned int PVR_TIMER_TYPE_SUPPORTS_START_ANYTIME = 0x00040000; /*!< @brief enables an 'Any Time' over-ride option for startTime (using PVR_TIMER.bStartAnyTime) */
156 const unsigned int PVR_TIMER_TYPE_SUPPORTS_END_ANYTIME = 0x00080000; /*!< @brief enables a separate 'Any Time' over-ride for endTime (using PVR_TIMER.bEndAnyTime) */ 160 const unsigned int PVR_TIMER_TYPE_SUPPORTS_END_ANYTIME = 0x00080000; /*!< @brief enables a separate 'Any Time' over-ride for endTime (using PVR_TIMER.bEndAnyTime) */
157 const unsigned int PVR_TIMER_TYPE_SUPPORTS_MAX_RECORDINGS = 0x00100000; /*!< @brief this type supports specifying a maximum recordings setting' (PVR_TIMER.iMaxRecordings) */ 161 const unsigned int PVR_TIMER_TYPE_SUPPORTS_MAX_RECORDINGS = 0x00100000; /*!< @brief this type supports specifying a maximum recordings setting' (PVR_TIMER.iMaxRecordings) */
158 const unsigned int PVR_TIMER_TYPE_REQUIRES_EPG_TAG_ON_CREATE = 0x00200000; /*!< @brief this type shold not appear on any create menus which don't provide an associated EPG tag */ 162 const unsigned int PVR_TIMER_TYPE_REQUIRES_EPG_TAG_ON_CREATE = 0x00200000; /*!< @brief this type should not appear on any create menus which don't provide an associated EPG tag */
159 const unsigned int PVR_TIMER_TYPE_FORBIDS_EPG_TAG_ON_CREATE = 0x00400000; /*!< @brief this type should not appear on any create menus which provide an associated EPG tag */ 163 const unsigned int PVR_TIMER_TYPE_FORBIDS_EPG_TAG_ON_CREATE = 0x00400000; /*!< @brief this type should not appear on any create menus which provide an associated EPG tag */
160 const unsigned int PVR_TIMER_TYPE_REQUIRES_EPG_SERIES_ON_CREATE = 0x00800000; /*!< @brief this type should not appear on any create menus unless associated with an EPG tag with 'series' attributes (EPG_TAG.iFlags & EPG_TAG_FLAG_IS_SERIES || EPG_TAG.iSeriesNumber > 0 || EPG_TAG.iEpisodeNumber > 0 || EPG_TAG.iEpisodePartNumber > 0). Implies PVR_TIMER_TYPE_REQUIRES_EPG_TAG_ON_CREATE */ 164 const unsigned int PVR_TIMER_TYPE_REQUIRES_EPG_SERIES_ON_CREATE = 0x00800000; /*!< @brief this type should not appear on any create menus unless associated with an EPG tag with 'series' attributes (EPG_TAG.iFlags & EPG_TAG_FLAG_IS_SERIES || EPG_TAG.iSeriesNumber > 0 || EPG_TAG.iEpisodeNumber > 0 || EPG_TAG.iEpisodePartNumber > 0). Implies PVR_TIMER_TYPE_REQUIRES_EPG_TAG_ON_CREATE */
161 const unsigned int PVR_TIMER_TYPE_SUPPORTS_ANY_CHANNEL = 0x01000000; /*!< @brief this type supports 'any channel', for example when defining a timer rule that should match any channel instaed of a particular channel */ 165 const unsigned int PVR_TIMER_TYPE_SUPPORTS_ANY_CHANNEL = 0x01000000; /*!< @brief this type supports 'any channel', for example when defining a timer rule that should match any channel instaed of a particular channel */
166 const unsigned int PVR_TIMER_TYPE_REQUIRES_EPG_SERIESLINK_ON_CREATE = 0x02000000; /*!< @brief this type should not appear on any create menus which don't provide an associated EPG tag with a series link */
162 167
163 /*! 168 /*!
164 * @brief PVR timer weekdays (PVR_TIMER.iWeekdays values) 169 * @brief PVR timer weekdays (PVR_TIMER.iWeekdays values)
@@ -265,6 +270,14 @@ extern "C" {
265 } PVR_RECORDING_CHANNEL_TYPE; 270 } PVR_RECORDING_CHANNEL_TYPE;
266 271
267 /*! 272 /*!
273 * @brief Representation of a named value
274 */
275 typedef struct PVR_NAMED_VALUE {
276 char strName[PVR_ADDON_NAME_STRING_LENGTH]; /*!< @brief (required) name */
277 char strValue[PVR_ADDON_NAME_STRING_LENGTH]; /*!< @brief (required) value */
278 } ATTRIBUTE_PACKED PVR_NAMED_VALUE;
279
280 /*!
268 * @brief Properties passed to the Create() method of an add-on. 281 * @brief Properties passed to the Create() method of an add-on.
269 */ 282 */
270 typedef struct PVR_PROPERTIES 283 typedef struct PVR_PROPERTIES
@@ -334,8 +347,8 @@ extern "C" {
334 int iBlockAlign; /*!< @brief (required) block alignment */ 347 int iBlockAlign; /*!< @brief (required) block alignment */
335 int iBitRate; /*!< @brief (required) bit rate */ 348 int iBitRate; /*!< @brief (required) bit rate */
336 int iBitsPerSample; /*!< @brief (required) bits per sample */ 349 int iBitsPerSample; /*!< @brief (required) bits per sample */
337 } stream[PVR_STREAM_MAX_STREAMS]; /*!< @brief (required) the streams */ 350 } stream[PVR_STREAM_MAX_STREAMS]; /*!< @brief (required) the streams */
338 } ATTRIBUTE_PACKED PVR_STREAM_PROPERTIES; 351 } ATTRIBUTE_PACKED PVR_STREAM_PROPERTIES;
339 352
340 /*! 353 /*!
341 * @brief Signal status information 354 * @brief Signal status information
@@ -392,9 +405,6 @@ extern "C" {
392 char strChannelName[PVR_ADDON_NAME_STRING_LENGTH]; /*!< @brief (optional) channel name given to this channel */ 405 char strChannelName[PVR_ADDON_NAME_STRING_LENGTH]; /*!< @brief (optional) channel name given to this channel */
393 char strInputFormat[PVR_ADDON_INPUT_FORMAT_STRING_LENGTH]; /*!< @brief (optional) input format type. types can be found in ffmpeg/libavformat/allformats.c 406 char strInputFormat[PVR_ADDON_INPUT_FORMAT_STRING_LENGTH]; /*!< @brief (optional) input format type. types can be found in ffmpeg/libavformat/allformats.c
394 leave empty if unknown */ 407 leave empty if unknown */
395 char strStreamURL[PVR_ADDON_URL_STRING_LENGTH]; /*!< @brief (optional) the URL to use to access this channel.
396 leave empty to use this add-on to access the stream.
397 set to a path that's supported by XBMC otherwise. */
398 unsigned int iEncryptionSystem; /*!< @brief (optional) the encryption ID or CaID of this channel */ 408 unsigned int iEncryptionSystem; /*!< @brief (optional) the encryption ID or CaID of this channel */
399 char strIconPath[PVR_ADDON_URL_STRING_LENGTH]; /*!< @brief (optional) path to the channel icon (if present) */ 409 char strIconPath[PVR_ADDON_URL_STRING_LENGTH]; /*!< @brief (optional) path to the channel icon (if present) */
400 bool bIsHidden; /*!< @brief (optional) true if this channel is marked as hidden */ 410 bool bIsHidden; /*!< @brief (optional) true if this channel is marked as hidden */
@@ -508,6 +518,8 @@ extern "C" {
508 unsigned int iMarginEnd; /*!< @brief (optional) if set, the backend ends the recording iMarginEnd minutes after endTime. */ 518 unsigned int iMarginEnd; /*!< @brief (optional) if set, the backend ends the recording iMarginEnd minutes after endTime. */
509 int iGenreType; /*!< @brief (optional) genre type */ 519 int iGenreType; /*!< @brief (optional) genre type */
510 int iGenreSubType; /*!< @brief (optional) genre sub type */ 520 int iGenreSubType; /*!< @brief (optional) genre sub type */
521 char strSeriesLink[PVR_ADDON_URL_STRING_LENGTH]; /*!< @brief (optional) series link for this timer. If set for an epg-based timer rule, matching events will be found by checking strSeriesLink instead of strTitle (and bFullTextEpgSearch) */
522
511 } ATTRIBUTE_PACKED PVR_TIMER; 523 } ATTRIBUTE_PACKED PVR_TIMER;
512 524
513 /*! 525 /*!
@@ -520,7 +532,6 @@ extern "C" {
520 int iSeriesNumber; /*!< @brief (optional) series number (usually called season). Set to "0" for specials/pilot. For 'invalid' see iEpisodeNumber or set to -1 */ 532 int iSeriesNumber; /*!< @brief (optional) series number (usually called season). Set to "0" for specials/pilot. For 'invalid' see iEpisodeNumber or set to -1 */
521 int iEpisodeNumber; /*!< @brief (optional) episode number within the "iSeriesNumber" season. For 'invalid' set to -1 or iSeriesNumber=iEpisodeNumber=0 to show both are invalid */ 533 int iEpisodeNumber; /*!< @brief (optional) episode number within the "iSeriesNumber" season. For 'invalid' set to -1 or iSeriesNumber=iEpisodeNumber=0 to show both are invalid */
522 int iYear; /*!< @brief (optional) year of first release (use to identify a specific movie re-make) / first airing for TV shows. Set to '0' for invalid. */ 534 int iYear; /*!< @brief (optional) year of first release (use to identify a specific movie re-make) / first airing for TV shows. Set to '0' for invalid. */
523 char strStreamURL[PVR_ADDON_URL_STRING_LENGTH]; /*!< @brief (required) stream URL to access this recording */
524 char strDirectory[PVR_ADDON_URL_STRING_LENGTH]; /*!< @brief (optional) directory of this recording on the client */ 535 char strDirectory[PVR_ADDON_URL_STRING_LENGTH]; /*!< @brief (optional) directory of this recording on the client */
525 char strPlotOutline[PVR_ADDON_DESC_STRING_LENGTH]; /*!< @brief (optional) plot outline */ 536 char strPlotOutline[PVR_ADDON_DESC_STRING_LENGTH]; /*!< @brief (optional) plot outline */
526 char strPlot[PVR_ADDON_DESC_STRING_LENGTH]; /*!< @brief (optional) plot */ 537 char strPlot[PVR_ADDON_DESC_STRING_LENGTH]; /*!< @brief (optional) plot */
@@ -575,6 +586,17 @@ extern "C" {
575 } data; 586 } data;
576 } ATTRIBUTE_PACKED PVR_MENUHOOK_DATA; 587 } ATTRIBUTE_PACKED PVR_MENUHOOK_DATA;
577 588
589 /*!
590 * @brief times of playing stream
591 */
592 typedef struct PVR_STREAM_TIMES
593 {
594 time_t startTime; /*!< @brief time (UTC) time elapsed refers to. Ideally start of tv show */
595 int64_t ptsStart; /*!< @brief pts of startTime */
596 int64_t ptsBegin; /*!< @brief erliest pts player can seek back */
597 int64_t ptsEnd; /*!< @brief latest pts player can seek forward */
598 } ATTRIBUTE_PACKED PVR_STREAM_TIMES;
599
578 typedef struct AddonToKodiFuncTable_PVR 600 typedef struct AddonToKodiFuncTable_PVR
579 { 601 {
580 KODI_HANDLE kodiInstance; 602 KODI_HANDLE kodiInstance;
@@ -596,7 +618,7 @@ extern "C" {
596 618
597 void (*FreeDemuxPacket)(void* kodiInstance, DemuxPacket* pPacket); 619 void (*FreeDemuxPacket)(void* kodiInstance, DemuxPacket* pPacket);
598 DemuxPacket* (*AllocateDemuxPacket)(void* kodiInstance, int iDataSize); 620 DemuxPacket* (*AllocateDemuxPacket)(void* kodiInstance, int iDataSize);
599 621
600 void (*ConnectionStateChange)(void* kodiInstance, const char* strConnectionString, PVR_CONNECTION_STATE newState, const char *strMessage); 622 void (*ConnectionStateChange)(void* kodiInstance, const char* strConnectionString, PVR_CONNECTION_STATE newState, const char *strMessage);
601 void (*EpgEventStateChange)(void* kodiInstance, EPG_TAG* tag, unsigned int iUniqueChannelId, EPG_EVENT_STATE newState); 623 void (*EpgEventStateChange)(void* kodiInstance, EPG_TAG* tag, unsigned int iUniqueChannelId, EPG_EVENT_STATE newState);
602 624
@@ -652,10 +674,10 @@ extern "C" {
652 long long (__cdecl* SeekLiveStream)(long long, int); 674 long long (__cdecl* SeekLiveStream)(long long, int);
653 long long (__cdecl* PositionLiveStream)(void); 675 long long (__cdecl* PositionLiveStream)(void);
654 long long (__cdecl* LengthLiveStream)(void); 676 long long (__cdecl* LengthLiveStream)(void);
655 bool (__cdecl* SwitchChannel)(const PVR_CHANNEL&);
656 PVR_ERROR (__cdecl* SignalStatus)(PVR_SIGNAL_STATUS&); 677 PVR_ERROR (__cdecl* SignalStatus)(PVR_SIGNAL_STATUS&);
657 PVR_ERROR (__cdecl* GetDescrambleInfo)(PVR_DESCRAMBLE_INFO*); 678 PVR_ERROR (__cdecl* GetDescrambleInfo)(PVR_DESCRAMBLE_INFO*);
658 const char* (__cdecl* GetLiveStreamURL)(const PVR_CHANNEL&); 679 PVR_ERROR (__cdecl* GetChannelStreamProperties)(const PVR_CHANNEL*, PVR_NAMED_VALUE*, unsigned int*);
680 PVR_ERROR (__cdecl* GetRecordingStreamProperties)(const PVR_RECORDING*, PVR_NAMED_VALUE*, unsigned int*);
659 bool (__cdecl* OpenRecordedStream)(const PVR_RECORDING&); 681 bool (__cdecl* OpenRecordedStream)(const PVR_RECORDING&);
660 void (__cdecl* CloseRecordedStream)(void); 682 void (__cdecl* CloseRecordedStream)(void);
661 int (__cdecl* ReadRecordedStream)(unsigned char*, unsigned int); 683 int (__cdecl* ReadRecordedStream)(unsigned char*, unsigned int);
@@ -666,7 +688,6 @@ extern "C" {
666 void (__cdecl* DemuxAbort)(void); 688 void (__cdecl* DemuxAbort)(void);
667 void (__cdecl* DemuxFlush)(void); 689 void (__cdecl* DemuxFlush)(void);
668 DemuxPacket* (__cdecl* DemuxRead)(void); 690 DemuxPacket* (__cdecl* DemuxRead)(void);
669 unsigned int (__cdecl* GetChannelSwitchDelay)(void);
670 bool (__cdecl* CanPauseStream)(void); 691 bool (__cdecl* CanPauseStream)(void);
671 void (__cdecl* PauseStream)(bool); 692 void (__cdecl* PauseStream)(bool);
672 bool (__cdecl* CanSeekStream)(void); 693 bool (__cdecl* CanSeekStream)(void);
@@ -683,6 +704,7 @@ extern "C" {
683 void (__cdecl* OnSystemWake)(void); 704 void (__cdecl* OnSystemWake)(void);
684 void (__cdecl* OnPowerSavingActivated)(void); 705 void (__cdecl* OnPowerSavingActivated)(void);
685 void (__cdecl* OnPowerSavingDeactivated)(void); 706 void (__cdecl* OnPowerSavingDeactivated)(void);
707 PVR_ERROR (__cdecl* GetStreamTimes)(PVR_STREAM_TIMES*);
686 } KodiToAddonFuncTable_PVR; 708 } KodiToAddonFuncTable_PVR;
687 709
688 typedef struct AddonInstance_PVR 710 typedef struct AddonInstance_PVR
@@ -695,4 +717,3 @@ extern "C" {
695#ifdef __cplusplus 717#ifdef __cplusplus
696} 718}
697#endif 719#endif
698