// Copyright 2021 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.mediastreams;

/// An identifier for compression types.
@available(removed=HEAD)
alias CompressionType = string:256;

/// Describes the compression applied to a stream.
@available(removed=HEAD)
type Compression = struct {
    /// The type of compression applied to the stream.
    type CompressionType;

    /// Opaque 'out-of-band' parameters describing the compression
    /// of the stream.
    parameters vector<uint8>:<MAX, optional>;
};

// TODO: Use mimetypes for these?
@available(removed=HEAD)
const AUDIO_COMPRESSION_AAC string = "fuchsia.streams.aac";
@available(removed=HEAD)
const AUDIO_COMPRESSION_AACLATM string = "fuchsia.streams.aaclatm";
@available(removed=HEAD)
const AUDIO_COMPRESSION_AMRNB string = "fuchsia.streams.amrnb";
@available(removed=HEAD)
const AUDIO_COMPRESSION_AMRWB string = "fuchsia.streams.amrwb";
@available(removed=HEAD)
const AUDIO_COMPRESSION_APTX string = "fuchsia.streams.aptx";
@available(removed=HEAD)
const AUDIO_COMPRESSION_FLAC string = "fuchsia.streams.flac";
@available(removed=HEAD)
const AUDIO_COMPRESSION_GSMMS string = "fuchsia.streams.gsmms";
@available(removed=HEAD)
const AUDIO_COMPRESSION_MP3 string = "fuchsia.streams.mp3";
@available(removed=HEAD)
const AUDIO_COMPRESSION_PCMALAW string = "fuchsia.streams.pcmalaw";
@available(removed=HEAD)
const AUDIO_COMPRESSION_PCMMULAW string = "fuchsia.streams.pcmmulaw";
@available(removed=HEAD)
const AUDIO_COMPRESSION_SBC string = "fuchsia.streams.sbc";
@available(removed=HEAD)
const AUDIO_COMPRESSION_VORBIS string = "fuchsia.streams.vorbis";
@available(removed=HEAD)
const AUDIO_COMPRESSION_OPUS string = "fuchsia.streams.opus";

@available(removed=HEAD)
const VIDEO_COMPRESSION_H263 string = "fuchsia.streams.h263";
@available(removed=HEAD)
const VIDEO_COMPRESSION_H264 string = "fuchsia.streams.h264";
@available(removed=HEAD)
const VIDEO_COMPRESSION_MPEG4 string = "fuchsia.streams.mpeg4";
@available(removed=HEAD)
const VIDEO_COMPRESSION_THEORA string = "fuchsia.streams.theora";
@available(removed=HEAD)
const VIDEO_COMPRESSION_VP3 string = "fuchsia.streams.vp3";
@available(removed=HEAD)
const VIDEO_COMPRESSION_VP8 string = "fuchsia.streams.vp8";
@available(removed=HEAD)
const VIDEO_COMPRESSION_VP9 string = "fuchsia.streams.vp9";
