summaryrefslogtreecommitdiffstats
path: root/xbmc/addons/kodi-dev-kit/include/kodi/c-api/addon-instance/inputstream.h
diff options
context:
space:
mode:
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.h703
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
31extern "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 */