Chromium Code Reviews| Index: media/base/pipeline.cc |
| diff --git a/media/base/pipeline.cc b/media/base/pipeline.cc |
| index 059710525372976dad8118a21e144fc6542d154c..731cf5a2ca9d26ad923e863c985d3fbc17ebaac8 100644 |
| --- a/media/base/pipeline.cc |
| +++ b/media/base/pipeline.cc |
| @@ -39,7 +39,6 @@ Pipeline::Pipeline( |
| volume_(1.0f), |
| playback_rate_(0.0f), |
| status_(PIPELINE_OK), |
| - is_initialized_(false), |
| state_(kCreated), |
| renderer_ended_(false), |
| text_renderer_ended_(false), |
| @@ -297,6 +296,14 @@ void Pipeline::SetDuration(TimeDelta duration) { |
| void Pipeline::OnStateTransition(PipelineStatus status) { |
| DCHECK(task_runner_->BelongsToCurrentThread()); |
| + // When demuxer has finished the init segment, it should call ReportMetadata |
| + // in case meeting 'decode' error when passing media segment but |
| + // WebMediaPlayer's ready_state_ is still ReadyStateHaveNothing. In that case |
| + // it will be treated as NetworkStateFormatError not NetworkStateDecodeError. |
| + if (state_ == kInitDemuxer && status == PIPELINE_OK) { |
|
DaleCurtis
2014/11/19 00:20:29
Why here instead of in StateTransitionTask before
|
| + ReportMetadata(); |
|
philipj_slow
2014/11/18 09:24:23
Will this affect both MSE and normal playback? The
|
| + start_timestamp_ = demuxer_->GetStartTime(); |
| + } |
| // Force post to process state transitions after current execution frame. |
| task_runner_->PostTask( |
| FROM_HERE, |
| @@ -339,13 +346,6 @@ void Pipeline::StateTransitionTask(PipelineStatus status) { |
| return InitializeRenderer(base::Bind(done_cb, PIPELINE_OK)); |
| case kPlaying: |
| - // Report metadata the first time we enter the playing state. |
| - if (!is_initialized_) { |
| - is_initialized_ = true; |
| - ReportMetadata(); |
| - start_timestamp_ = demuxer_->GetStartTime(); |
| - } |
| - |
| base::ResetAndReturn(&seek_cb_).Run(PIPELINE_OK); |
| DCHECK(start_timestamp_ >= base::TimeDelta()); |
| @@ -710,7 +710,7 @@ void Pipeline::ReportMetadata() { |
| metadata.natural_size = stream->video_decoder_config().natural_size(); |
| metadata.video_rotation = stream->video_rotation(); |
| } |
| - metadata_cb_.Run(metadata); |
| + base::ResetAndReturn(&metadata_cb_).Run(metadata); |
| } |
| void Pipeline::BufferingStateChanged(BufferingState new_buffering_state) { |