| Index: media/filters/ffmpeg_audio_decoder.cc
|
| diff --git a/media/filters/ffmpeg_audio_decoder.cc b/media/filters/ffmpeg_audio_decoder.cc
|
| index acb0d752fca723572acdc67b4fa33da1abd57222..24798c5f8d353859ff498c17bf0ef25309302209 100644
|
| --- a/media/filters/ffmpeg_audio_decoder.cc
|
| +++ b/media/filters/ffmpeg_audio_decoder.cc
|
| @@ -8,6 +8,7 @@
|
| #include "media/base/audio_decoder_config.h"
|
| #include "media/base/data_buffer.h"
|
| #include "media/base/demuxer.h"
|
| +#include "media/base/message_loop_factory.h"
|
| #include "media/base/pipeline.h"
|
| #include "media/ffmpeg/ffmpeg_common.h"
|
|
|
| @@ -45,8 +46,11 @@ static bool IsEndOfStream(int result, int decoded_size, Buffer* input) {
|
| }
|
|
|
|
|
| -FFmpegAudioDecoder::FFmpegAudioDecoder(MessageLoop* message_loop)
|
| - : message_loop_(message_loop),
|
| +FFmpegAudioDecoder::FFmpegAudioDecoder(MessageLoopFactory* loop_factory,
|
| + const std::string& loop_name)
|
| + : message_loop_factory_(loop_factory),
|
| + loop_name_(loop_name),
|
| + message_loop_(NULL),
|
| codec_context_(NULL),
|
| bits_per_channel_(0),
|
| channel_layout_(CHANNEL_LAYOUT_NONE),
|
| @@ -71,8 +75,7 @@ void FFmpegAudioDecoder::Initialize(
|
| const scoped_refptr<DemuxerStream>& stream,
|
| const PipelineStatusCB& callback,
|
| const StatisticsCallback& stats_callback) {
|
| - message_loop_->PostTask(
|
| - FROM_HERE,
|
| + EnsureMessageLoop()->PostTask(FROM_HERE,
|
| base::Bind(&FFmpegAudioDecoder::DoInitialize, this,
|
| stream, callback, stats_callback));
|
| }
|
| @@ -80,8 +83,8 @@ void FFmpegAudioDecoder::Initialize(
|
| void FFmpegAudioDecoder::Read(const ReadCB& callback) {
|
| // Complete operation asynchronously on different stack of execution as per
|
| // the API contract of AudioDecoder::Read()
|
| - message_loop_->PostTask(FROM_HERE, base::Bind(
|
| - &FFmpegAudioDecoder::DoRead, this, callback));
|
| + EnsureMessageLoop()->PostTask(FROM_HERE,
|
| + base::Bind(&FFmpegAudioDecoder::DoRead, this, callback));
|
| }
|
|
|
| int FFmpegAudioDecoder::bits_per_channel() {
|
| @@ -97,8 +100,8 @@ int FFmpegAudioDecoder::samples_per_second() {
|
| }
|
|
|
| void FFmpegAudioDecoder::Reset(const base::Closure& closure) {
|
| - message_loop_->PostTask(FROM_HERE, base::Bind(
|
| - &FFmpegAudioDecoder::DoReset, this, closure));
|
| + EnsureMessageLoop()->PostTask(FROM_HERE,
|
| + base::Bind(&FFmpegAudioDecoder::DoReset, this, closure));
|
| }
|
|
|
| void FFmpegAudioDecoder::DoInitialize(
|
| @@ -249,8 +252,8 @@ void FFmpegAudioDecoder::ReadFromDemuxerStream() {
|
| void FFmpegAudioDecoder::DecodeBuffer(const scoped_refptr<Buffer>& buffer) {
|
| // TODO(scherkus): fix FFmpegDemuxerStream::Read() to not execute our read
|
| // callback on the same execution stack so we can get rid of forced task post.
|
| - message_loop_->PostTask(FROM_HERE, base::Bind(
|
| - &FFmpegAudioDecoder::DoDecodeBuffer, this, buffer));
|
| + EnsureMessageLoop()->PostTask(FROM_HERE,
|
| + base::Bind(&FFmpegAudioDecoder::DoDecodeBuffer, this, buffer));
|
| }
|
|
|
| void FFmpegAudioDecoder::UpdateDurationAndTimestamp(
|
| @@ -290,4 +293,10 @@ void FFmpegAudioDecoder::DeliverSamples(const scoped_refptr<Buffer>& samples) {
|
| read_cb.Run(samples);
|
| }
|
|
|
| +MessageLoop* FFmpegAudioDecoder::EnsureMessageLoop() {
|
| + if (!message_loop_)
|
| + message_loop_ = message_loop_factory_->GetMessageLoop(loop_name_);
|
| + return message_loop_;
|
| +}
|
| +
|
| } // namespace media
|
|
|