blob: 684a40f81c58f5cfe6530d938fa623796d3e5cae [file] [log] [blame]
// 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.
};