Chromium Code Reviews| Index: chromecast/media/cma/base/decoder_config_adapter.cc |
| diff --git a/chromecast/media/cma/base/decoder_config_adapter.cc b/chromecast/media/cma/base/decoder_config_adapter.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..2fdf1ad18c78c4f7179a173cfd82377c33360b1d |
| --- /dev/null |
| +++ b/chromecast/media/cma/base/decoder_config_adapter.cc |
| @@ -0,0 +1,124 @@ |
| +// 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. |
| + |
| +#include "chromecast/media/cma/base/decoder_config_adapter.h" |
| + |
| +#include "base/logging.h" |
| +#include "media/base/channel_layout.h" |
| + |
| +namespace chromecast { |
| +namespace media { |
| + |
| +namespace { |
| + |
| +// Converts ::media::AudioCodec to chromecast::media::AudioCodec. Any unknown or |
| +// unsupported codec will be converted to chromecast::media::kCodecUnknown. |
| +AudioCodec ToAudioCodec(const ::media::AudioCodec audio_codec) { |
| + switch (audio_codec) { |
| + case ::media::kCodecAAC: |
| + return kCodecAAC; |
| + case ::media::kCodecMP3: |
| + return kCodecMP3; |
| + case ::media::kCodecPCM: |
| + return kCodecPCM; |
| + case ::media::kCodecPCM_S16BE: |
| + return kCodecPCM_S16BE; |
| + case ::media::kCodecVorbis: |
| + return kCodecVorbis; |
| + default: |
| + LOG(INFO) << "Unsupported audio codec " << audio_codec; |
| + } |
| + return kAudioCodecUnknown; |
| +} |
| + |
| +// Converts ::media::VideoCodec to chromecast::media::VideoCodec. Any unknown or |
| +// unsupported codec will be converted to chromecast::media::kCodecUnknown. |
| +VideoCodec ToVideoCodec(const ::media::VideoCodec video_codec) { |
| + switch (video_codec) { |
| + case ::media::kCodecH264: |
| + return kCodecH264; |
| + case ::media::kCodecVP8: |
| + return kCodecVP8; |
| + case ::media::kCodecVP9: |
| + return kCodecVP9; |
| + default: |
| + LOG(INFO) << "Unsupported video codec " << video_codec; |
| + } |
| + return kVideoCodecUnknown; |
| +} |
| + |
| +// Converts ::media::VideoCodecProfile to chromecast::media::VideoProfile. |
| +VideoProfile ToVideoProfile(const ::media::VideoCodecProfile codec_profile) { |
| + switch(codec_profile) { |
| + case ::media::H264PROFILE_BASELINE: |
| + return kH264Baseline; |
| + case ::media::H264PROFILE_MAIN: |
| + return kH264Main; |
| + case ::media::H264PROFILE_EXTENDED: |
| + return kH264Extended; |
| + case ::media::H264PROFILE_HIGH: |
| + return kH264High; |
| + case ::media::H264PROFILE_HIGH10PROFILE: |
| + return kH264High10; |
| + case ::media::H264PROFILE_HIGH422PROFILE: |
| + return kH264High422; |
| + case ::media::H264PROFILE_HIGH444PREDICTIVEPROFILE: |
| + return kH264High444Predictive; |
| + case ::media::H264PROFILE_SCALABLEBASELINE: |
| + return kH264ScalabBaseline; |
|
gunsch
2015/04/29 17:42:52
rename: kH264ScalableBaseline
erickung1
2015/04/29 20:49:15
Done.
|
| + case ::media::H264PROFILE_SCALABLEHIGH: |
| + return kH264ScalableHigh; |
| + case ::media::H264PROFILE_STEREOHIGH: |
| + return kH264Stereohigh; |
| + case ::media::H264PROFILE_MULTIVIEWHIGH: |
| + return kH264MultiviewHigh; |
| + case ::media::VP8PROFILE_ANY: |
| + return kVP8ProfileAny; |
| + case ::media::VP9PROFILE_ANY: |
| + return kVP9ProfileAny; |
| + default: |
| + NOTREACHED(); |
| + } |
| + return kVideoProfileUnknown; |
| +} |
| + |
| +} // namespace |
| + |
| +// static |
| +AudioConfig DecoderConfigAdapter::ToAudioConfig( |
| + const ::media::AudioDecoderConfig& config) { |
| + AudioConfig audio_config; |
| + if (!config.IsValidConfig()) { |
| + return audio_config; |
| + } |
| + |
| + audio_config.codec = ToAudioCodec(config.codec()); |
| + audio_config.bytes_per_channel = config.bytes_per_channel(); |
| + audio_config.channel_number = |
| + ::media::ChannelLayoutToChannelCount(config.channel_layout()), |
| + audio_config.samples_per_second = config.samples_per_second(); |
| + audio_config.extra_data.assign( |
| + config.extra_data(), config.extra_data() + config.extra_data_size()); |
| + audio_config.is_encrypted = config.is_encrypted(); |
| + return audio_config; |
| +} |
| + |
| +// static |
| +VideoConfig DecoderConfigAdapter::ToVideoConfig( |
| + const ::media::VideoDecoderConfig& config) { |
| + VideoConfig video_config; |
| + if (!config.IsValidConfig()) { |
| + return video_config; |
| + } |
| + |
| + video_config.codec = ToVideoCodec(config.codec()); |
| + video_config.profile = ToVideoProfile(config.profile()); |
| + video_config.extra_data.assign( |
| + config.extra_data(), config.extra_data()+config.extra_data_size()); |
| + video_config.is_encrypted = config.is_encrypted(); |
| + return video_config; |
| +} |
| + |
| +} // namespace media |
| +} // namespace chromecast |