Index: media/filters/ffmpeg_audio_decoder.cc |
diff --git a/media/filters/ffmpeg_audio_decoder.cc b/media/filters/ffmpeg_audio_decoder.cc |
index e6673308a16060e04165f30b919fc5041bd4ef50..c8f8f50a1a7bf574664645c44b2f29782d36febd 100644 |
--- a/media/filters/ffmpeg_audio_decoder.cc |
+++ b/media/filters/ffmpeg_audio_decoder.cc |
@@ -128,10 +128,6 @@ FFmpegAudioDecoder::FFmpegAudioDecoder( |
const scoped_refptr<base::SingleThreadTaskRunner>& task_runner) |
: task_runner_(task_runner), |
state_(kUninitialized), |
- bytes_per_channel_(0), |
- channel_layout_(CHANNEL_LAYOUT_NONE), |
- channels_(0), |
- samples_per_second_(0), |
av_sample_format_(0), |
last_input_timestamp_(kNoTimestamp()), |
output_frames_to_drop_(0) {} |
@@ -197,21 +193,6 @@ scoped_refptr<AudioBuffer> FFmpegAudioDecoder::GetDecodeOutput() { |
return out; |
} |
-int FFmpegAudioDecoder::bits_per_channel() { |
- DCHECK(task_runner_->BelongsToCurrentThread()); |
- return bytes_per_channel_ * 8; |
-} |
- |
-ChannelLayout FFmpegAudioDecoder::channel_layout() { |
- DCHECK(task_runner_->BelongsToCurrentThread()); |
- return channel_layout_; |
-} |
- |
-int FFmpegAudioDecoder::samples_per_second() { |
- DCHECK(task_runner_->BelongsToCurrentThread()); |
- return samples_per_second_; |
-} |
- |
void FFmpegAudioDecoder::Reset(const base::Closure& closure) { |
DCHECK(task_runner_->BelongsToCurrentThread()); |
@@ -286,8 +267,8 @@ void FFmpegAudioDecoder::DecodeBuffer( |
buffer->timestamp() < base::TimeDelta()) { |
// Dropping frames for negative timestamps as outlined in section A.2 |
// in the Vorbis spec. http://xiph.org/vorbis/doc/Vorbis_I_spec.html |
- output_frames_to_drop_ = floor( |
- 0.5 + -buffer->timestamp().InSecondsF() * samples_per_second_); |
+ output_frames_to_drop_ = floor(0.5 + -buffer->timestamp().InSecondsF() * |
+ config_.samples_per_second()); |
} else { |
if (last_input_timestamp_ != kNoTimestamp() && |
buffer->timestamp() < last_input_timestamp_) { |
@@ -392,17 +373,14 @@ bool FFmpegAudioDecoder::FFmpegDecode( |
int original_frames = 0; |
int channels = DetermineChannels(av_frame_.get()); |
if (frame_decoded) { |
- |
- // TODO(rileya) Remove this check once we properly support midstream audio |
- // config changes. |
if (av_frame_->sample_rate != config_.samples_per_second() || |
- channels != channels_ || |
+ channels != ChannelLayoutToChannelCount(config_.channel_layout()) || |
av_frame_->format != av_sample_format_) { |
DLOG(ERROR) << "Unsupported midstream configuration change!" |
<< " Sample Rate: " << av_frame_->sample_rate << " vs " |
- << samples_per_second_ |
+ << config_.samples_per_second() |
<< ", Channels: " << channels << " vs " |
- << channels_ |
+ << ChannelLayoutToChannelCount(config_.channel_layout()) |
<< ", Sample Format: " << av_frame_->format << " vs " |
<< av_sample_format_; |
@@ -417,7 +395,8 @@ bool FFmpegAudioDecoder::FFmpegDecode( |
output = reinterpret_cast<AudioBuffer*>( |
av_buffer_get_opaque(av_frame_->buf[0])); |
- DCHECK_EQ(channels_, output->channel_count()); |
+ DCHECK_EQ(ChannelLayoutToChannelCount(config_.channel_layout()), |
+ output->channel_count()); |
original_frames = av_frame_->nb_samples; |
int unread_frames = output->frame_count() - original_frames; |
DCHECK_GE(unread_frames, 0); |
@@ -480,21 +459,6 @@ bool FFmpegAudioDecoder::ConfigureDecoder() { |
return false; |
} |
- // TODO(rileya) Remove this check once we properly support midstream audio |
- // config changes. |
- if (codec_context_.get() && |
- (channel_layout_ != config_.channel_layout() || |
- samples_per_second_ != config_.samples_per_second())) { |
- DVLOG(1) << "Unsupported config change :"; |
- DVLOG(1) << "\tbytes_per_channel : " << bytes_per_channel_ |
- << " -> " << config_.bytes_per_channel(); |
- DVLOG(1) << "\tchannel_layout : " << channel_layout_ |
- << " -> " << config_.channel_layout(); |
- DVLOG(1) << "\tsample_rate : " << samples_per_second_ |
- << " -> " << config_.samples_per_second(); |
- return false; |
- } |
- |
// Release existing decoder resources if necessary. |
ReleaseFFmpegResources(); |
@@ -517,27 +481,21 @@ bool FFmpegAudioDecoder::ConfigureDecoder() { |
// Success! |
av_frame_.reset(av_frame_alloc()); |
- channel_layout_ = config_.channel_layout(); |
- samples_per_second_ = config_.samples_per_second(); |
output_timestamp_helper_.reset( |
new AudioTimestampHelper(config_.samples_per_second())); |
- // Store initial values to guard against midstream configuration changes. |
- channels_ = codec_context_->channels; |
- if (channels_ != ChannelLayoutToChannelCount(channel_layout_)) { |
+ av_sample_format_ = codec_context_->sample_fmt; |
+ |
+ if (codec_context_->channels != |
+ ChannelLayoutToChannelCount(config_.channel_layout())) { |
DLOG(ERROR) << "Audio configuration specified " |
- << ChannelLayoutToChannelCount(channel_layout_) |
+ << ChannelLayoutToChannelCount(config_.channel_layout()) |
<< " channels, but FFmpeg thinks the file contains " |
- << channels_ << " channels"; |
+ << codec_context_->channels << " channels"; |
ReleaseFFmpegResources(); |
state_ = kUninitialized; |
return false; |
} |
- av_sample_format_ = codec_context_->sample_fmt; |
- sample_format_ = AVSampleFormatToSampleFormat( |
- static_cast<AVSampleFormat>(av_sample_format_)); |
- bytes_per_channel_ = SampleFormatToBytesPerChannel(sample_format_); |
- |
return true; |
} |