diff options
Diffstat (limited to 'xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon-instance/inputstream.h')
| -rw-r--r-- | xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon-instance/inputstream.h | 703 |
1 files changed, 703 insertions, 0 deletions
diff --git a/xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon-instance/inputstream.h b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon-instance/inputstream.h new file mode 100644 index 0000000..1b3a735 --- /dev/null +++ b/xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon-instance/inputstream.h | |||
| @@ -0,0 +1,703 @@ | |||
| 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 | #ifndef C_API_ADDONINSTANCE_INPUTSTREAM_H | ||
| 10 | #define C_API_ADDONINSTANCE_INPUTSTREAM_H | ||
| 11 | |||
| 12 | #include "../addon_base.h" | ||
| 13 | #include "inputstream/demux_packet.h" | ||
| 14 | #include "inputstream/stream_codec.h" | ||
| 15 | #include "inputstream/stream_constants.h" | ||
| 16 | #include "inputstream/stream_crypto.h" | ||
| 17 | #include "inputstream/timing_constants.h" | ||
| 18 | |||
| 19 | #include <time.h> | ||
| 20 | |||
| 21 | // Increment this level always if you add features which can lead to compile failures in the addon | ||
| 22 | #define INPUTSTREAM_VERSION_LEVEL 4 | ||
| 23 | |||
| 24 | #define INPUTSTREAM_MAX_INFO_COUNT 8 | ||
| 25 | #define INPUTSTREAM_MAX_STREAM_COUNT 256 | ||
| 26 | #define INPUTSTREAM_MAX_STRING_NAME_SIZE 256 | ||
| 27 | #define INPUTSTREAM_MAX_STRING_CODEC_SIZE 32 | ||
| 28 | #define INPUTSTREAM_MAX_STRING_LANGUAGE_SIZE 64 | ||
| 29 | |||
| 30 | #ifdef __cplusplus | ||
| 31 | extern "C" | ||
| 32 | { | ||
| 33 | #endif /* __cplusplus */ | ||
| 34 | |||
| 35 | //============================================================================== | ||
| 36 | /// @ingroup cpp_kodi_addon_inputstream_Defs_Interface_InputstreamCapabilities | ||
| 37 | /// @brief **Capability types of inputstream addon.**\n | ||
| 38 | /// This values are needed to tell Kodi which options are supported on the addon. | ||
| 39 | /// | ||
| 40 | /// If one of this is defined, then the corresponding methods from | ||
| 41 | /// @ref cpp_kodi_addon_inputstream "kodi::addon::CInstanceInputStream" need | ||
| 42 | /// to be implemented. | ||
| 43 | /// | ||
| 44 | /// Used on @ref kodi::addon::CInstanceInputStream::GetCapabilities(). | ||
| 45 | /// | ||
| 46 | ///@{ | ||
| 47 | enum INPUTSTREAM_MASKTYPE | ||
| 48 | { | ||
| 49 | /// @brief **0000 0000 0000 0001 :** Supports interface demuxing. | ||
| 50 | /// | ||
| 51 | /// If set must be @ref cpp_kodi_addon_inputstream_Demux "Demux support" included. | ||
| 52 | INPUTSTREAM_SUPPORTS_IDEMUX = (1 << 0), | ||
| 53 | |||
| 54 | /// @brief **0000 0000 0000 0010 :** Supports interface position time. | ||
| 55 | /// | ||
| 56 | /// This means that the start time and the current stream time are used. | ||
| 57 | /// | ||
| 58 | /// If set must be @ref cpp_kodi_addon_inputstream_Time "Time support" included. | ||
| 59 | INPUTSTREAM_SUPPORTS_IPOSTIME = (1 << 1), | ||
| 60 | |||
| 61 | /// @brief **0000 0000 0000 0100 :** Supports interface for display time. | ||
| 62 | /// | ||
| 63 | /// This will call up the complete stream time information. The start time | ||
| 64 | /// and the individual PTS times are then given using @ref cpp_kodi_addon_inputstream_Defs_Times. | ||
| 65 | /// | ||
| 66 | /// If set must be @ref cpp_kodi_addon_inputstream_Times "Times support" included. | ||
| 67 | INPUTSTREAM_SUPPORTS_IDISPLAYTIME = (1 << 2), | ||
| 68 | |||
| 69 | /// @brief **0000 0000 0000 1000 :** Supports seek | ||
| 70 | INPUTSTREAM_SUPPORTS_SEEK = (1 << 3), | ||
| 71 | |||
| 72 | /// @brief **0000 0000 0001 0000 :** Supports pause | ||
| 73 | INPUTSTREAM_SUPPORTS_PAUSE = (1 << 4), | ||
| 74 | |||
| 75 | /// @brief **0000 0000 0010 0000 :** Supports interface to give position time. | ||
| 76 | /// | ||
| 77 | /// This will only ask for the current time of the stream, not for length or | ||
| 78 | /// start. | ||
| 79 | /// | ||
| 80 | /// If set must be @ref cpp_kodi_addon_inputstream_PosTime "Position time support" included. | ||
| 81 | INPUTSTREAM_SUPPORTS_ITIME = (1 << 5), | ||
| 82 | |||
| 83 | /// @brief **0000 0000 0100 0000 :** Supports interface for chapter selection. | ||
| 84 | /// | ||
| 85 | /// If set must be @ref cpp_kodi_addon_inputstream_Chapter "Chapter support" included. | ||
| 86 | INPUTSTREAM_SUPPORTS_ICHAPTER = (1 << 6), | ||
| 87 | }; | ||
| 88 | ///@} | ||
| 89 | //---------------------------------------------------------------------------- | ||
| 90 | |||
| 91 | /*! | ||
| 92 | * @brief InputStream add-on capabilities. All capabilities are set to "false" as default. | ||
| 93 | */ | ||
| 94 | struct INPUTSTREAM_CAPABILITIES | ||
| 95 | { | ||
| 96 | /// set of supported capabilities | ||
| 97 | uint32_t m_mask; | ||
| 98 | }; | ||
| 99 | |||
| 100 | /*! | ||
| 101 | * @brief structure of key/value pairs passed to addon on Open() | ||
| 102 | */ | ||
| 103 | struct INPUTSTREAM_PROPERTY | ||
| 104 | { | ||
| 105 | const char* m_strURL; | ||
| 106 | const char* m_mimeType; | ||
| 107 | |||
| 108 | unsigned int m_nCountInfoValues; | ||
| 109 | struct LISTITEMPROPERTY | ||
| 110 | { | ||
| 111 | const char* m_strKey; | ||
| 112 | const char* m_strValue; | ||
| 113 | } m_ListItemProperties[STREAM_MAX_PROPERTY_COUNT]; | ||
| 114 | |||
| 115 | const char* m_libFolder; | ||
| 116 | const char* m_profileFolder; | ||
| 117 | }; | ||
| 118 | |||
| 119 | /*! | ||
| 120 | * @brief Array of stream IDs | ||
| 121 | */ | ||
| 122 | struct INPUTSTREAM_IDS | ||
| 123 | { | ||
| 124 | unsigned int m_streamCount; | ||
| 125 | unsigned int m_streamIds[INPUTSTREAM_MAX_STREAM_COUNT]; | ||
| 126 | }; | ||
| 127 | |||
| 128 | /*! | ||
| 129 | * @brief MASTERING Metadata | ||
| 130 | */ | ||
| 131 | struct INPUTSTREAM_MASTERING_METADATA | ||
| 132 | { | ||
| 133 | double primary_r_chromaticity_x; | ||
| 134 | double primary_r_chromaticity_y; | ||
| 135 | double primary_g_chromaticity_x; | ||
| 136 | double primary_g_chromaticity_y; | ||
| 137 | double primary_b_chromaticity_x; | ||
| 138 | double primary_b_chromaticity_y; | ||
| 139 | double white_point_chromaticity_x; | ||
| 140 | double white_point_chromaticity_y; | ||
| 141 | double luminance_max; | ||
| 142 | double luminance_min; | ||
| 143 | }; | ||
| 144 | |||
| 145 | /*! | ||
| 146 | * @brief CONTENTLIGHT Metadata | ||
| 147 | */ | ||
| 148 | struct INPUTSTREAM_CONTENTLIGHT_METADATA | ||
| 149 | { | ||
| 150 | uint64_t max_cll; | ||
| 151 | uint64_t max_fall; | ||
| 152 | }; | ||
| 153 | |||
| 154 | //============================================================================== | ||
| 155 | /// @defgroup cpp_kodi_addon_inputstream_Defs_Interface_INPUTSTREAM_TYPE enum INPUTSTREAM_TYPE | ||
| 156 | /// @ingroup cpp_kodi_addon_inputstream_Defs_Interface | ||
| 157 | /// @brief **Inputstream types**\n | ||
| 158 | /// To identify type on stream. | ||
| 159 | /// | ||
| 160 | /// Used on @ref kodi::addon::InputstreamInfo::SetStreamType and @ref kodi::addon::InputstreamInfo::GetStreamType. | ||
| 161 | /// | ||
| 162 | ///@{ | ||
| 163 | enum INPUTSTREAM_TYPE | ||
| 164 | { | ||
| 165 | /// @brief **0 :** To set nothing defined | ||
| 166 | INPUTSTREAM_TYPE_NONE = 0, | ||
| 167 | |||
| 168 | /// @brief **1 :** To identify @ref cpp_kodi_addon_inputstream_Defs_Info as Video | ||
| 169 | INPUTSTREAM_TYPE_VIDEO, | ||
| 170 | |||
| 171 | /// @brief **2 :** To identify @ref cpp_kodi_addon_inputstream_Defs_Info as Audio | ||
| 172 | INPUTSTREAM_TYPE_AUDIO, | ||
| 173 | |||
| 174 | /// @brief **3 :** To identify @ref cpp_kodi_addon_inputstream_Defs_Info as Subtitle | ||
| 175 | INPUTSTREAM_TYPE_SUBTITLE, | ||
| 176 | |||
| 177 | /// @brief **4 :** To identify @ref cpp_kodi_addon_inputstream_Defs_Info as Teletext | ||
| 178 | INPUTSTREAM_TYPE_TELETEXT, | ||
| 179 | |||
| 180 | /// @brief **5 :** To identify @ref cpp_kodi_addon_inputstream_Defs_Info as Radio RDS | ||
| 181 | INPUTSTREAM_TYPE_RDS, | ||
| 182 | }; | ||
| 183 | ///@} | ||
| 184 | //------------------------------------------------------------------------------ | ||
| 185 | |||
| 186 | //============================================================================== | ||
| 187 | /// @defgroup cpp_kodi_addon_inputstream_Defs_Interface_INPUTSTREAM_CODEC_FEATURES enum INPUTSTREAM_CODEC_FEATURES | ||
| 188 | /// @ingroup cpp_kodi_addon_inputstream_Defs_Interface | ||
| 189 | /// @brief **Inputstream codec features**\n | ||
| 190 | /// To identify special extra features used for optional codec on inputstream. | ||
| 191 | /// | ||
| 192 | /// Used on @ref kodi::addon::InputstreamInfo::SetFeatures and @ref kodi::addon::InputstreamInfo::GetFeatures. | ||
| 193 | /// | ||
| 194 | /// @note These variables are bit flags which are created using "|" can be used together. | ||
| 195 | /// | ||
| 196 | ///@{ | ||
| 197 | enum INPUTSTREAM_CODEC_FEATURES | ||
| 198 | { | ||
| 199 | /// @brief **0000 0000 0000 0000 :** Empty to set if nothing is used | ||
| 200 | INPUTSTREAM_FEATURE_NONE = 0, | ||
| 201 | |||
| 202 | /// @brief **0000 0000 0000 0001 :** To set addon decode should used with @ref cpp_kodi_addon_videocodec. | ||
| 203 | INPUTSTREAM_FEATURE_DECODE = (1 << 0) | ||
| 204 | }; | ||
| 205 | ///@} | ||
| 206 | //---------------------------------------------------------------------------- | ||
| 207 | |||
| 208 | //============================================================================ | ||
| 209 | /// @defgroup cpp_kodi_addon_inputstream_Defs_Interface_INPUTSTREAM_FLAGS enum INPUTSTREAM_FLAGS | ||
| 210 | /// @ingroup cpp_kodi_addon_inputstream_Defs_Interface | ||
| 211 | /// @brief **Inputstream flags**\n | ||
| 212 | /// To identify extra stream flags used on inputstream. | ||
| 213 | /// | ||
| 214 | /// Used on @ref kodi::addon::InputstreamInfo::SetFlags and @ref kodi::addon::InputstreamInfo::GetFlags. | ||
| 215 | /// | ||
| 216 | /// @note These variables are bit flags which are created using "|" can be used together. | ||
| 217 | /// | ||
| 218 | ///@{ | ||
| 219 | enum INPUTSTREAM_FLAGS | ||
| 220 | { | ||
| 221 | /// @brief **0000 0000 0000 0000 :** Empty to set if nothing is used | ||
| 222 | INPUTSTREAM_FLAG_NONE = 0, | ||
| 223 | |||
| 224 | /// @brief **0000 0000 0000 0001 :** Default | ||
| 225 | INPUTSTREAM_FLAG_DEFAULT = (1 << 0), | ||
| 226 | |||
| 227 | /// @brief **0000 0000 0000 0010 :** Dub | ||
| 228 | INPUTSTREAM_FLAG_DUB = (1 << 1), | ||
| 229 | |||
| 230 | /// @brief **0000 0000 0000 0100 :** Original | ||
| 231 | INPUTSTREAM_FLAG_ORIGINAL = (1 << 2), | ||
| 232 | |||
| 233 | /// @brief **0000 0000 0000 1000 :** Comment | ||
| 234 | INPUTSTREAM_FLAG_COMMENT = (1 << 3), | ||
| 235 | |||
| 236 | /// @brief **0000 0000 0001 0000 :** Lyrics | ||
| 237 | INPUTSTREAM_FLAG_LYRICS = (1 << 4), | ||
| 238 | |||
| 239 | /// @brief **0000 0000 0010 0000 :** Karaoke | ||
| 240 | INPUTSTREAM_FLAG_KARAOKE = (1 << 5), | ||
| 241 | |||
| 242 | /// @brief **0000 0000 0100 0000 :** Forced | ||
| 243 | INPUTSTREAM_FLAG_FORCED = (1 << 6), | ||
| 244 | |||
| 245 | /// @brief **0000 0000 1000 0000 :** Hearing impaired | ||
| 246 | INPUTSTREAM_FLAG_HEARING_IMPAIRED = (1 << 7), | ||
| 247 | |||
| 248 | /// @brief **0000 0001 0000 0000 :** Visual impaired | ||
| 249 | INPUTSTREAM_FLAG_VISUAL_IMPAIRED = (1 << 8), | ||
| 250 | }; | ||
| 251 | ///@} | ||
| 252 | //---------------------------------------------------------------------------- | ||
| 253 | |||
| 254 | // Keep in sync with AVColorSpace | ||
| 255 | //============================================================================ | ||
| 256 | /// @defgroup cpp_kodi_addon_inputstream_Defs_Interface_INPUTSTREAM_COLORSPACE enum INPUTSTREAM_COLORSPACE | ||
| 257 | /// @ingroup cpp_kodi_addon_inputstream_Defs_Interface | ||
| 258 | /// @brief **Inputstream color space flags**\n | ||
| 259 | /// YUV colorspace type. These values match the ones defined by ISO/IEC 23001-8_2013 § 7.3. | ||
| 260 | /// | ||
| 261 | /// Used on @ref kodi::addon::InputstreamInfo::SetColorSpace and @ref kodi::addon::InputstreamInfo::GetColorSpace. | ||
| 262 | /// | ||
| 263 | ///@{ | ||
| 264 | enum INPUTSTREAM_COLORSPACE | ||
| 265 | { | ||
| 266 | /// @brief **0 :** Order of coefficients is actually GBR, also IEC 61966-2-1 (sRGB) | ||
| 267 | INPUTSTREAM_COLORSPACE_RGB = 0, | ||
| 268 | |||
| 269 | /// @brief **1 :** Also ITU-R BT1361 / IEC 61966-2-4 xvYCC709 / SMPTE RP177 Annex B | ||
| 270 | INPUTSTREAM_COLORSPACE_BT709 = 1, | ||
| 271 | |||
| 272 | /// @brief **2 :** To set stream is unspecified | ||
| 273 | INPUTSTREAM_COLORSPACE_UNSPECIFIED = 2, | ||
| 274 | |||
| 275 | /// @brief **2 :** To set stream is unkown | ||
| 276 | /// @note Same as @ref INPUTSTREAM_COLORSPACE_UNSPECIFIED | ||
| 277 | INPUTSTREAM_COLORSPACE_UNKNOWN = INPUTSTREAM_COLORSPACE_UNSPECIFIED, // compatibility | ||
| 278 | |||
| 279 | /// @brief **3 :** To set colorspace reserved | ||
| 280 | INPUTSTREAM_COLORSPACE_RESERVED = 3, | ||
| 281 | |||
| 282 | /// @brief **4 :** FCC Title 47 Code of Federal Regulations 73.682 (a)(20) | ||
| 283 | INPUTSTREAM_COLORSPACE_FCC = 4, | ||
| 284 | |||
| 285 | /// @brief **5 :** Also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM / IEC 61966-2-4 xvYCC601 | ||
| 286 | INPUTSTREAM_COLORSPACE_BT470BG = 5, | ||
| 287 | |||
| 288 | /// @brief **6 :** Also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC | ||
| 289 | INPUTSTREAM_COLORSPACE_SMPTE170M = 6, | ||
| 290 | |||
| 291 | /// @brief **7 :** Functionally identical to above @ref INPUTSTREAM_COLORSPACE_SMPTE170M | ||
| 292 | INPUTSTREAM_COLORSPACE_SMPTE240M = 7, | ||
| 293 | |||
| 294 | /// @brief **8 :** Used by Dirac / VC-2 and H.264 FRext, see ITU-T SG16 | ||
| 295 | INPUTSTREAM_COLORSPACE_YCGCO = 8, | ||
| 296 | |||
| 297 | /// @brief **8 :** To set colorspace as YCOCG | ||
| 298 | /// @note Same as @ref INPUTSTREAM_COLORSPACE_YCGCO | ||
| 299 | INPUTSTREAM_COLORSPACE_YCOCG = INPUTSTREAM_COLORSPACE_YCGCO, | ||
| 300 | |||
| 301 | /// @brief **9 :** ITU-R BT2020 non-constant luminance system | ||
| 302 | INPUTSTREAM_COLORSPACE_BT2020_NCL = 9, | ||
| 303 | |||
| 304 | /// @brief **10 :** ITU-R BT2020 constant luminance system | ||
| 305 | INPUTSTREAM_COLORSPACE_BT2020_CL = 10, | ||
| 306 | |||
| 307 | /// @brief **11 :** SMPTE 2085, Y'D'zD'x | ||
| 308 | INPUTSTREAM_COLORSPACE_SMPTE2085 = 11, | ||
| 309 | |||
| 310 | /// @brief **12 :** Chromaticity-derived non-constant luminance system | ||
| 311 | INPUTSTREAM_COLORSPACE_CHROMA_DERIVED_NCL = 12, | ||
| 312 | |||
| 313 | /// @brief **13 :** Chromaticity-derived constant luminance system | ||
| 314 | INPUTSTREAM_COLORSPACE_CHROMA_DERIVED_CL = 13, | ||
| 315 | |||
| 316 | /// @brief **14 :** ITU-R BT.2100-0, ICtCp | ||
| 317 | INPUTSTREAM_COLORSPACE_ICTCP = 14, | ||
| 318 | |||
| 319 | /// @brief The maximum value to use in a list. | ||
| 320 | INPUTSTREAM_COLORSPACE_MAX | ||
| 321 | }; | ||
| 322 | ///@} | ||
| 323 | //------------------------------------------------------------------------------ | ||
| 324 | |||
| 325 | // Keep in sync with AVColorPrimaries | ||
| 326 | //============================================================================== | ||
| 327 | /// @defgroup cpp_kodi_addon_inputstream_Defs_Interface_INPUTSTREAM_COLORPRIMARIES enum INPUTSTREAM_COLORPRIMARIES | ||
| 328 | /// @ingroup cpp_kodi_addon_inputstream_Defs_Interface | ||
| 329 | /// @brief **Inputstream color primaries flags**\n | ||
| 330 | /// Chromaticity coordinates of the source primaries. These values match the ones defined by ISO/IEC 23001-8_2013 § 7.1. | ||
| 331 | /// | ||
| 332 | /// Used on @ref kodi::addon::InputstreamInfo::SetColorPrimaries and @ref kodi::addon::InputstreamInfo::GetColorPrimaries. | ||
| 333 | /// | ||
| 334 | ///@{ | ||
| 335 | enum INPUTSTREAM_COLORPRIMARIES | ||
| 336 | { | ||
| 337 | /// @brief **0 :** Reserved | ||
| 338 | INPUTSTREAM_COLORPRIMARY_RESERVED0 = 0, | ||
| 339 | |||
| 340 | /// @brief **1 :** Also ITU-R BT1361 / IEC 61966-2-4 / SMPTE RP177 Annex B | ||
| 341 | INPUTSTREAM_COLORPRIMARY_BT709 = 1, | ||
| 342 | |||
| 343 | /// @brief **2 :** Unspecified | ||
| 344 | INPUTSTREAM_COLORPRIMARY_UNSPECIFIED = 2, | ||
| 345 | |||
| 346 | /// @brief **3 :** Reserved | ||
| 347 | INPUTSTREAM_COLORPRIMARY_RESERVED = 3, | ||
| 348 | |||
| 349 | /// @brief **4 :** Also FCC Title 47 Code of Federal Regulations 73.682 (a)(20) | ||
| 350 | INPUTSTREAM_COLORPRIMARY_BT470M = 4, | ||
| 351 | |||
| 352 | /// @brief **5 :** Also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM | ||
| 353 | INPUTSTREAM_COLORPRIMARY_BT470BG = 5, | ||
| 354 | |||
| 355 | /// @brief **6 :** Also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC | ||
| 356 | INPUTSTREAM_COLORPRIMARY_SMPTE170M = 6, | ||
| 357 | |||
| 358 | /// @brief **7 :** Functionally identical to above | ||
| 359 | INPUTSTREAM_COLORPRIMARY_SMPTE240M = 7, | ||
| 360 | |||
| 361 | /// @brief **8 :** Colour filters using Illuminant C | ||
| 362 | INPUTSTREAM_COLORPRIMARY_FILM = 8, | ||
| 363 | |||
| 364 | /// @brief **9 :** ITU-R BT2020 | ||
| 365 | INPUTSTREAM_COLORPRIMARY_BT2020 = 9, | ||
| 366 | |||
| 367 | /// @brief **10 :** SMPTE ST 428-1 (CIE 1931 XYZ) | ||
| 368 | INPUTSTREAM_COLORPRIMARY_SMPTE428 = 10, | ||
| 369 | |||
| 370 | /// @brief **10 :** | ||
| 371 | /// @note Same as @ref INPUTSTREAM_COLORPRIMARY_SMPTE428 | ||
| 372 | INPUTSTREAM_COLORPRIMARY_SMPTEST428_1 = INPUTSTREAM_COLORPRIMARY_SMPTE428, | ||
| 373 | |||
| 374 | /// @brief **11 :** SMPTE ST 431-2 (2011) / DCI P3 | ||
| 375 | INPUTSTREAM_COLORPRIMARY_SMPTE431 = 11, | ||
| 376 | |||
| 377 | /// @brief **12 :** SMPTE ST 432-1 (2010) / P3 D65 / Display P3 | ||
| 378 | INPUTSTREAM_COLORPRIMARY_SMPTE432 = 12, | ||
| 379 | |||
| 380 | /// @brief **22 :** JEDEC P22 phosphors | ||
| 381 | INPUTSTREAM_COLORPRIMARY_JEDEC_P22 = 22, | ||
| 382 | |||
| 383 | /// @brief The maximum value to use in a list. | ||
| 384 | INPUTSTREAM_COLORPRIMARY_MAX | ||
| 385 | }; | ||
| 386 | ///@} | ||
| 387 | //------------------------------------------------------------------------------ | ||
| 388 | |||
| 389 | // Keep in sync with AVColorRange | ||
| 390 | //============================================================================== | ||
| 391 | /// @defgroup cpp_kodi_addon_inputstream_Defs_Interface_INPUTSTREAM_COLORRANGE enum INPUTSTREAM_COLORRANGE | ||
| 392 | /// @ingroup cpp_kodi_addon_inputstream_Defs_Interface | ||
| 393 | /// @brief **Inputstream color range flags**\n | ||
| 394 | /// MPEG vs JPEG YUV range. | ||
| 395 | /// | ||
| 396 | /// Used on @ref kodi::addon::InputstreamInfo::SetColorRange and @ref kodi::addon::InputstreamInfo::GetColorRange. | ||
| 397 | /// | ||
| 398 | ///@{ | ||
| 399 | enum INPUTSTREAM_COLORRANGE | ||
| 400 | { | ||
| 401 | /// @brief **0 :** To define as unkown | ||
| 402 | INPUTSTREAM_COLORRANGE_UNKNOWN = 0, | ||
| 403 | |||
| 404 | /// @brief **1 :** The normal 219*2^(n-8) "MPEG" YUV ranges | ||
| 405 | INPUTSTREAM_COLORRANGE_LIMITED, | ||
| 406 | |||
| 407 | /// @brief **2 :** The normal 2^n-1 "JPEG" YUV ranges | ||
| 408 | INPUTSTREAM_COLORRANGE_FULLRANGE, | ||
| 409 | |||
| 410 | /// @brief The maximum value to use in a list. | ||
| 411 | INPUTSTREAM_COLORRANGE_MAX | ||
| 412 | }; | ||
| 413 | ///@} | ||
| 414 | //------------------------------------------------------------------------------ | ||
| 415 | |||
| 416 | // keep in sync with AVColorTransferCharacteristic | ||
| 417 | //============================================================================== | ||
| 418 | /// @defgroup cpp_kodi_addon_inputstream_Defs_Interface_INPUTSTREAM_COLORTRC enum INPUTSTREAM_COLORTRC | ||
| 419 | /// @ingroup cpp_kodi_addon_inputstream_Defs_Interface | ||
| 420 | /// @brief **Inputstream color TRC flags**\n | ||
| 421 | /// Color Transfer Characteristic. These values match the ones defined by ISO/IEC 23001-8_2013 § 7.2. | ||
| 422 | /// | ||
| 423 | /// Used on @ref kodi::addon::InputstreamInfo::SetColorTransferCharacteristic and @ref kodi::addon::InputstreamInfo::GetColorTransferCharacteristic. | ||
| 424 | /// | ||
| 425 | ///@{ | ||
| 426 | enum INPUTSTREAM_COLORTRC | ||
| 427 | { | ||
| 428 | /// @brief **0 :** Reserved | ||
| 429 | INPUTSTREAM_COLORTRC_RESERVED0 = 0, | ||
| 430 | |||
| 431 | /// @brief **1 :** Also ITU-R BT1361 | ||
| 432 | INPUTSTREAM_COLORTRC_BT709 = 1, | ||
| 433 | |||
| 434 | /// @brief **2 :** Unspecified | ||
| 435 | INPUTSTREAM_COLORTRC_UNSPECIFIED = 2, | ||
| 436 | |||
| 437 | /// @brief **3 :** Reserved | ||
| 438 | INPUTSTREAM_COLORTRC_RESERVED = 3, | ||
| 439 | |||
| 440 | /// @brief **4 :** Also ITU-R BT470M / ITU-R BT1700 625 PAL & SECAM | ||
| 441 | INPUTSTREAM_COLORTRC_GAMMA22 = 4, | ||
| 442 | |||
| 443 | /// @brief **5 :** Also ITU-R BT470BG | ||
| 444 | INPUTSTREAM_COLORTRC_GAMMA28 = 5, | ||
| 445 | |||
| 446 | /// @brief **6 :** Also ITU-R BT601-6 525 or 625 / ITU-R BT1358 525 or 625 / ITU-R BT1700 NTSC | ||
| 447 | INPUTSTREAM_COLORTRC_SMPTE170M = 6, | ||
| 448 | |||
| 449 | /// @brief **7 :** Functionally identical to above @ref INPUTSTREAM_COLORTRC_SMPTE170M | ||
| 450 | INPUTSTREAM_COLORTRC_SMPTE240M = 7, | ||
| 451 | |||
| 452 | /// @brief **8 :** Linear transfer characteristics | ||
| 453 | INPUTSTREAM_COLORTRC_LINEAR = 8, | ||
| 454 | |||
| 455 | /// @brief **9 :** Logarithmic transfer characteristic (100:1 range) | ||
| 456 | INPUTSTREAM_COLORTRC_LOG = 9, | ||
| 457 | |||
| 458 | /// @brief **10 :** Logarithmic transfer characteristic (100 * Sqrt(10) : 1 range) | ||
| 459 | INPUTSTREAM_COLORTRC_LOG_SQRT = 10, | ||
| 460 | |||
| 461 | /// @brief **11 :** IEC 61966-2-4 | ||
| 462 | INPUTSTREAM_COLORTRC_IEC61966_2_4 = 11, | ||
| 463 | |||
| 464 | /// @brief **12 :** ITU-R BT1361 Extended Colour Gamut | ||
| 465 | INPUTSTREAM_COLORTRC_BT1361_ECG = 12, | ||
| 466 | |||
| 467 | /// @brief **13 :** IEC 61966-2-1 (sRGB or sYCC) | ||
| 468 | INPUTSTREAM_COLORTRC_IEC61966_2_1 = 13, | ||
| 469 | |||
| 470 | /// @brief **14 :** ITU-R BT2020 for 10-bit system | ||
| 471 | INPUTSTREAM_COLORTRC_BT2020_10 = 14, | ||
| 472 | |||
| 473 | /// @brief **15 :** ITU-R BT2020 for 12-bit system | ||
| 474 | INPUTSTREAM_COLORTRC_BT2020_12 = 15, | ||
| 475 | |||
| 476 | /// @brief **16 :** SMPTE ST 2084 for 10-, 12-, 14- and 16-bit systems | ||
| 477 | INPUTSTREAM_COLORTRC_SMPTE2084 = 16, | ||
| 478 | |||
| 479 | /// @brief **16 :** Same as @ref INPUTSTREAM_COLORTRC_SMPTE2084 | ||
| 480 | INPUTSTREAM_COLORTRC_SMPTEST2084 = INPUTSTREAM_COLORTRC_SMPTE2084, | ||
| 481 | |||
| 482 | /// @brief **17 :** SMPTE ST 428-1 | ||
| 483 | INPUTSTREAM_COLORTRC_SMPTE428 = 17, | ||
| 484 | |||
| 485 | /// @brief **17 :** Same as @ref INPUTSTREAM_COLORTRC_SMPTE428 | ||
| 486 | INPUTSTREAM_COLORTRC_SMPTEST428_1 = INPUTSTREAM_COLORTRC_SMPTE428, | ||
| 487 | |||
| 488 | /// @brief **18 :** ARIB STD-B67, known as "Hybrid log-gamma" | ||
| 489 | INPUTSTREAM_COLORTRC_ARIB_STD_B67 = 18, | ||
| 490 | |||
| 491 | /// @brief The maximum value to use in a list. | ||
| 492 | INPUTSTREAM_COLORTRC_MAX | ||
| 493 | }; | ||
| 494 | ///@} | ||
| 495 | //------------------------------------------------------------------------------ | ||
| 496 | |||
| 497 | /*! | ||
| 498 | * @brief stream properties | ||
| 499 | */ | ||
| 500 | struct INPUTSTREAM_INFO | ||
| 501 | { | ||
| 502 | enum INPUTSTREAM_TYPE m_streamType; | ||
| 503 | uint32_t m_features; | ||
| 504 | uint32_t m_flags; | ||
| 505 | |||
| 506 | //! @brief (optional) name of the stream, \0 for default handling | ||
| 507 | char m_name[INPUTSTREAM_MAX_STRING_NAME_SIZE]; | ||
| 508 | |||
| 509 | //! @brief (required) name of codec according to ffmpeg | ||
| 510 | char m_codecName[INPUTSTREAM_MAX_STRING_CODEC_SIZE]; | ||
| 511 | |||
| 512 | //! @brief (optional) internal name of codec (selectionstream info) | ||
| 513 | char m_codecInternalName[INPUTSTREAM_MAX_STRING_CODEC_SIZE]; | ||
| 514 | |||
| 515 | //! @brief (optional) the profile of the codec | ||
| 516 | enum STREAMCODEC_PROFILE m_codecProfile; | ||
| 517 | |||
| 518 | //! @brief (required) physical index | ||
| 519 | unsigned int m_pID; | ||
| 520 | |||
| 521 | const uint8_t* m_ExtraData; | ||
| 522 | unsigned int m_ExtraSize; | ||
| 523 | |||
| 524 | //! @brief RFC 5646 language code (empty string if undefined) | ||
| 525 | char m_language[INPUTSTREAM_MAX_STRING_LANGUAGE_SIZE]; | ||
| 526 | |||
| 527 | //! Video stream related data | ||
| 528 | //@{ | ||
| 529 | |||
| 530 | //! @brief Scale of 1000 and a rate of 29970 will result in 29.97 fps | ||
| 531 | unsigned int m_FpsScale; | ||
| 532 | |||
| 533 | unsigned int m_FpsRate; | ||
| 534 | |||
| 535 | //! @brief height of the stream reported by the demuxer | ||
| 536 | unsigned int m_Height; | ||
| 537 | |||
| 538 | //! @brief width of the stream reported by the demuxer | ||
| 539 | unsigned int m_Width; | ||
| 540 | |||
| 541 | //! @brief display aspect of stream | ||
| 542 | float m_Aspect; | ||
| 543 | |||
| 544 | //@} | ||
| 545 | |||
| 546 | //! Audio stream related data | ||
| 547 | //@{ | ||
| 548 | |||
| 549 | //! @brief (required) amount of channels | ||
| 550 | unsigned int m_Channels; | ||
| 551 | |||
| 552 | //! @brief (required) sample rate | ||
| 553 | unsigned int m_SampleRate; | ||
| 554 | |||
| 555 | //! @brief (required) bit rate | ||
| 556 | unsigned int m_BitRate; | ||
| 557 | |||
| 558 | //! @brief (required) bits per sample | ||
| 559 | unsigned int m_BitsPerSample; | ||
| 560 | |||
| 561 | unsigned int m_BlockAlign; | ||
| 562 | |||
| 563 | //@} | ||
| 564 | |||
| 565 | struct STREAM_CRYPTO_SESSION m_cryptoSession; | ||
| 566 | |||
| 567 | // new in API version 2.0.8 | ||
| 568 | //@{ | ||
| 569 | //! @brief Codec If available, the fourcc code codec | ||
| 570 | unsigned int m_codecFourCC; | ||
| 571 | |||
| 572 | //! @brief definition of colorspace | ||
| 573 | enum INPUTSTREAM_COLORSPACE m_colorSpace; | ||
| 574 | |||
| 575 | //! @brief color range if available | ||
| 576 | enum INPUTSTREAM_COLORRANGE m_colorRange; | ||
| 577 | //@} | ||
| 578 | |||
| 579 | //new in API 2.0.9 / INPUTSTREAM_VERSION_LEVEL 1 | ||
| 580 | //@{ | ||
| 581 | enum INPUTSTREAM_COLORPRIMARIES m_colorPrimaries; | ||
| 582 | enum INPUTSTREAM_COLORTRC m_colorTransferCharacteristic; | ||
| 583 | //@} | ||
| 584 | |||
| 585 | //! @brief mastering static Metadata | ||
| 586 | struct INPUTSTREAM_MASTERING_METADATA* m_masteringMetadata; | ||
| 587 | |||
| 588 | //! @brief content light static Metadata | ||
| 589 | struct INPUTSTREAM_CONTENTLIGHT_METADATA* m_contentLightMetadata; | ||
| 590 | }; | ||
| 591 | |||
| 592 | struct INPUTSTREAM_TIMES | ||
| 593 | { | ||
| 594 | time_t startTime; | ||
| 595 | double ptsStart; | ||
| 596 | double ptsBegin; | ||
| 597 | double ptsEnd; | ||
| 598 | }; | ||
| 599 | |||
| 600 | /*! | ||
| 601 | * @brief "C" ABI Structures to transfer the methods from this to Kodi | ||
| 602 | */ | ||
| 603 | |||
| 604 | // this are properties given to the addon on create | ||
| 605 | // at this time we have no parameters for the addon | ||
| 606 | typedef struct AddonProps_InputStream /* internal */ | ||
| 607 | { | ||
| 608 | int dummy; | ||
| 609 | } AddonProps_InputStream; | ||
| 610 | |||
| 611 | typedef struct AddonToKodiFuncTable_InputStream /* internal */ | ||
| 612 | { | ||
| 613 | KODI_HANDLE kodiInstance; | ||
| 614 | struct DEMUX_PACKET* (*allocate_demux_packet)(void* kodiInstance, int data_size); | ||
| 615 | struct DEMUX_PACKET* (*allocate_encrypted_demux_packet)(void* kodiInstance, | ||
| 616 | unsigned int data_size, | ||
| 617 | unsigned int encrypted_subsample_count); | ||
| 618 | void (*free_demux_packet)(void* kodiInstance, struct DEMUX_PACKET* packet); | ||
| 619 | } AddonToKodiFuncTable_InputStream; | ||
| 620 | |||
| 621 | struct AddonInstance_InputStream; | ||
| 622 | typedef struct KodiToAddonFuncTable_InputStream /* internal */ | ||
| 623 | { | ||
| 624 | KODI_HANDLE addonInstance; | ||
| 625 | |||
| 626 | bool(__cdecl* open)(const struct AddonInstance_InputStream* instance, | ||
| 627 | struct INPUTSTREAM_PROPERTY* props); | ||
| 628 | void(__cdecl* close)(const struct AddonInstance_InputStream* instance); | ||
| 629 | const char*(__cdecl* get_path_list)(const struct AddonInstance_InputStream* instance); | ||
| 630 | void(__cdecl* get_capabilities)(const struct AddonInstance_InputStream* instance, | ||
| 631 | struct INPUTSTREAM_CAPABILITIES* capabilities); | ||
| 632 | |||
| 633 | // IDemux | ||
| 634 | bool(__cdecl* get_stream_ids)(const struct AddonInstance_InputStream* instance, | ||
| 635 | struct INPUTSTREAM_IDS* ids); | ||
| 636 | bool(__cdecl* get_stream)(const struct AddonInstance_InputStream* instance, | ||
| 637 | int streamid, | ||
| 638 | struct INPUTSTREAM_INFO* info, | ||
| 639 | KODI_HANDLE* demuxStream, | ||
| 640 | KODI_HANDLE (*transfer_stream)(KODI_HANDLE handle, | ||
| 641 | int streamId, | ||
| 642 | struct INPUTSTREAM_INFO* stream)); | ||
| 643 | void(__cdecl* enable_stream)(const struct AddonInstance_InputStream* instance, | ||
| 644 | int streamid, | ||
| 645 | bool enable); | ||
| 646 | bool(__cdecl* open_stream)(const struct AddonInstance_InputStream* instance, int streamid); | ||
| 647 | void(__cdecl* demux_reset)(const struct AddonInstance_InputStream* instance); | ||
| 648 | void(__cdecl* demux_abort)(const struct AddonInstance_InputStream* instance); | ||
| 649 | void(__cdecl* demux_flush)(const struct AddonInstance_InputStream* instance); | ||
| 650 | struct DEMUX_PACKET*(__cdecl* demux_read)(const struct AddonInstance_InputStream* instance); | ||
| 651 | bool(__cdecl* demux_seek_time)(const struct AddonInstance_InputStream* instance, | ||
| 652 | double time, | ||
| 653 | bool backwards, | ||
| 654 | double* startpts); | ||
| 655 | void(__cdecl* demux_set_speed)(const struct AddonInstance_InputStream* instance, int speed); | ||
| 656 | void(__cdecl* set_video_resolution)(const struct AddonInstance_InputStream* instance, | ||
| 657 | int width, | ||
| 658 | int height); | ||
| 659 | |||
| 660 | // IDisplayTime | ||
| 661 | int(__cdecl* get_total_time)(const struct AddonInstance_InputStream* instance); | ||
| 662 | int(__cdecl* get_time)(const struct AddonInstance_InputStream* instance); | ||
| 663 | |||
| 664 | // ITime | ||
| 665 | bool(__cdecl* get_times)(const struct AddonInstance_InputStream* instance, | ||
| 666 | struct INPUTSTREAM_TIMES* times); | ||
| 667 | |||
| 668 | // IPosTime | ||
| 669 | bool(__cdecl* pos_time)(const struct AddonInstance_InputStream* instance, int ms); | ||
| 670 | |||
| 671 | int(__cdecl* read_stream)(const struct AddonInstance_InputStream* instance, | ||
| 672 | uint8_t* buffer, | ||
| 673 | unsigned int bufferSize); | ||
| 674 | int64_t(__cdecl* seek_stream)(const struct AddonInstance_InputStream* instance, | ||
| 675 | int64_t position, | ||
| 676 | int whence); | ||
| 677 | int64_t(__cdecl* position_stream)(const struct AddonInstance_InputStream* instance); | ||
| 678 | int64_t(__cdecl* length_stream)(const struct AddonInstance_InputStream* instance); | ||
| 679 | bool(__cdecl* is_real_time_stream)(const struct AddonInstance_InputStream* instance); | ||
| 680 | |||
| 681 | // IChapter | ||
| 682 | int(__cdecl* get_chapter)(const struct AddonInstance_InputStream* instance); | ||
| 683 | int(__cdecl* get_chapter_count)(const struct AddonInstance_InputStream* instance); | ||
| 684 | const char*(__cdecl* get_chapter_name)(const struct AddonInstance_InputStream* instance, | ||
| 685 | int ch); | ||
| 686 | int64_t(__cdecl* get_chapter_pos)(const struct AddonInstance_InputStream* instance, int ch); | ||
| 687 | bool(__cdecl* seek_chapter)(const struct AddonInstance_InputStream* instance, int ch); | ||
| 688 | |||
| 689 | int(__cdecl* block_size_stream)(const struct AddonInstance_InputStream* instance); | ||
| 690 | } KodiToAddonFuncTable_InputStream; | ||
| 691 | |||
| 692 | typedef struct AddonInstance_InputStream /* internal */ | ||
| 693 | { | ||
| 694 | struct AddonProps_InputStream* props; | ||
| 695 | struct AddonToKodiFuncTable_InputStream* toKodi; | ||
| 696 | struct KodiToAddonFuncTable_InputStream* toAddon; | ||
| 697 | } AddonInstance_InputStream; | ||
| 698 | |||
| 699 | #ifdef __cplusplus | ||
| 700 | } /* extern "C" */ | ||
| 701 | #endif /* __cplusplus */ | ||
| 702 | |||
| 703 | #endif /* !C_API_ADDONINSTANCE_INPUTSTREAM_H */ | ||
