| Index: media/filters/ffmpeg_audio_decoder.cc
|
| diff --git a/media/filters/ffmpeg_audio_decoder.cc b/media/filters/ffmpeg_audio_decoder.cc
|
| index 8a7991a89fc115faf04f0ffee9dc57465804c316..884cde93f3ce4e1751b6033e03b16e2599b9078c 100644
|
| --- a/media/filters/ffmpeg_audio_decoder.cc
|
| +++ b/media/filters/ffmpeg_audio_decoder.cc
|
| @@ -4,6 +4,7 @@
|
|
|
| #include "media/filters/ffmpeg_audio_decoder.h"
|
|
|
| +#include "media/base/callback.h"
|
| #include "media/base/data_buffer.h"
|
| #include "media/base/limits.h"
|
| #include "media/filters/ffmpeg_common.h"
|
| @@ -29,11 +30,16 @@ bool FFmpegAudioDecoder::IsMediaFormatSupported(const MediaFormat& format) {
|
| mime_type::kFFmpegAudio == mime_type;
|
| }
|
|
|
| -bool FFmpegAudioDecoder::OnInitialize(DemuxerStream* demuxer_stream) {
|
| +void FFmpegAudioDecoder::DoInitialize(DemuxerStream* demuxer_stream,
|
| + bool* success,
|
| + Task* done_cb) {
|
| + AutoTaskRunner done_runner(done_cb);
|
| + *success = false;
|
| +
|
| // Get the AVStream by querying for the provider interface.
|
| AVStreamProvider* av_stream_provider;
|
| if (!demuxer_stream->QueryInterface(&av_stream_provider)) {
|
| - return false;
|
| + return;
|
| }
|
| AVStream* av_stream = av_stream_provider->GetAVStream();
|
|
|
| @@ -48,15 +54,17 @@ bool FFmpegAudioDecoder::OnInitialize(DemuxerStream* demuxer_stream) {
|
| bps == 0 ||
|
| static_cast<size_t>(bps) > Limits::kMaxBPS ||
|
| codec_context_->sample_rate == 0 ||
|
| - static_cast<size_t>(codec_context_->sample_rate) > Limits::kMaxSampleRate)
|
| - return false;
|
| + (static_cast<size_t>(codec_context_->sample_rate) >
|
| + Limits::kMaxSampleRate)) {
|
| + return;
|
| + }
|
|
|
| // Serialize calls to avcodec_open().
|
| AVCodec* codec = avcodec_find_decoder(codec_context_->codec_id);
|
| {
|
| AutoLock auto_lock(FFmpegLock::get()->lock());
|
| if (!codec || avcodec_open(codec_context_, codec) < 0) {
|
| - return false;
|
| + return;
|
| }
|
| }
|
|
|
| @@ -78,20 +86,21 @@ bool FFmpegAudioDecoder::OnInitialize(DemuxerStream* demuxer_stream) {
|
| output_buffer_.reset(static_cast<uint8*>(av_malloc(kOutputBufferSize)));
|
| if (!output_buffer_.get()) {
|
| host()->SetError(PIPELINE_ERROR_OUT_OF_MEMORY);
|
| - return false;
|
| + return;
|
| }
|
| - return true;
|
| + *success = true;
|
| }
|
|
|
| -void FFmpegAudioDecoder::OnSeek(base::TimeDelta time) {
|
| +void FFmpegAudioDecoder::DoSeek(base::TimeDelta time, Task* done_cb) {
|
| avcodec_flush_buffers(codec_context_);
|
| estimated_next_timestamp_ = StreamSample::kInvalidTimestamp;
|
| + done_cb->Run();
|
| + delete done_cb;
|
| }
|
|
|
| -void FFmpegAudioDecoder::OnStop() {
|
| -}
|
| +void FFmpegAudioDecoder::DoDecode(Buffer* input, Task* done_cb) {
|
| + AutoTaskRunner done_runner(done_cb);
|
|
|
| -void FFmpegAudioDecoder::OnDecode(Buffer* input) {
|
| // Due to FFmpeg API changes we no longer have const read-only pointers.
|
| AVPacket packet;
|
| av_init_packet(&packet);
|
|
|