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

Unified Diff: media/ffmpeg/ffmpeg_common.cc

Issue 2752323002: Support Opus Ambisonics playback (Closed)
Patch Set: +pipeline integration tests, +test media, minor fixes Created 3 years, 9 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: media/ffmpeg/ffmpeg_common.cc
diff --git a/media/ffmpeg/ffmpeg_common.cc b/media/ffmpeg/ffmpeg_common.cc
index 251fbdfabf440b52f65fb6b36c3fc6cf7317e1e3..0f949e37f861f6fce0ce73a4e8215be3072fb3b6 100644
--- a/media/ffmpeg/ffmpeg_common.cc
+++ b/media/ffmpeg/ffmpeg_common.cc
@@ -324,8 +324,16 @@ bool AVCodecContextToAudioDecoderConfig(
SampleFormat sample_format = AVSampleFormatToSampleFormat(
codec_context->sample_fmt, codec_context->codec_id);
- ChannelLayout channel_layout = ChannelLayoutToChromeChannelLayout(
- codec_context->channel_layout, codec_context->channels);
+ bool is_opus_discrete = false;
+ if (codec == kCodecOpus && codec_context->extradata_size >= 19) {
+ int mapping_family = codec_context->extradata[18];
+ is_opus_discrete = mapping_family == 2;
+ }
+ ChannelLayout channel_layout =
+ is_opus_discrete && codec_context->channels > 8
+ ? CHANNEL_LAYOUT_DISCRETE
+ : ChannelLayoutToChromeChannelLayout(codec_context->channel_layout,
+ codec_context->channels);
int sample_rate = codec_context->sample_rate;
switch (codec) {
@@ -371,6 +379,7 @@ bool AVCodecContextToAudioDecoderConfig(
config->Initialize(codec, sample_format, channel_layout, sample_rate,
extra_data, encryption_scheme, seek_preroll,
codec_context->delay);
+ config->SetChannelsForDiscrete(codec_context->channels);
#if BUILDFLAG(ENABLE_AC3_EAC3_AUDIO_DEMUXING)
// These are bitstream formats unknown to ffmpeg, so they don't have
@@ -419,8 +428,7 @@ void AudioDecoderConfigToAVCodecContext(const AudioDecoderConfig& config,
// TODO(scherkus): should we set |channel_layout|? I'm not sure if FFmpeg uses
// said information to decode.
- codec_context->channels =
- ChannelLayoutToChannelCount(config.channel_layout());
+ codec_context->channels = config.channels();
codec_context->sample_rate = config.samples_per_second();
if (config.extra_data().empty()) {

Powered by Google App Engine
This is Rietveld 408576698