| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "media/filters/ffmpeg_audio_decoder.h" | 5 #include "media/filters/ffmpeg_audio_decoder.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 | 8 |
| 9 #include "base/callback_helpers.h" | 9 #include "base/callback_helpers.h" |
| 10 #include "base/single_thread_task_runner.h" | 10 #include "base/single_thread_task_runner.h" |
| (...skipping 374 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 385 av_frame_.reset(); | 385 av_frame_.reset(); |
| 386 } | 386 } |
| 387 | 387 |
| 388 bool FFmpegAudioDecoder::ConfigureDecoder() { | 388 bool FFmpegAudioDecoder::ConfigureDecoder() { |
| 389 DCHECK(config_.IsValidConfig()); | 389 DCHECK(config_.IsValidConfig()); |
| 390 DCHECK(!config_.is_encrypted()); | 390 DCHECK(!config_.is_encrypted()); |
| 391 | 391 |
| 392 // Release existing decoder resources if necessary. | 392 // Release existing decoder resources if necessary. |
| 393 ReleaseFFmpegResources(); | 393 ReleaseFFmpegResources(); |
| 394 | 394 |
| 395 // Use OpusAudioDecoder for Opus for now, even if FFmpeg claims to support |
| 396 // Opus decode. Failure to configure here should lead to fall-back to |
| 397 // OpusAudioDecoder. |
| 398 // TODO(wolenetz,dalecurtis): Remove OpusAudioDecoder and use |
| 399 // FFmpegAudioDecoder instead for Opus. |
| 400 if (config_.codec() == kCodecOpus) { |
| 401 MEDIA_LOG(DEBUG, media_log_) |
| 402 << "Opus decode via FFmpegAudioDecoder is disabled"; |
| 403 state_ = kUninitialized; |
| 404 return false; |
| 405 } |
| 406 |
| 395 // Initialize AVCodecContext structure. | 407 // Initialize AVCodecContext structure. |
| 396 codec_context_.reset(avcodec_alloc_context3(NULL)); | 408 codec_context_.reset(avcodec_alloc_context3(NULL)); |
| 397 AudioDecoderConfigToAVCodecContext(config_, codec_context_.get()); | 409 AudioDecoderConfigToAVCodecContext(config_, codec_context_.get()); |
| 398 | 410 |
| 399 codec_context_->opaque = this; | 411 codec_context_->opaque = this; |
| 400 codec_context_->get_buffer2 = GetAudioBuffer; | 412 codec_context_->get_buffer2 = GetAudioBuffer; |
| 401 codec_context_->refcounted_frames = 1; | 413 codec_context_->refcounted_frames = 1; |
| 402 | 414 |
| 403 AVCodec* codec = avcodec_find_decoder(codec_context_->codec_id); | 415 AVCodec* codec = avcodec_find_decoder(codec_context_->codec_id); |
| 404 if (!codec || avcodec_open2(codec_context_.get(), codec, NULL) < 0) { | 416 if (!codec || avcodec_open2(codec_context_.get(), codec, NULL) < 0) { |
| (...skipping 23 matching lines...) Expand all Loading... |
| 428 return true; | 440 return true; |
| 429 } | 441 } |
| 430 | 442 |
| 431 void FFmpegAudioDecoder::ResetTimestampState() { | 443 void FFmpegAudioDecoder::ResetTimestampState() { |
| 432 discard_helper_.reset(new AudioDiscardHelper(config_.samples_per_second(), | 444 discard_helper_.reset(new AudioDiscardHelper(config_.samples_per_second(), |
| 433 config_.codec_delay())); | 445 config_.codec_delay())); |
| 434 discard_helper_->Reset(config_.codec_delay()); | 446 discard_helper_->Reset(config_.codec_delay()); |
| 435 } | 447 } |
| 436 | 448 |
| 437 } // namespace media | 449 } // namespace media |
| OLD | NEW |