| Index: chromecast/public/media/decoder_config.h
|
| diff --git a/chromecast/public/media/decoder_config.h b/chromecast/public/media/decoder_config.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..b1077af57639366577c69e41cf0c555177f549da
|
| --- /dev/null
|
| +++ b/chromecast/public/media/decoder_config.h
|
| @@ -0,0 +1,157 @@
|
| +// Copyright 2015 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#ifndef CHROMECAST_PUBLIC_MEDIA_DECODER_CONFIG_H_
|
| +#define CHROMECAST_PUBLIC_MEDIA_DECODER_CONFIG_H_
|
| +
|
| +#include <stdint.h>
|
| +#include <vector>
|
| +
|
| +namespace chromecast {
|
| +namespace media {
|
| +
|
| +namespace {
|
| +
|
| +// Maximum audio bytes per sample.
|
| +static const int kMaxBytesPerSample = 4;
|
| +
|
| +// Maximum audio sampling rate.
|
| +static const int kMaxSampleRate = 192000;
|
| +
|
| +} // namespace
|
| +
|
| +enum AudioCodec {
|
| + kAudioCodecUnknown = -1,
|
| +
|
| + kAudioCodecMin = 0,
|
| + kCodecAAC = kAudioCodecMin,
|
| + kCodecMP3,
|
| + kCodecPCM,
|
| + kCodecPCM_S16BE,
|
| + kCodecVorbis,
|
| + kCodecOpus,
|
| + kCodecEAC3,
|
| + kCodecAC3,
|
| + kCodecDTS,
|
| + kAudioCodecMax = kCodecDTS,
|
| +};
|
| +
|
| +enum VideoCodec {
|
| + kVideoCodecUnknown = -1,
|
| +
|
| + kVideoCodecMin = 0,
|
| + kCodecH264 = kVideoCodecMin,
|
| + kCodecVC1,
|
| + kCodecMPEG2,
|
| + kCodecMPEG4,
|
| + kCodecTheora,
|
| + kCodecVP8,
|
| + kCodecVP9,
|
| + kCodecHEVC,
|
| + kVideoCodecMax = kCodecHEVC,
|
| +};
|
| +
|
| +// Profile for Video codec.
|
| +enum VideoProfile {
|
| + kVideoProfileUnknown = -1,
|
| +
|
| + kVideoProfileMin = 0,
|
| + kH264Baseline = kVideoProfileMin,
|
| + kH264Main,
|
| + kH264Extended,
|
| + kH264High,
|
| + kH264High10,
|
| + kH264High422,
|
| + kH264High444Predictive,
|
| + kH264ScalableBaseline,
|
| + kH264ScalableHigh,
|
| + kH264Stereohigh,
|
| + kH264MultiviewHigh,
|
| + kVP8ProfileAny,
|
| + kVP9ProfileAny,
|
| + kVideoProfileMax = kVP9ProfileAny,
|
| +};
|
| +
|
| +// TODO(erickung): Remove constructor once CMA backend implementation does't
|
| +// create a new object to reset the configuration and use IsValidConfig() to
|
| +// determine if the configuration is still valid or not.
|
| +struct AudioConfig {
|
| + AudioConfig()
|
| + : codec(kAudioCodecUnknown),
|
| + bytes_per_channel(0),
|
| + channel_number(0),
|
| + samples_per_second(0),
|
| + extra_data(nullptr),
|
| + extra_data_size(0),
|
| + is_encrypted(false) {}
|
| +
|
| + // Audio codec.
|
| + AudioCodec codec;
|
| + // Number of bytes in each channel.
|
| + int bytes_per_channel;
|
| + // Number of channels in this audio stream.
|
| + int channel_number;
|
| + // Number of audio samples per second.
|
| + int samples_per_second;
|
| + // Pointer to extra data buffer for certain codec initialization. The memory
|
| + // is allocated outside this structure. Consumers of the structure should make
|
| + // a copy if it is expected to be used beyond the function ends.
|
| + const uint8_t* extra_data;
|
| + // Size of extra data in bytes.
|
| + int extra_data_size;
|
| + // content is encrypted or not.
|
| + bool is_encrypted;
|
| +};
|
| +
|
| +// TODO(erickung): Remove constructor once CMA backend implementation does't
|
| +// create a new object to reset the configuration and use IsValidConfig() to
|
| +// determine if the configuration is still valid or not.
|
| +struct VideoConfig {
|
| + VideoConfig()
|
| + : codec(kVideoCodecUnknown),
|
| + profile(kVideoProfileUnknown),
|
| + additional_config(nullptr),
|
| + extra_data(nullptr),
|
| + extra_data_size(0),
|
| + is_encrypted(false) {}
|
| +
|
| + // Video codec.
|
| + VideoCodec codec;
|
| + // Video codec profile.
|
| + VideoProfile profile;
|
| + // Both |additional_config| and |extra_data| are the pointers to the object
|
| + // memory that are allocated outside this structure. Consumers of the
|
| + // structure should make a copy if it is expected to be used beyond the
|
| + // function ends.
|
| + // Additional video config for the video stream if available.
|
| + VideoConfig* additional_config;
|
| + // Pointer to extra data buffer for certain codec initialization.
|
| + const uint8_t* extra_data;
|
| + // Size of extra data in bytes.
|
| + int extra_data_size;
|
| + // content is encrypted or not.
|
| + bool is_encrypted;
|
| +};
|
| +
|
| +// TODO(erickung): Remove following two inline IsValidConfig() functions. These
|
| +// are to keep existing CMA backend implementation consistent until the clean up
|
| +// is done. These SHOULD NOT be used in New CMA backend implementation.
|
| +inline bool IsValidConfig(const AudioConfig& config) {
|
| + return config.codec >= kAudioCodecMin &&
|
| + config.codec <= kAudioCodecMax &&
|
| + config.channel_number > 0 &&
|
| + config.bytes_per_channel > 0 &&
|
| + config.bytes_per_channel <= kMaxBytesPerSample &&
|
| + config.samples_per_second > 0 &&
|
| + config.samples_per_second <= kMaxSampleRate;
|
| +}
|
| +
|
| +inline bool IsValidConfig(const VideoConfig& config) {
|
| + return config.codec >= kVideoCodecMin && config.codec <= kVideoCodecMax;
|
| +}
|
| +
|
| +} // namespace media
|
| +} // namespace chromecast
|
| +
|
| +#endif // CHROMECAST_PUBLIC_MEDIA_DECODER_CONFIG_H_
|
|
|