Index: media/blink/webmediaplayer_impl.cc |
diff --git a/media/blink/webmediaplayer_impl.cc b/media/blink/webmediaplayer_impl.cc |
index d1f5f2e384f0ddc5805052c11e673fac9da0fd6c..df6d23e89ff9a12fd2ffcefcfb9f44943d71d46c 100644 |
--- a/media/blink/webmediaplayer_impl.cc |
+++ b/media/blink/webmediaplayer_impl.cc |
@@ -166,7 +166,7 @@ WebMediaPlayerImpl::WebMediaPlayerImpl( |
base::Unretained(this)), |
base::Bind(&WebMediaPlayerImpl::OnPipelineSeeked, AsWeakPtr()), |
base::Bind(&WebMediaPlayerImpl::OnPipelineSuspended, AsWeakPtr()), |
- base::Bind(&WebMediaPlayerImpl::OnPipelineError, AsWeakPtr())), |
+ base::Bind(&WebMediaPlayerImpl::OnError, AsWeakPtr())), |
load_type_(LoadTypeURL), |
opaque_(false), |
playback_rate_(0.0), |
@@ -441,9 +441,8 @@ void WebMediaPlayerImpl::DoSeek(base::TimeDelta time, bool time_updated) { |
// ready state change to eventually happen. |
if (old_state == ReadyStateHaveEnoughData) { |
main_task_runner_->PostTask( |
- FROM_HERE, |
- base::Bind(&WebMediaPlayerImpl::OnPipelineBufferingStateChanged, |
- AsWeakPtr(), BUFFERING_HAVE_ENOUGH)); |
+ FROM_HERE, base::Bind(&WebMediaPlayerImpl::OnBufferingStateChange, |
+ AsWeakPtr(), BUFFERING_HAVE_ENOUGH)); |
} |
return; |
} |
@@ -850,15 +849,6 @@ void WebMediaPlayerImpl::OnFFmpegMediaTracksUpdated( |
} |
} |
-void WebMediaPlayerImpl::OnWaitingForDecryptionKey() { |
- encrypted_client_->didBlockPlaybackWaitingForKey(); |
- |
- // TODO(jrummell): didResumePlaybackBlockedForKey() should only be called |
- // when a key has been successfully added (e.g. OnSessionKeysChange() with |
- // |has_additional_usable_key| = true). http://crbug.com/461903 |
- encrypted_client_->didResumePlaybackBlockedForKey(); |
-} |
- |
void WebMediaPlayerImpl::SetCdm(const CdmAttachedCB& cdm_attached_cb, |
CdmContext* cdm_context) { |
if (!cdm_context) { |
@@ -927,46 +917,51 @@ void WebMediaPlayerImpl::OnPipelineSuspended() { |
} |
} |
-void WebMediaPlayerImpl::OnPipelineEnded() { |
- DVLOG(1) << __FUNCTION__; |
+void WebMediaPlayerImpl::OnDemuxerOpened() { |
DCHECK(main_task_runner_->BelongsToCurrentThread()); |
- |
- // Ignore state changes until we've completed all outstanding operations. |
- if (!pipeline_controller_.IsStable()) |
- return; |
- |
- ended_ = true; |
- client_->timeChanged(); |
- |
- // We don't actually want this to run until |client_| calls seek() or pause(), |
- // but that should have already happened in timeChanged() and so this is |
- // expected to be a no-op. |
- UpdatePlayState(); |
+ client_->mediaSourceOpened( |
+ new WebMediaSourceImpl(chunk_demuxer_, media_log_)); |
} |
-void WebMediaPlayerImpl::OnPipelineError(PipelineStatus error) { |
+void WebMediaPlayerImpl::OnError(PipelineStatus status) { |
DVLOG(1) << __FUNCTION__; |
DCHECK(main_task_runner_->BelongsToCurrentThread()); |
- DCHECK_NE(error, PIPELINE_OK); |
+ DCHECK_NE(status, PIPELINE_OK); |
if (suppress_destruction_errors_) |
return; |
- media_log_->AddEvent(media_log_->CreatePipelineErrorEvent(error)); |
+ media_log_->AddEvent(media_log_->CreatePipelineErrorEvent(status)); |
if (ready_state_ == WebMediaPlayer::ReadyStateHaveNothing) { |
// Any error that occurs before reaching ReadyStateHaveMetadata should |
// be considered a format error. |
SetNetworkState(WebMediaPlayer::NetworkStateFormatError); |
} else { |
- SetNetworkState(PipelineErrorToNetworkState(error)); |
+ SetNetworkState(PipelineErrorToNetworkState(status)); |
} |
UpdatePlayState(); |
} |
-void WebMediaPlayerImpl::OnPipelineMetadata( |
- PipelineMetadata metadata) { |
+void WebMediaPlayerImpl::OnEnded() { |
+ DVLOG(1) << __FUNCTION__; |
+ DCHECK(main_task_runner_->BelongsToCurrentThread()); |
+ |
+ // Ignore state changes until we've completed all outstanding operations. |
+ if (!pipeline_controller_.IsStable()) |
+ return; |
+ |
+ ended_ = true; |
+ client_->timeChanged(); |
+ |
+ // We don't actually want this to run until |client_| calls seek() or pause(), |
+ // but that should have already happened in timeChanged() and so this is |
+ // expected to be a no-op. |
+ UpdatePlayState(); |
+} |
+ |
+void WebMediaPlayerImpl::OnMetadata(PipelineMetadata metadata) { |
DVLOG(1) << __FUNCTION__; |
pipeline_metadata_ = metadata; |
@@ -995,9 +990,8 @@ void WebMediaPlayerImpl::OnPipelineMetadata( |
UpdatePlayState(); |
} |
-void WebMediaPlayerImpl::OnPipelineBufferingStateChanged( |
- BufferingState buffering_state) { |
- DVLOG(1) << __FUNCTION__ << "(" << buffering_state << ")"; |
+void WebMediaPlayerImpl::OnBufferingStateChange(BufferingState state) { |
+ DVLOG(1) << __FUNCTION__ << "(" << state << ")"; |
// Ignore buffering state changes until we've completed all outstanding |
// operations. |
@@ -1006,7 +1000,7 @@ void WebMediaPlayerImpl::OnPipelineBufferingStateChanged( |
// TODO(scherkus): Handle other buffering states when Pipeline starts using |
// them and translate them ready state changes http://crbug.com/144683 |
- DCHECK_EQ(buffering_state, BUFFERING_HAVE_ENOUGH); |
+ DCHECK_EQ(state, BUFFERING_HAVE_ENOUGH); |
SetReadyState(WebMediaPlayer::ReadyStateHaveEnoughData); |
// Let the DataSource know we have enough data. It may use this information to |
@@ -1025,15 +1019,17 @@ void WebMediaPlayerImpl::OnPipelineBufferingStateChanged( |
UpdatePlayState(); |
} |
-void WebMediaPlayerImpl::OnDemuxerOpened() { |
- DCHECK(main_task_runner_->BelongsToCurrentThread()); |
- client_->mediaSourceOpened( |
- new WebMediaSourceImpl(chunk_demuxer_, media_log_)); |
+void WebMediaPlayerImpl::OnDurationChange() { |
+ // TODO(sandersd): We should call delegate_->DidPlay() with the new duration, |
+ // especially if it changed from <5s to >5s. |
+ if (ready_state_ == WebMediaPlayer::ReadyStateHaveNothing) |
+ return; |
+ |
+ client_->durationChanged(); |
} |
-void WebMediaPlayerImpl::OnAddTextTrack( |
- const TextTrackConfig& config, |
- const AddTextTrackDoneCB& done_cb) { |
+void WebMediaPlayerImpl::OnAddTextTrack(const TextTrackConfig& config, |
+ const AddTextTrackDoneCB& done_cb) { |
DCHECK(main_task_runner_->BelongsToCurrentThread()); |
const WebInbandTextTrackImpl::Kind web_kind = |
@@ -1054,6 +1050,15 @@ void WebMediaPlayerImpl::OnAddTextTrack( |
done_cb.Run(std::move(text_track)); |
} |
+void WebMediaPlayerImpl::OnWaitingForDecryptionKey() { |
+ encrypted_client_->didBlockPlaybackWaitingForKey(); |
+ |
+ // TODO(jrummell): didResumePlaybackBlockedForKey() should only be called |
+ // when a key has been successfully added (e.g. OnSessionKeysChange() with |
+ // |has_additional_usable_key| = true). http://crbug.com/461903 |
+ encrypted_client_->didResumePlaybackBlockedForKey(); |
+} |
+ |
void WebMediaPlayerImpl::OnHidden() { |
DCHECK(main_task_runner_->BelongsToCurrentThread()); |
UpdatePlayState(); |
@@ -1249,7 +1254,7 @@ void WebMediaPlayerImpl::StartPipeline() { |
encrypted_media_init_data_cb, |
media_tracks_updated_cb, media_log_)); |
#else |
- OnPipelineError(PipelineStatus::DEMUXER_ERROR_COULD_NOT_OPEN); |
+ OnError(PipelineStatus::DEMUXER_ERROR_COULD_NOT_OPEN); |
return; |
#endif |
} else { |
@@ -1271,14 +1276,7 @@ void WebMediaPlayerImpl::StartPipeline() { |
// TODO(sandersd): On Android, defer Start() if the tab is not visible. |
bool is_streaming = (data_source_ && data_source_->IsStreaming()); |
- pipeline_controller_.Start( |
- demuxer_.get(), is_streaming, is_static, |
- BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnPipelineEnded), |
- BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnPipelineMetadata), |
- BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnPipelineBufferingStateChanged), |
- BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnDurationChanged), |
- BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnAddTextTrack), |
- BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnWaitingForDecryptionKey)); |
+ pipeline_controller_.Start(demuxer_.get(), this, is_streaming, is_static); |
xhwang
2016/04/25 22:49:45
In the old code we use BIND_TO_RENDER_LOOP and Bin
sandersd (OOO until July 31)
2016/04/26 23:16:35
I would argue that Pipeline should take a loop alo
xhwang
2016/04/26 23:35:49
That would also work for me.
alokp
2016/04/28 00:29:39
Good catch - I missed the threading considerations
|
} |
void WebMediaPlayerImpl::SetNetworkState(WebMediaPlayer::NetworkState state) { |
@@ -1320,15 +1318,6 @@ double WebMediaPlayerImpl::GetPipelineDuration() const { |
return duration.InSecondsF(); |
} |
-void WebMediaPlayerImpl::OnDurationChanged() { |
- // TODO(sandersd): We should call delegate_->DidPlay() with the new duration, |
- // especially if it changed from <5s to >5s. |
- if (ready_state_ == WebMediaPlayer::ReadyStateHaveNothing) |
- return; |
- |
- client_->durationChanged(); |
-} |
- |
void WebMediaPlayerImpl::OnNaturalSizeChanged(gfx::Size size) { |
DCHECK(main_task_runner_->BelongsToCurrentThread()); |
DCHECK_NE(ready_state_, WebMediaPlayer::ReadyStateHaveNothing); |