| Index: media/base/pipeline.cc
|
| diff --git a/media/base/pipeline.cc b/media/base/pipeline.cc
|
| index e8fa6c770edd52460335a721b86d8991c90bdb26..4c7e030be6b5e47a8e6c477fbacfa26baa458f9b 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),
|
| @@ -335,16 +334,17 @@ void Pipeline::StateTransitionTask(PipelineStatus status) {
|
| return InitializeDemuxer(done_cb);
|
|
|
| case kInitRenderer:
|
| + // When the state_ transfers to kInitRenderer, it means the demuxer has
|
| + // finished parsing the init info. 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
|
| + // treat it as NetworkStateFormatError not NetworkStateDecodeError.
|
| + ReportMetadata();
|
| + start_timestamp_ = demuxer_->GetStartTime();
|
| +
|
| 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();
|
| - }
|
| -
|
| DCHECK(start_timestamp_ >= base::TimeDelta());
|
| renderer_->StartPlayingFrom(start_timestamp_);
|
|
|
| @@ -729,14 +729,16 @@ void Pipeline::InitializeRenderer(const base::Closure& done_cb) {
|
| void Pipeline::ReportMetadata() {
|
| DCHECK(task_runner_->BelongsToCurrentThread());
|
| PipelineMetadata metadata;
|
| - metadata.has_audio = renderer_->HasAudio();
|
| - metadata.has_video = renderer_->HasVideo();
|
| metadata.timeline_offset = demuxer_->GetTimelineOffset();
|
| DemuxerStream* stream = demuxer_->GetStream(DemuxerStream::VIDEO);
|
| if (stream) {
|
| + metadata.has_video = true;
|
| metadata.natural_size = stream->video_decoder_config().natural_size();
|
| metadata.video_rotation = stream->video_rotation();
|
| }
|
| + if (demuxer_->GetStream(DemuxerStream::AUDIO)) {
|
| + metadata.has_audio = true;
|
| + }
|
| metadata_cb_.Run(metadata);
|
| }
|
|
|
|
|