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 };
292 
296 enum class KeySessionType
297 {
298  UNKNOWN,
299  TEMPORARY,
300  PERSISTENT_LICENCE,
301  PERSISTENT_RELEASE_MESSAGE
302 };
303 
307 enum class InitDataType
308 {
309  UNKNOWN,
310  CENC,
311  KEY_IDS,
312  WEBM,
313  DRMHEADER
314 };
315 
319 enum class KeyStatus
320 {
321  USABLE,
322  EXPIRED,
323  OUTPUT_RESTRICTED,
324  PENDING,
325  INTERNAL_ERROR,
326  RELEASED
327 };
328 
333 {
334  UNDEFINED,
335  NAL,
336  AU
337 };
338 
342 enum class StreamFormat
343 {
344  UNDEFINED,
345  RAW,
346  AVC,
347  BYTE_STREAM,
348  HVC1,
349  HEV1
350 };
351 
355 typedef std::vector<std::pair<std::vector<unsigned char>, KeyStatus>> KeyStatusVector;
356 
361 {
362  uint32_t offsetMain;
363  uint32_t lengthMain;
364  uint32_t offsetWrap;
365  uint32_t lengthWrap;
366 };
367 
372 {
373  uint32_t rate;
374  uint32_t channels;
375  uint32_t sampleSize;
376  bool isBigEndian;
377  bool isSigned;
378  bool isFloat;
379 };
380 
385 {
390 };
391 
396 {
397  UNKNOWN,
398  IDLE,
399  PLAYING,
400  PAUSED,
401  END_OF_STREAM,
402  FAILURE
403 };
404 
408 enum class CipherMode
409 {
410  UNKNOWN,
411  CENC, /* AES-CTR scheme */
412  CBC1, /* AES-CBC scheme */
413  CENS, /* AES-CTR subsample pattern encryption scheme */
414  CBCS /* AES-CBC subsample pattern encryption scheme */
415 };
416 
420 struct Fraction
421 {
422  int32_t numerator;
423  int32_t denominator;
424 };
425 
429 enum class CodecDataType
430 {
431  BUFFER,
432  STRING
433 };
434 
438 struct CodecData
439 {
440  std::vector<uint8_t> data{};
441  CodecDataType type{CodecDataType::BUFFER};
442 };
443 
447 enum class PlaybackError
448 {
449  UNKNOWN,
450  DECRYPTION, /* Player failed to decrypt a buffer and the frame has been dropped */
451 };
452 
456 enum class EaseType
457 {
458  EASE_LINEAR,
459  EASE_IN_CUBIC,
460  EASE_OUT_CUBIC
461 };
462 
463 } // namespace firebolt::rialto
464 
465 #endif // FIREBOLT_RIALTO_MEDIA_COMMON_H_
firebolt::rialto::WebAudioPcmConfig::sampleSize
uint32_t sampleSize
Definition: MediaCommon.h:375
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:447
firebolt::rialto::WebAudioPlayerState
WebAudioPlayerState
The Web Audio Player State.
Definition: MediaCommon.h:395
firebolt::rialto::Fraction
Fraction type.
Definition: MediaCommon.h:420
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:378
firebolt::rialto::WebAudioPcmConfig
Pcm config information.
Definition: MediaCommon.h:371
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:364
firebolt::rialto::Fraction::numerator
int32_t numerator
Definition: MediaCommon.h:422
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:332
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:363
firebolt::rialto::CodecDataType
CodecDataType
Codec data type.
Definition: MediaCommon.h:429
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:374
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:355
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:423
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:360
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:456
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:296
firebolt::rialto::WebAudioPcmConfig::isBigEndian
bool isBigEndian
Definition: MediaCommon.h:376
firebolt::rialto::CodecData::data
std::vector< uint8_t > data
Definition: MediaCommon.h:440
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:319
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:377
firebolt::rialto::WebAudioShmInfo::lengthWrap
uint32_t lengthWrap
Definition: MediaCommon.h:365
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:408
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:438
firebolt::rialto::SubSamplePair::numEncryptedBytes
size_t numEncryptedBytes
Definition: MediaCommon.h:249
firebolt::rialto::WebAudioShmInfo::offsetMain
uint32_t offsetMain
Definition: MediaCommon.h:362
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:441
firebolt::rialto::WebAudioConfig::pcm
WebAudioPcmConfig pcm
PCM audio configuration.
Definition: MediaCommon.h:389
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:342
firebolt::rialto::QosInfo::processed
uint64_t processed
Definition: MediaCommon.h:277
firebolt::rialto::InitDataType
InitDataType
The init data type.
Definition: MediaCommon.h:307
firebolt::rialto::WebAudioConfig
Type dependent configuration data.
Definition: MediaCommon.h:384
firebolt::rialto::WebAudioPcmConfig::rate
uint32_t rate
Definition: MediaCommon.h:373
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