Rialto  0.1
Rialto media pipeline API
MediaCommon.h
Go to the documentation of this file.
1 /*
2  * If not stated otherwise in this file or this component's LICENSE file the
3  * following copyright and licenses apply:
4  *
5  * Copyright 2022 Sky UK
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  */
19 
20 #ifndef FIREBOLT_RIALTO_MEDIA_COMMON_H_
21 #define FIREBOLT_RIALTO_MEDIA_COMMON_H_
22 
30 #include <limits>
31 #include <optional>
32 #include <stddef.h>
33 #include <stdint.h>
34 #include <utility>
35 #include <vector>
36 
37 namespace firebolt::rialto
38 {
42 constexpr int32_t kInvalidSessionId{-1};
43 
47 constexpr uint32_t kInvalidAudioChannels{0};
48 
52 constexpr uint32_t kInvalidAudioSampleRate{0};
53 
57 constexpr int32_t kUndefinedSize{0};
58 
62 constexpr uint32_t kInvalidLimitBuffering{std::numeric_limits<uint32_t>::max()};
63 
67 constexpr uint64_t kUndefinedPosition{std::numeric_limits<uint64_t>::max()};
68 
72 enum class MediaSourceType
73 {
74  UNKNOWN,
75  AUDIO,
76  VIDEO,
77  SUBTITLE
78 };
79 
83 enum class SourceConfigType
84 {
85  UNKNOWN,
86  AUDIO,
87  VIDEO,
88  VIDEO_DOLBY_VISION,
89  SUBTITLE
90 };
91 
95 enum class AudioEaseType
96 {
97  LINEAR = 0,
98  INCUBIC,
99  OUTCUBIC
100 };
101 
105 enum class MediaType
106 {
107  UNKNOWN,
108  MSE
109 };
110 
116 {
117  OK,
118  EOS,
119  ERROR,
120  CODEC_CHANGED,
121  NO_AVAILABLE_SAMPLES
122 };
123 
136 enum class NetworkState
137 {
138  UNKNOWN,
139  IDLE,
140  BUFFERING,
141  BUFFERING_PROGRESS,
142  BUFFERED,
143  STALLED,
144  FORMAT_ERROR,
145  NETWORK_ERROR,
146  DECODE_ERROR
147 };
148 
158 enum class PlaybackState
159 {
160  UNKNOWN,
161  IDLE,
162  PLAYING,
163  PAUSED,
164  SEEKING,
165  SEEK_DONE,
166  STOPPED,
167  END_OF_STREAM,
168  FAILURE
169 };
170 
174 enum class Format
175 {
176  S8,
177  U8,
178  S16LE,
179  S16BE,
180  U16LE,
181  U16BE,
182  S24_32LE,
183  S24_32BE,
184  U24_32LE,
185  U24_32BE,
186  S32LE,
187  S32BE,
188  U32LE,
189  U32BE,
190  S24LE,
191  S24BE,
192  U24LE,
193  U24BE,
194  S20LE,
195  S20BE,
196  U20LE,
197  U20BE,
198  S18LE,
199  S18BE,
200  U18LE,
201  U18BE,
202  F32LE,
203  F32BE,
204  F64LE,
205  F64BE
206 };
207 
211 enum class Layout
212 {
213  INTERLEAVED,
214  NON_INTERLEAVED
215 };
216 
221 {
224  std::vector<uint8_t> codecSpecificConfig;
225  std::optional<Format> format;
226  std::optional<Layout> layout;
227  std::optional<uint64_t> channelMask;
228 };
229 
236 {
237  OK,
238  NO_SPACE,
239  ERROR
240 };
241 
247 {
248  size_t numClearBytes;
250 };
251 
256 {
257  uint32_t maxWidth;
258  uint32_t maxHeight;
259 };
260 
265 {
266  uint32_t maxMetadataBytes;
267  uint32_t metadataOffset;
268  uint32_t mediaDataOffset;
269  uint32_t maxMediaBytes;
270 };
271 
275 struct QosInfo
276 {
277  uint64_t processed;
278  uint64_t dropped;
279 };
280 
285 {
286  OK,
287  FAIL,
288  BAD_SESSION_ID,
289  NOT_SUPPORTED,
290  INVALID_STATE,
291  INTERFACE_NOT_IMPLEMENTED,
292  BUFFER_TOO_SMALL
293 };
294 
298 enum class KeySessionType
299 {
300  UNKNOWN,
301  TEMPORARY,
302  PERSISTENT_LICENCE,
303  PERSISTENT_RELEASE_MESSAGE
304 };
305 
309 enum class InitDataType
310 {
311  UNKNOWN,
312  CENC,
313  KEY_IDS,
314  WEBM,
315  DRMHEADER
316 };
317 
321 enum class KeyStatus
322 {
323  USABLE,
324  EXPIRED,
325  OUTPUT_RESTRICTED,
326  PENDING,
327  INTERNAL_ERROR,
328  RELEASED
329 };
330 
335 {
336  UNDEFINED,
337  NAL,
338  AU
339 };
340 
344 enum class StreamFormat
345 {
346  UNDEFINED,
347  RAW,
348  AVC,
349  BYTE_STREAM,
350  HVC1,
351  HEV1
352 };
353 
357 typedef std::vector<std::pair<std::vector<unsigned char>, KeyStatus>> KeyStatusVector;
358 
363 {
364  uint32_t offsetMain;
365  uint32_t lengthMain;
366  uint32_t offsetWrap;
367  uint32_t lengthWrap;
368 };
369 
374 {
375  uint32_t rate;
376  uint32_t channels;
377  uint32_t sampleSize;
378  bool isBigEndian;
379  bool isSigned;
380  bool isFloat;
381 };
382 
387 {
392 };
393 
398 {
399  UNKNOWN,
400  IDLE,
401  PLAYING,
402  PAUSED,
403  END_OF_STREAM,
404  FAILURE
405 };
406 
410 enum class CipherMode
411 {
412  UNKNOWN,
413  CENC, /* AES-CTR scheme */
414  CBC1, /* AES-CBC scheme */
415  CENS, /* AES-CTR subsample pattern encryption scheme */
416  CBCS /* AES-CBC subsample pattern encryption scheme */
417 };
418 
422 struct Fraction
423 {
424  int32_t numerator;
425  int32_t denominator;
426 };
427 
431 enum class CodecDataType
432 {
433  BUFFER,
434  STRING
435 };
436 
440 struct CodecData
441 {
442  std::vector<uint8_t> data{};
443  CodecDataType type{CodecDataType::BUFFER};
444 };
445 
449 enum class PlaybackError
450 {
451  UNKNOWN,
452  DECRYPTION, /* Player failed to decrypt a buffer and the frame has been dropped */
453 };
454 
458 enum class EaseType
459 {
460  EASE_LINEAR,
461  EASE_IN_CUBIC,
462  EASE_OUT_CUBIC
463 };
464 
465 } // namespace firebolt::rialto
466 
467 #endif // FIREBOLT_RIALTO_MEDIA_COMMON_H_
firebolt::rialto::WebAudioPcmConfig::sampleSize
uint32_t sampleSize
Definition: MediaCommon.h:377
firebolt::rialto::MediaSourceStatus
MediaSourceStatus
The media source status. This is the status of the source after a read.
Definition: MediaCommon.h:115
firebolt::rialto::PlaybackError
PlaybackError
None fatal asynchronous errors reported by the player.
Definition: MediaCommon.h:449
firebolt::rialto::WebAudioPlayerState
WebAudioPlayerState
The Web Audio Player State.
Definition: MediaCommon.h:397
firebolt::rialto::Fraction
Fraction type.
Definition: MediaCommon.h:422
firebolt::rialto::QosInfo
The information provided in a QOS update.
Definition: MediaCommon.h:275
firebolt::rialto::kInvalidAudioChannels
constexpr uint32_t kInvalidAudioChannels
The value of an invalid audio channels number.
Definition: MediaCommon.h:47
firebolt::rialto::WebAudioPcmConfig::isFloat
bool isFloat
Definition: MediaCommon.h:380
firebolt::rialto::WebAudioPcmConfig
Pcm config information.
Definition: MediaCommon.h:373
firebolt::rialto::kInvalidAudioSampleRate
constexpr uint32_t kInvalidAudioSampleRate
The value of an invalid audio sampling rate.
Definition: MediaCommon.h:52
firebolt::rialto::MediaSourceType
MediaSourceType
The supported types of media source.
Definition: MediaCommon.h:72
firebolt::rialto::WebAudioShmInfo::offsetWrap
uint32_t offsetWrap
Definition: MediaCommon.h:366
firebolt::rialto::Fraction::numerator
int32_t numerator
Definition: MediaCommon.h:424
firebolt::rialto::SourceConfigType
SourceConfigType
Shows the types of source configuration.
Definition: MediaCommon.h:83
firebolt::rialto::kInvalidSessionId
constexpr int32_t kInvalidSessionId
The value of an invalid key session.
Definition: MediaCommon.h:42
firebolt::rialto::SegmentAlignment
SegmentAlignment
The alignment of media segment.
Definition: MediaCommon.h:334
firebolt::rialto::AudioEaseType
AudioEaseType
The supported audio ease types.
Definition: MediaCommon.h:95
firebolt::rialto::AudioConfig::layout
std::optional< Layout > layout
Definition: MediaCommon.h:226
firebolt::rialto::WebAudioShmInfo::lengthMain
uint32_t lengthMain
Definition: MediaCommon.h:365
firebolt::rialto::CodecDataType
CodecDataType
Codec data type.
Definition: MediaCommon.h:431
firebolt::rialto::PlaybackState
PlaybackState
The Playback State.
Definition: MediaCommon.h:158
firebolt::rialto::VideoRequirements
Video decoder requirements used to allocate a suitable decoder for a MediaPipeline session.
Definition: MediaCommon.h:255
firebolt::rialto::Format
Format
The Format of the audio samples. Used by the raw audio media types.
Definition: MediaCommon.h:174
firebolt::rialto::WebAudioPcmConfig::channels
uint32_t channels
Definition: MediaCommon.h:376
firebolt::rialto::MediaKeyErrorStatus
MediaKeyErrorStatus
The error return status for session management methods.
Definition: MediaCommon.h:284
firebolt::rialto::KeyStatusVector
std::vector< std::pair< std::vector< unsigned char >, KeyStatus > > KeyStatusVector
A vector of key ID/key status pairs.
Definition: MediaCommon.h:357
firebolt::rialto::SubSamplePair
A pair describing the clear and encrypted bytes in a sub-sample.
Definition: MediaCommon.h:246
firebolt::rialto::Fraction::denominator
int32_t denominator
Definition: MediaCommon.h:425
firebolt::rialto::VideoRequirements::maxHeight
uint32_t maxHeight
Definition: MediaCommon.h:258
firebolt::rialto::WebAudioShmInfo
Information about the shared memory required for writting data for the web audio playback.
Definition: MediaCommon.h:362
firebolt::rialto::MediaPlayerShmInfo::metadataOffset
uint32_t metadataOffset
Definition: MediaCommon.h:267
firebolt::rialto::VideoRequirements::maxWidth
uint32_t maxWidth
Definition: MediaCommon.h:257
firebolt::rialto::MediaPlayerShmInfo::maxMediaBytes
uint32_t maxMediaBytes
Definition: MediaCommon.h:269
firebolt::rialto::EaseType
EaseType
Ease type for audio volume changes.
Definition: MediaCommon.h:458
firebolt::rialto::MediaType
MediaType
The media type of media to be played.
Definition: MediaCommon.h:105
firebolt::rialto::KeySessionType
KeySessionType
The media key session type.
Definition: MediaCommon.h:298
firebolt::rialto::WebAudioPcmConfig::isBigEndian
bool isBigEndian
Definition: MediaCommon.h:378
firebolt::rialto::CodecData::data
std::vector< uint8_t > data
Definition: MediaCommon.h:442
firebolt::rialto::MediaPlayerShmInfo
Information about the shared memory required for writting data.
Definition: MediaCommon.h:264
firebolt::rialto::KeyStatus
KeyStatus
The key status.
Definition: MediaCommon.h:321
firebolt::rialto::NetworkState
NetworkState
The Network State.
Definition: MediaCommon.h:136
firebolt::rialto::AudioConfig::numberOfChannels
uint32_t numberOfChannels
Definition: MediaCommon.h:222
firebolt::rialto::AudioConfig
Audio specific configuration.
Definition: MediaCommon.h:220
firebolt::rialto::MediaPlayerShmInfo::maxMetadataBytes
uint32_t maxMetadataBytes
Definition: MediaCommon.h:266
firebolt::rialto::AudioConfig::format
std::optional< Format > format
Definition: MediaCommon.h:225
firebolt::rialto::WebAudioPcmConfig::isSigned
bool isSigned
Definition: MediaCommon.h:379
firebolt::rialto::WebAudioShmInfo::lengthWrap
uint32_t lengthWrap
Definition: MediaCommon.h:367
firebolt::rialto::kInvalidLimitBuffering
constexpr uint32_t kInvalidLimitBuffering
The value of an invalid limitBuffering.
Definition: MediaCommon.h:62
firebolt::rialto::CipherMode
CipherMode
Cipher mode for common encryption, see https://www.iso.org/obp/ui/#iso:std:iso-iec:23001:-7:ed-3:v1:e...
Definition: MediaCommon.h:410
firebolt::rialto::SubSamplePair::numClearBytes
size_t numClearBytes
Definition: MediaCommon.h:248
firebolt::rialto::AudioConfig::channelMask
std::optional< uint64_t > channelMask
Definition: MediaCommon.h:227
firebolt::rialto::CodecData
Codec data with type.
Definition: MediaCommon.h:440
firebolt::rialto::SubSamplePair::numEncryptedBytes
size_t numEncryptedBytes
Definition: MediaCommon.h:249
firebolt::rialto::WebAudioShmInfo::offsetMain
uint32_t offsetMain
Definition: MediaCommon.h:364
firebolt::rialto::AudioConfig::sampleRate
uint32_t sampleRate
Definition: MediaCommon.h:223
firebolt::rialto::Layout
Layout
The layout of channels within a buffer. Used by the raw audio media types.
Definition: MediaCommon.h:211
firebolt::rialto::QosInfo::dropped
uint64_t dropped
Definition: MediaCommon.h:278
firebolt::rialto::kUndefinedSize
constexpr int32_t kUndefinedSize
The value of an undefined size.
Definition: MediaCommon.h:57
firebolt::rialto::CodecData::type
CodecDataType type
Definition: MediaCommon.h:443
firebolt::rialto::WebAudioConfig::pcm
WebAudioPcmConfig pcm
PCM audio configuration.
Definition: MediaCommon.h:391
firebolt::rialto::AudioConfig::codecSpecificConfig
std::vector< uint8_t > codecSpecificConfig
Definition: MediaCommon.h:224
firebolt::rialto::StreamFormat
StreamFormat
The Stream Format of media segment.
Definition: MediaCommon.h:344
firebolt::rialto::QosInfo::processed
uint64_t processed
Definition: MediaCommon.h:277
firebolt::rialto::InitDataType
InitDataType
The init data type.
Definition: MediaCommon.h:309
firebolt::rialto::WebAudioConfig
Type dependent configuration data.
Definition: MediaCommon.h:386
firebolt::rialto::WebAudioPcmConfig::rate
uint32_t rate
Definition: MediaCommon.h:375
firebolt::rialto::AddSegmentStatus
AddSegmentStatus
AddSegmentStatus.
Definition: MediaCommon.h:235
firebolt::rialto::kUndefinedPosition
constexpr uint64_t kUndefinedPosition
The value of undefined position.
Definition: MediaCommon.h:67
firebolt::rialto::MediaPlayerShmInfo::mediaDataOffset
uint32_t mediaDataOffset
Definition: MediaCommon.h:268