Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(832)

Unified Diff: media/filters/ffmpeg_audio_decoder.cc

Issue 9632024: Create video and audio decoder threads on demand. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698