| Index: media/filters/ffmpeg_audio_decoder.cc
|
| diff --git a/media/filters/ffmpeg_audio_decoder.cc b/media/filters/ffmpeg_audio_decoder.cc
|
| index 9f5325a24803ed92dc72f67d9a81329c0a6ffc29..602f5e0f24554090da6013a9fcd6f418ba5fe88e 100644
|
| --- a/media/filters/ffmpeg_audio_decoder.cc
|
| +++ b/media/filters/ffmpeg_audio_decoder.cc
|
| @@ -403,6 +403,9 @@ bool FFmpegAudioDecoder::ConfigureDecoder() {
|
| codec_context_->get_buffer2 = GetAudioBuffer;
|
| codec_context_->refcounted_frames = 1;
|
|
|
| + if (config_.codec() == kCodecOpus)
|
| + codec_context_->request_sample_fmt = AV_SAMPLE_FMT_FLT;
|
| +
|
| AVCodec* codec = avcodec_find_decoder(codec_context_->codec_id);
|
| if (!codec || avcodec_open2(codec_context_.get(), codec, NULL) < 0) {
|
| DLOG(ERROR) << "Could not initialize audio decoder: "
|
| @@ -432,9 +435,13 @@ bool FFmpegAudioDecoder::ConfigureDecoder() {
|
| }
|
|
|
| void FFmpegAudioDecoder::ResetTimestampState() {
|
| - discard_helper_.reset(new AudioDiscardHelper(config_.samples_per_second(),
|
| - config_.codec_delay()));
|
| - discard_helper_->Reset(config_.codec_delay());
|
| + // Opus codec delay is handled by ffmpeg.
|
| + const int codec_delay =
|
| + config_.codec() == kCodecOpus ? 0 : config_.codec_delay();
|
| + discard_helper_.reset(
|
| + new AudioDiscardHelper(config_.samples_per_second(), codec_delay,
|
| + config_.codec() == kCodecVorbis));
|
| + discard_helper_->Reset(codec_delay);
|
| }
|
|
|
| } // namespace media
|
|
|