liyujie
2025-08-28 b3810562527858a3b3d98ffa6e9c9c5b0f4a9a8e
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
 
library fuchsia.media;
 
// Describes the type of an elementary stream.
struct StreamType {
    // Medium-specific type information.
    MediumSpecificStreamType medium_specific;
 
    // Encoding (see constants below).
    string encoding;
 
    // Encoding-specific parameters.
    vector<uint8>? encoding_parameters;
};
 
// A union of all medium-specific stream type structs.
union MediumSpecificStreamType {
    AudioStreamType audio;
    VideoStreamType video;
    TextStreamType text;
    SubpictureStreamType subpicture;
};
 
const string MEDIA_ENCODING_UNSUPPORTED = "fuchsia.media.unsupported";
 
const string AUDIO_ENCODING_AAC = "fuchsia.media.aac";
const string AUDIO_ENCODING_AMRNB = "fuchsia.media.amrnb";
const string AUDIO_ENCODING_AMRWB = "fuchsia.media.amrwb";
const string AUDIO_ENCODING_APTX = "fuchsia.media.aptx";
const string AUDIO_ENCODING_FLAC = "fuchsia.media.flac";
const string AUDIO_ENCODING_GSMMS = "fuchsia.media.gsmms";
const string AUDIO_ENCODING_LPCM = "fuchsia.media.lpcm";
const string AUDIO_ENCODING_MP3 = "fuchsia.media.mp3";
const string AUDIO_ENCODING_PCMALAW = "fuchsia.media.pcmalaw";
const string AUDIO_ENCODING_PCMMULAW = "fuchsia.media.pcmmulaw";
const string AUDIO_ENCODING_SBC = "fuchsia.media.sbc";
const string AUDIO_ENCODING_VORBIS = "fuchsia.media.vorbis";
 
const string VIDEO_ENCODING_H263 = "fuchsia.media.h263";
const string VIDEO_ENCODING_H264 = "fuchsia.media.h264";
const string VIDEO_ENCODING_MPEG4 = "fuchsia.media.mpeg4";
const string VIDEO_ENCODING_THEORA = "fuchsia.media.theora";
const string VIDEO_ENCODING_UNCOMPRESSED = "fuchsia.media.uncompressed_video";
const string VIDEO_ENCODING_VP3 = "fuchsia.media.vp3";
const string VIDEO_ENCODING_VP8 = "fuchsia.media.vp8";
const string VIDEO_ENCODING_VP9 = "fuchsia.media.vp9";
 
///////////////////////////////////////////////////////////////////////////////
// Audio
 
// Describes the type of an audio elementary stream.
struct AudioStreamType {
    AudioSampleFormat sample_format;
    uint32 channels;
    uint32 frames_per_second;
    // TODO(mpuryear): Add channel config.
};
 
enum AudioSampleFormat {
    // 8-bit unsigned samples, sample size 1 byte.
    UNSIGNED_8 = 1;
 
    // 16-bit signed samples, host-endian, sample size 2 bytes.
    SIGNED_16 = 2;
 
    // 24-bit signed samples in 32 bits, host-endian, sample size 4 bytes.
    SIGNED_24_IN_32 = 3;
 
    // 32-bit floating-point samples, sample size 4 bytes.
    FLOAT = 4;
};
 
///////////////////////////////////////////////////////////////////////////////
// Video
 
// Describes the type of a video elementary stream.
struct VideoStreamType {
    VideoProfile profile;
    // TODO(dalesat): Use fuchsia.images.PixelFormat.
    PixelFormat pixel_format;
    // TODO(dalesat): Use fuchsia.images.ColorSpace.
    ColorSpace color_space;
    uint32 width;
    uint32 height;
    uint32 coded_width;
    uint32 coded_height;
    uint32 pixel_aspect_ratio_width;
    uint32 pixel_aspect_ratio_height;
    // TODO(dalesat): Change to single line_stride value for all planes.
    vector<uint32> line_stride;
    // TODO(dalesat): Remove.
    vector<uint32> plane_offset;
};
 
// TODO(dalesat): Blindly copied from Chromium, revisit.
enum VideoProfile {
    UNKNOWN = 0;
    NOT_APPLICABLE = 1;
    H264_BASELINE = 2;
    H264_MAIN = 3;
    H264_EXTENDED = 4;
    H264_HIGH = 5;
    H264_HIGH10 = 6;
    H264_HIGH422 = 7;
    H264_HIGH444_PREDICTIVE = 8;
    H264_SCALABLE_BASELINE = 9;
    H264_SCALABLE_HIGH = 10;
    H264_STEREO_HIGH = 11;
    H264_MULTIVIEW_HIGH = 12;
};
 
// TODO(dalesat): Replace with fuchsia.images.PixelFormat.
enum PixelFormat {
    UNKNOWN = 0;
    I420 = 1; // 12bpp YUV planar 1x1 Y, 2x2 UV samples, a.k.a. YU12.
    YV12 = 2; // 12bpp YVU planar 1x1 Y, 2x2 VU samples.
    YV16 = 3; // 16bpp YVU planar 1x1 Y, 2x1 VU samples.
    YV12A = 4; // 20bpp YUVA planar 1x1 Y, 2x2 VU, 1x1 A samples.
    YV24 = 5; // 24bpp YUV planar, no subsampling.
    NV12 = 6; // 12bpp with Y plane followed by a 2x2 interleaved UV plane.
    NV21 = 7; // 12bpp with Y plane followed by a 2x2 interleaved VU plane.
    UYVY = 8; // 16bpp interleaved 2x1 U, 1x1 Y, 2x1 V, 1x1 Y samples.
    YUY2 = 9; // 16bpp interleaved 1x1 Y, 2x1 U, 1x1 Y, 2x1 V samples.
    ARGB = 10; // 32bpp ARGB, 1 plane.
    XRGB = 11; // 24bpp XRGB, 1 plane.
    RGB24 = 12; // 24bpp BGR, 1 plane.
    RGB32 = 13; // 32bpp BGRA, 1 plane.
    MJPEG = 14; // MJPEG compressed.
    MT21 = 15;
};
 
// TODO(dalesat): Replace with fuchsia.images.ColorSpace.
enum ColorSpace {
    UNKNOWN = 0;
    NOT_APPLICABLE = 1;
    JPEG = 2;
    HD_REC709 = 3;
    SD_REC601 = 4;
};
 
///////////////////////////////////////////////////////////////////////////////
// Text
 
struct TextStreamType {
    // TODO(dalesat): Define.
    uint8 dummy;
};
 
///////////////////////////////////////////////////////////////////////////////
// Subpicture
 
struct SubpictureStreamType {
    // TODO(dalesat): Define.
    uint8 dummy;
};