Index: media/filters/decoder_base.h |
diff --git a/media/filters/decoder_base.h b/media/filters/decoder_base.h |
index f8b26abb645bfbc903a44e6e218bd66b4fa68091..7ddd16e159b7f3051f9d803290fb4f2ae680f1bb 100644 |
--- a/media/filters/decoder_base.h |
+++ b/media/filters/decoder_base.h |
@@ -26,17 +26,16 @@ namespace media { |
template <class Decoder, class Output> |
class DecoderBase : public Decoder { |
public: |
- |
// Filter implementation. |
virtual void Stop(FilterCallback* callback) { |
- this->message_loop()->PostTask( |
+ message_loop_->PostTask( |
FROM_HERE, |
NewRunnableMethod(this, &DecoderBase::StopTask, callback)); |
} |
virtual void Seek(base::TimeDelta time, |
FilterCallback* callback) { |
- this->message_loop()->PostTask( |
+ message_loop_->PostTask( |
FROM_HERE, |
NewRunnableMethod(this, &DecoderBase::SeekTask, time, callback)); |
} |
@@ -44,7 +43,7 @@ class DecoderBase : public Decoder { |
// Decoder implementation. |
virtual void Initialize(DemuxerStream* demuxer_stream, |
FilterCallback* callback) { |
- this->message_loop()->PostTask( |
+ message_loop_->PostTask( |
FROM_HERE, |
NewRunnableMethod(this, |
&DecoderBase::InitializeTask, |
@@ -58,13 +57,14 @@ class DecoderBase : public Decoder { |
// Note that this class is only used by the audio decoder, this will |
// eventually be merged into FFmpegAudioDecoder. |
virtual void ProduceAudioSamples(scoped_refptr<Output> output) { |
- this->message_loop()->PostTask(FROM_HERE, |
+ message_loop_->PostTask(FROM_HERE, |
NewRunnableMethod(this, &DecoderBase::ReadTask, output)); |
} |
protected: |
- DecoderBase() |
- : pending_reads_(0), |
+ explicit DecoderBase(MessageLoop* message_loop) |
+ : message_loop_(message_loop), |
+ pending_reads_(0), |
pending_requests_(0), |
state_(kUninitialized) { |
} |
@@ -78,7 +78,7 @@ class DecoderBase : public Decoder { |
// It places an output buffer in the result queue. It must be called from |
// within the OnDecode method. |
void EnqueueResult(Output* output) { |
- DCHECK_EQ(MessageLoop::current(), this->message_loop()); |
+ DCHECK_EQ(MessageLoop::current(), message_loop_); |
if (!IsStopped()) { |
result_queue_.push_back(output); |
} |
@@ -136,6 +136,9 @@ class DecoderBase : public Decoder { |
} |
} |
+ // Provide access to subclasses. |
+ MessageLoop* message_loop() { return message_loop_; } |
+ |
private: |
bool IsStopped() { return state_ == kStopped; } |
@@ -146,12 +149,12 @@ class DecoderBase : public Decoder { |
// TODO(scherkus): change the callback format to pass a scoped_refptr<> or |
// better yet see if we can get away with not using reference counting. |
scoped_refptr<Buffer> buffer_ref = buffer; |
- this->message_loop()->PostTask(FROM_HERE, |
+ message_loop_->PostTask(FROM_HERE, |
NewRunnableMethod(this, &DecoderBase::ReadCompleteTask, buffer_ref)); |
} |
void StopTask(FilterCallback* callback) { |
- DCHECK_EQ(MessageLoop::current(), this->message_loop()); |
+ DCHECK_EQ(MessageLoop::current(), message_loop_); |
// Delegate to the subclass first. |
DoStop(NewRunnableMethod(this, &DecoderBase::OnStopComplete, callback)); |
@@ -169,7 +172,7 @@ class DecoderBase : public Decoder { |
} |
void SeekTask(base::TimeDelta time, FilterCallback* callback) { |
- DCHECK_EQ(MessageLoop::current(), this->message_loop()); |
+ DCHECK_EQ(MessageLoop::current(), message_loop_); |
DCHECK_EQ(0u, pending_reads_) << "Pending reads should have completed"; |
DCHECK_EQ(0u, pending_requests_) << "Pending requests should be empty"; |
@@ -190,7 +193,7 @@ class DecoderBase : public Decoder { |
} |
void InitializeTask(DemuxerStream* demuxer_stream, FilterCallback* callback) { |
- DCHECK_EQ(MessageLoop::current(), this->message_loop()); |
+ DCHECK_EQ(MessageLoop::current(), message_loop_); |
CHECK(kUninitialized == state_); |
CHECK(!demuxer_stream_); |
demuxer_stream_ = demuxer_stream; |
@@ -208,7 +211,7 @@ class DecoderBase : public Decoder { |
scoped_ptr<bool> success_deleter(success); |
AutoCallbackRunner done_runner(done_cb); |
- DCHECK_EQ(MessageLoop::current(), this->message_loop()); |
+ DCHECK_EQ(MessageLoop::current(), message_loop_); |
// Delegate to subclass first. |
if (!*success) { |
this->host()->SetError(PIPELINE_ERROR_DECODE); |
@@ -220,7 +223,7 @@ class DecoderBase : public Decoder { |
} |
void ReadTask(scoped_refptr<Output> output) { |
- DCHECK_EQ(MessageLoop::current(), this->message_loop()); |
+ DCHECK_EQ(MessageLoop::current(), message_loop_); |
// TODO(scherkus): should reply with a null operation (empty buffer). |
if (IsStopped()) |
@@ -239,7 +242,7 @@ class DecoderBase : public Decoder { |
} |
void ReadCompleteTask(scoped_refptr<Buffer> buffer) { |
- DCHECK_EQ(MessageLoop::current(), this->message_loop()); |
+ DCHECK_EQ(MessageLoop::current(), message_loop_); |
DCHECK_GT(pending_reads_, 0u); |
--pending_reads_; |
if (IsStopped()) { |
@@ -255,7 +258,7 @@ class DecoderBase : public Decoder { |
// |
// Return true if one read request is fulfilled. |
bool FulfillPendingRead() { |
- DCHECK_EQ(MessageLoop::current(), this->message_loop()); |
+ DCHECK_EQ(MessageLoop::current(), message_loop_); |
if (!pending_requests_ || result_queue_.empty()) { |
return false; |
} |
@@ -274,6 +277,8 @@ class DecoderBase : public Decoder { |
return true; |
} |
+ MessageLoop* message_loop_; |
+ |
// Tracks the number of asynchronous reads issued to |demuxer_stream_|. |
// Using size_t since it is always compared against deque::size(). |
size_t pending_reads_; |