Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4052)

Unified Diff: chromecast/media/cma/base/decoder_config_adapter.cc

Issue 1074383002: Introduce VideoConfig/AudioConfig class for CMA backend (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: single DecoderConfig structure for both Audio and Video Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..f65e682e7b984053e1ac6b459c1d2a3af1dadc98
--- /dev/null
+++ b/chromecast/media/cma/base/decoder_config_adapter.cc
@@ -0,0 +1,147 @@
+// 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 {
+
+// Maximum audio bytes per sample.
+static int kMaxBytesPerSample = 4;
+
+// Maximum audio sampling rate.
+static int kMaxSampleRate = 192000;
+
+}
+
+namespace chromecast {
+namespace media {
+
+// static
+Codec DecoderConfigAdapter::ToCodec(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:
+ NOTREACHED();
gunsch 2015/04/17 01:38:51 NOTREACHED is generally considered fatal. Is there
erickung1 2015/04/29 08:52:20 Done. Idea is to notify that the codec is unsuppor
+ break;
+ }
+ return kUnknownCodec;
+}
+
+// static
+Codec DecoderConfigAdapter::ToCodec(const ::media::VideoCodec video_codec) {
+ switch (video_codec) {
+ case ::media::kCodecH264:
+ return kCodecH264;
+ case ::media::kCodecVP8:
+ return kCodecVP8;
+ case ::media::kCodecVP9:
+ return kCodecVP9;
+ default:
+ NOTREACHED();
+ break;
+ }
+ return kUnknownCodec;
+}
+
+// static
+Profile DecoderConfigAdapter::ToProfile(
+ 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;
+ 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 kCodecProfileUnknown;
+}
+
+// static
+DecoderConfig DecoderConfigAdapter::ToDecoderConfig(
+ const ::media::AudioDecoderConfig& config) {
+ DecoderConfig decoder_config;
+ if (!config.IsValidConfig()) {
+ return decoder_config;
gunsch 2015/04/17 02:21:26 I wonder if this would be an appropriate place to
erickung1 2015/04/29 08:52:20 The idea of this util function is to 1. convert f
+ }
+
+ decoder_config.codec = DecoderConfigAdapter::ToCodec(config.codec());
+ decoder_config.profile = kCodecProfileUnknown;
+ decoder_config.bytes_per_channel = config.bytes_per_channel();
+ decoder_config.channel_number =
+ ::media::ChannelLayoutToChannelCount(config.channel_layout()),
+ decoder_config.samples_per_second = config.samples_per_second();
+ decoder_config.extra_data.assign(
+ config.extra_data(), config.extra_data() + config.extra_data_size());
+ decoder_config.is_encrypted = config.is_encrypted();
+ decoder_config.is_valid_config =
+ decoder_config.codec >= kAudioCodecMin &&
+ decoder_config.codec <= kAudioCodecMax &&
+ decoder_config.channel_number > 0 &&
+ decoder_config.bytes_per_channel > 0 &&
+ decoder_config.bytes_per_channel <= kMaxBytesPerSample &&
+ decoder_config.samples_per_second > 0 &&
+ decoder_config.samples_per_second <= kMaxSampleRate;
+
+ return decoder_config;
+}
+
+// static
+DecoderConfig DecoderConfigAdapter::ToDecoderConfig(
+ const ::media::VideoDecoderConfig& config) {
+ DecoderConfig decoder_config;
+ if (!config.IsValidConfig()) {
+ return decoder_config;
+ }
+
+ decoder_config.codec = DecoderConfigAdapter::ToCodec(config.codec());
+ decoder_config.profile = DecoderConfigAdapter::ToProfile(config.profile());
+ decoder_config.bytes_per_channel = -1;
+ decoder_config.channel_number = -1;
+ decoder_config.samples_per_second = -1;
+ decoder_config.extra_data.assign(
+ config.extra_data(), config.extra_data()+config.extra_data_size());
+ decoder_config.is_encrypted = config.is_encrypted();
+ decoder_config.is_valid_config =
+ decoder_config.codec >= kVideoCodecMin &&
+ decoder_config.codec <= kVideoCodecMax;;
+ return decoder_config;
+}
+
+} // namespace media
+} // namespace chromecast

Powered by Google App Engine
This is Rietveld 408576698