Index: media/base/pipeline.cc |
diff --git a/media/base/pipeline.cc b/media/base/pipeline.cc |
index 88abe19ad8207acbc55cafbe1addbb0fd868c489..f55a350c2eb5bb484d683680ee0a229d50c84ea4 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(done_cb); |
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 PipelineStatusCB& 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); |
} |