| Index: media/filters/decoder_stream.cc
|
| diff --git a/media/filters/decoder_stream.cc b/media/filters/decoder_stream.cc
|
| index 495fec15680f9a744280f0f2e26263557ede4f42..481b5be380cc26a9894315de16c68ae8b2d995a2 100644
|
| --- a/media/filters/decoder_stream.cc
|
| +++ b/media/filters/decoder_stream.cc
|
| @@ -47,7 +47,8 @@ DecoderStream<StreamType>::DecoderStream(
|
| const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
|
| ScopedVector<Decoder> decoders,
|
| const scoped_refptr<MediaLog>& media_log)
|
| - : task_runner_(task_runner),
|
| + : traits_(media_log),
|
| + task_runner_(task_runner),
|
| media_log_(media_log),
|
| state_(STATE_UNINITIALIZED),
|
| stream_(NULL),
|
| @@ -110,6 +111,8 @@ void DecoderStream<StreamType>::Initialize(
|
| waiting_for_decryption_key_cb_ = waiting_for_decryption_key_cb;
|
| stream_ = stream;
|
|
|
| + traits_.OnStreamReset(stream_);
|
| +
|
| state_ = STATE_INITIALIZING;
|
| SelectDecoder(cdm_context);
|
| }
|
| @@ -165,6 +168,7 @@ void DecoderStream<StreamType>::Reset(const base::Closure& closure) {
|
| }
|
|
|
| ready_outputs_.clear();
|
| + traits_.OnStreamReset(stream_);
|
|
|
| // It's possible to have received a DECODE_ERROR and entered STATE_ERROR right
|
| // before a Reset() is executed. If we are still waiting for a demuxer read,
|
| @@ -245,7 +249,7 @@ base::TimeDelta DecoderStream<StreamType>::AverageDuration() const {
|
| template <DemuxerStream::Type StreamType>
|
| void DecoderStream<StreamType>::SelectDecoder(CdmContext* cdm_context) {
|
| decoder_selector_->SelectDecoder(
|
| - stream_, cdm_context,
|
| + &traits_, stream_, cdm_context,
|
| base::Bind(&DecoderStream<StreamType>::OnDecoderSelected,
|
| weak_factory_.GetWeakPtr()),
|
| base::Bind(&DecoderStream<StreamType>::OnDecodeOutputReady,
|
| @@ -360,6 +364,8 @@ void DecoderStream<StreamType>::DecodeInternal(
|
| DCHECK(reset_cb_.is_null());
|
| DCHECK(buffer.get());
|
|
|
| + traits_.OnDecode(buffer);
|
| +
|
| int buffer_size = buffer->end_of_stream() ? 0 : buffer->data_size();
|
|
|
| TRACE_EVENT_ASYNC_BEGIN2(
|
| @@ -425,7 +431,7 @@ void DecoderStream<StreamType>::OnDecodeDone(int buffer_size,
|
|
|
| state_ = STATE_REINITIALIZING_DECODER;
|
| decoder_selector_->SelectDecoder(
|
| - stream_, nullptr,
|
| + &traits_, stream_, nullptr,
|
| base::Bind(&DecoderStream<StreamType>::OnDecoderSelected,
|
| weak_factory_.GetWeakPtr()),
|
| base::Bind(&DecoderStream<StreamType>::OnDecodeOutputReady,
|
| @@ -488,6 +494,8 @@ void DecoderStream<StreamType>::OnDecodeOutputReady(
|
| if (!reset_cb_.is_null())
|
| return;
|
|
|
| + traits_.OnDecodeDone(output);
|
| +
|
| ++decoded_frames_since_fallback_;
|
|
|
| // |decoder_| sucessfully decoded a frame. No need to keep buffers for a
|
| @@ -688,7 +696,7 @@ void DecoderStream<StreamType>::ReinitializeDecoder() {
|
|
|
| state_ = STATE_REINITIALIZING_DECODER;
|
| // Decoders should not need a new CDM during reinitialization.
|
| - DecoderStreamTraits<StreamType>::InitializeDecoder(
|
| + traits_.InitializeDecoder(
|
| decoder_.get(), stream_, nullptr,
|
| base::Bind(&DecoderStream<StreamType>::OnDecoderReinitialized,
|
| weak_factory_.GetWeakPtr()),
|
|
|