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

Unified Diff: media/filters/ffmpeg_video_decoder.cc

Issue 9632024: Create video and audio decoder threads on demand. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Switched to base::Bind() and reverted gyp change+new files 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_video_decoder.cc
diff --git a/media/filters/ffmpeg_video_decoder.cc b/media/filters/ffmpeg_video_decoder.cc
index fe53f35c76ae9a57506190d9f1d6c48166452e50..0a08be84c122ec3481ae6a2eb3a5fbd510bf9978 100644
--- a/media/filters/ffmpeg_video_decoder.cc
+++ b/media/filters/ffmpeg_video_decoder.cc
@@ -12,6 +12,7 @@
#include "media/base/filter_host.h"
#include "media/base/limits.h"
#include "media/base/media_switches.h"
+#include "media/base/message_loop_factory.h"
scherkus (not reviewing) 2012/03/09 20:01:16 not needed
tommi (sloooow) - chröme 2012/03/11 18:49:36 Done.
#include "media/base/pipeline.h"
#include "media/base/video_decoder_config.h"
#include "media/base/video_frame.h"
@@ -51,8 +52,10 @@ static int GetThreadCount(CodecID codec_id) {
return decode_threads;
}
-FFmpegVideoDecoder::FFmpegVideoDecoder(MessageLoop* message_loop)
- : message_loop_(message_loop),
+FFmpegVideoDecoder::FFmpegVideoDecoder(
+ const base::Callback<MessageLoop*()>& message_loop_cb)
+ : message_loop_cb_(message_loop_cb),
+ message_loop_(NULL),
state_(kUninitialized),
codec_context_(NULL),
av_frame_(NULL),
@@ -67,10 +70,12 @@ FFmpegVideoDecoder::~FFmpegVideoDecoder() {
void FFmpegVideoDecoder::Initialize(DemuxerStream* demuxer_stream,
const PipelineStatusCB& callback,
const StatisticsCallback& stats_callback) {
+ message_loop_ = message_loop_cb_.Run();
Ami GONE FROM CHROMIUM 2012/03/09 16:15:06 add message_loop_cb_.Reset(); for clarity after th
tommi (sloooow) - chröme 2012/03/11 18:49:36 Done.
if (MessageLoop::current() != message_loop_) {
- message_loop_->PostTask(FROM_HERE, base::Bind(
- &FFmpegVideoDecoder::Initialize, this,
- make_scoped_refptr(demuxer_stream), callback, stats_callback));
+ message_loop_->PostTask(FROM_HERE,
+ base::Bind(&FFmpegVideoDecoder::Initialize, this,
Ami GONE FROM CHROMIUM 2012/03/09 16:15:06 This indentation violates the google style guide.
tommi (sloooow) - chröme 2012/03/11 18:49:36 Done.
+ make_scoped_refptr(demuxer_stream), callback,
+ stats_callback));
return;
}
@@ -126,8 +131,8 @@ void FFmpegVideoDecoder::Initialize(DemuxerStream* demuxer_stream,
void FFmpegVideoDecoder::Stop(const base::Closure& callback) {
if (MessageLoop::current() != message_loop_) {
- message_loop_->PostTask(FROM_HERE, base::Bind(
- &FFmpegVideoDecoder::Stop, this, callback));
+ message_loop_->PostTask(FROM_HERE,
+ base::Bind(&FFmpegVideoDecoder::Stop, this, callback));
return;
}
@@ -138,8 +143,8 @@ void FFmpegVideoDecoder::Stop(const base::Closure& callback) {
void FFmpegVideoDecoder::Seek(base::TimeDelta time, const FilterStatusCB& cb) {
if (MessageLoop::current() != message_loop_) {
- message_loop_->PostTask(FROM_HERE, base::Bind(
- &FFmpegVideoDecoder::Seek, this, time, cb));
+ message_loop_->PostTask(FROM_HERE,
+ base::Bind(&FFmpegVideoDecoder::Seek, this, time, cb));
return;
}
@@ -148,8 +153,8 @@ void FFmpegVideoDecoder::Seek(base::TimeDelta time, const FilterStatusCB& cb) {
void FFmpegVideoDecoder::Pause(const base::Closure& callback) {
if (MessageLoop::current() != message_loop_) {
- message_loop_->PostTask(FROM_HERE, base::Bind(
- &FFmpegVideoDecoder::Pause, this, callback));
+ message_loop_->PostTask(FROM_HERE,
+ base::Bind(&FFmpegVideoDecoder::Pause, this, callback));
return;
}
@@ -158,8 +163,8 @@ void FFmpegVideoDecoder::Pause(const base::Closure& callback) {
void FFmpegVideoDecoder::Flush(const base::Closure& callback) {
if (MessageLoop::current() != message_loop_) {
- message_loop_->PostTask(FROM_HERE, base::Bind(
- &FFmpegVideoDecoder::Flush, this, callback));
+ message_loop_->PostTask(FROM_HERE,
+ base::Bind(&FFmpegVideoDecoder::Flush, this, callback));
return;
}
@@ -171,8 +176,8 @@ void FFmpegVideoDecoder::Flush(const base::Closure& callback) {
void FFmpegVideoDecoder::Read(const ReadCB& callback) {
// Complete operation asynchronously on different stack of execution as per
// the API contract of VideoDecoder::Read()
- message_loop_->PostTask(FROM_HERE, base::Bind(
- &FFmpegVideoDecoder::DoRead, this, callback));
+ message_loop_->PostTask(FROM_HERE,
+ base::Bind(&FFmpegVideoDecoder::DoRead, this, callback));
}
const gfx::Size& FFmpegVideoDecoder::natural_size() {
@@ -211,8 +216,8 @@ void FFmpegVideoDecoder::ReadFromDemuxerStream() {
void FFmpegVideoDecoder::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(
- &FFmpegVideoDecoder::DoDecodeBuffer, this, buffer));
+ message_loop_->PostTask(FROM_HERE,
+ base::Bind(&FFmpegVideoDecoder::DoDecodeBuffer, this, buffer));
}
void FFmpegVideoDecoder::DoDecodeBuffer(const scoped_refptr<Buffer>& buffer) {

Powered by Google App Engine
This is Rietveld 408576698