| // 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; |
| |
| // fuchsia.media contains definitions shared by the various fuchsia.media.* |
| // libraries. Definitions in this file concern the representation of type |
| // (i.e. format or encoding) for elementary streams. |
| |
| using fuchsia.images; |
| |
| /// Describes the type of an elementary stream. |
| struct StreamType { |
| /// Medium-specific type information. |
| MediumSpecificStreamType medium_specific; |
| |
| /// Encoding (see constants below). This value is represented as a string |
| /// so that new encodings can be introduced without modifying this file. |
| string:255 encoding; |
| |
| /// Encoding-specific parameters, sometimes referred to as 'out-of-band |
| /// data'. Typically, this data is associated with a compressed stream and |
| /// provides parameters required to decompress the stream. This data is |
| /// generally opaque to all parties except the producer and consumer of the |
| /// stream. |
| vector<uint8>? encoding_parameters; |
| }; |
| |
| /// A union of all medium-specific stream type structs. |
| union MediumSpecificStreamType { |
| 1: AudioStreamType audio; |
| 2: VideoStreamType video; |
| 3: TextStreamType text; |
| 4: SubpictureStreamType subpicture; |
| }; |
| |
| /// Audio encodings. |
| const string AUDIO_ENCODING_AAC = "fuchsia.media.aac"; |
| const string AUDIO_ENCODING_AACLATM = "fuchsia.media.aaclatm"; |
| 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 AUDIO_ENCODING_OPUS = "fuchsia.media.opus"; |
| |
| /// Video encodings. |
| 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"; |
| |
| /// Describes the compression applied to a stream. This type can be used in conjunction with |
| /// `AudioStreamType` or `VideoStreamType` to represent a medium-specific compressed type. |
| struct Compression { |
| /// The type of compression applied to the stream. This is generally one of the *_ENCODING_* |
| /// values, though `AUDIO_ENCODING_LPCM` and `VIDEO_ENCODING_UNCOMPRESSED` must not be used, |
| /// because those encodings are regarded as uncompressed. |
| CompressionType type; |
| |
| /// Type-specific, opaque ‘out-of-band’ parameters describing the compression of the stream. |
| bytes:8192? parameters; |
| }; |
| |
| /// An identifier for compression types. |
| using CompressionType = string:256; |
| |
| // ///////////////////////////////////////////////////////////////////////////// |
| // 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. |
| }; |
| |
| /// Enumerates the supported audio sample formats. |
| 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 { |
| fuchsia.images.PixelFormat pixel_format; |
| // TODO(dalesat): Use fuchsia.images.ColorSpace. |
| ColorSpace color_space; |
| |
| /// Dimensions of the video frames as displayed in pixels. |
| uint32 width; |
| uint32 height; |
| |
| /// Dimensions of the video frames as encoded in pixels. These values must |
| /// be equal to or greater than the respective width/height values. |
| uint32 coded_width; |
| uint32 coded_height; |
| |
| /// The aspect ratio of a single pixel as frames are intended to be |
| /// displayed. |
| uint32 pixel_aspect_ratio_width; |
| uint32 pixel_aspect_ratio_height; |
| |
| /// The number of bytes per 'coded' row in the primary video plane. |
| uint32 stride; |
| }; |
| |
| // TODO(dalesat): Replace with fuchsia.images.ColorSpace. |
| enum ColorSpace { |
| UNKNOWN = 0; |
| NOT_APPLICABLE = 1; |
| JPEG = 2; |
| HD_REC709 = 3; |
| SD_REC601 = 4; |
| }; |
| |
| // ///////////////////////////////////////////////////////////////////////////// |
| // Text |
| |
| /// Describes the type of a text elementary stream. |
| struct TextStreamType { |
| // TODO(dalesat): Define. |
| }; |
| |
| // ///////////////////////////////////////////////////////////////////////////// |
| // Subpicture |
| |
| /// Describes the type of a subpicture elementary stream. |
| struct SubpictureStreamType { |
| // TODO(dalesat): Define. |
| }; |