| Index: media/filters/decoder_base.h
|
| diff --git a/media/filters/decoder_base.h b/media/filters/decoder_base.h
|
| index 775d3f961e9bf77a38e772354c34a16b23c6b71b..3e1ba52c89a4c6f2de388aa869f6635a2efcfa7d 100644
|
| --- a/media/filters/decoder_base.h
|
| +++ b/media/filters/decoder_base.h
|
| @@ -33,16 +33,18 @@ class DecoderBase : public Decoder {
|
| NewRunnableMethod(this, &DecoderBase::StopTask));
|
| }
|
|
|
| - virtual void Seek(base::TimeDelta time) {
|
| + virtual void Seek(base::TimeDelta time,
|
| + FilterCallback* callback) {
|
| this->message_loop()->PostTask(FROM_HERE,
|
| - NewRunnableMethod(this, &DecoderBase::SeekTask, time));
|
| + NewRunnableMethod(this, &DecoderBase::SeekTask, time, callback));
|
| }
|
|
|
| // Decoder implementation.
|
| - virtual bool Initialize(DemuxerStream* demuxer_stream) {
|
| + virtual void Initialize(DemuxerStream* demuxer_stream,
|
| + FilterCallback* callback) {
|
| this->message_loop()->PostTask(FROM_HERE,
|
| - NewRunnableMethod(this, &DecoderBase::InitializeTask, demuxer_stream));
|
| - return true;
|
| + NewRunnableMethod(this, &DecoderBase::InitializeTask, demuxer_stream,
|
| + callback));
|
| }
|
|
|
| virtual const MediaFormat& media_format() { return media_format_; }
|
| @@ -127,8 +129,9 @@ class DecoderBase : public Decoder {
|
| state_ = STOPPED;
|
| }
|
|
|
| - void SeekTask(base::TimeDelta time) {
|
| + void SeekTask(base::TimeDelta time, FilterCallback* callback) {
|
| DCHECK_EQ(MessageLoop::current(), this->message_loop());
|
| + scoped_ptr<FilterCallback> c(callback);
|
|
|
| // Delegate to the subclass first.
|
| OnSeek(time);
|
| @@ -139,24 +142,30 @@ class DecoderBase : public Decoder {
|
| // Turn on the seeking flag so that we can discard buffers until a
|
| // discontinuous buffer is received.
|
| seeking_ = true;
|
| +
|
| + // For now, signal that we're done seeking.
|
| + // TODO(scherkus): implement asynchronous seeking for decoder_base.h
|
| + callback->Run();
|
| }
|
|
|
| - void InitializeTask(DemuxerStream* demuxer_stream) {
|
| + void InitializeTask(DemuxerStream* demuxer_stream, FilterCallback* callback) {
|
| DCHECK_EQ(MessageLoop::current(), this->message_loop());
|
| DCHECK(state_ == UNINITIALIZED);
|
| DCHECK(!demuxer_stream_);
|
| + scoped_ptr<FilterCallback> c(callback);
|
| demuxer_stream_ = demuxer_stream;
|
|
|
| // Delegate to subclass first.
|
| if (!OnInitialize(demuxer_stream_)) {
|
| this->host()->Error(PIPELINE_ERROR_DECODE);
|
| + callback->Run();
|
| return;
|
| }
|
|
|
| // TODO(scherkus): subclass shouldn't mutate superclass media format.
|
| DCHECK(!media_format_.empty()) << "Subclass did not set media_format_";
|
| state_ = INITIALIZED;
|
| - this->host()->InitializationComplete();
|
| + callback->Run();
|
| }
|
|
|
| void ReadTask(ReadCallback* read_callback) {
|
|
|