Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(320)

Unified Diff: webkit/media/webmediaplayer_impl.cc

Issue 10854151: Allow transitioning to HAVE_METADATA before pipeline initialization completes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webkit/media/webmediaplayer_impl.cc
diff --git a/webkit/media/webmediaplayer_impl.cc b/webkit/media/webmediaplayer_impl.cc
index 0bac0049e0a7df0ff14b6dca665c5d724c202613..67111f5588f8eacecbdb582c1d01f0c729880a1c 100644
--- a/webkit/media/webmediaplayer_impl.cc
+++ b/webkit/media/webmediaplayer_impl.cc
@@ -131,7 +131,8 @@ WebMediaPlayerImpl::WebMediaPlayerImpl(
audio_source_provider_(audio_source_provider),
audio_renderer_sink_(audio_renderer_sink),
is_local_source_(false),
- decryptor_(proxy_.get(), client, frame) {
+ decryptor_(proxy_.get(), client, frame),
+ starting_(false) {
media_log_->AddEvent(
media_log_->CreateEvent(media::MediaLogEvent::WEBMEDIAPLAYER_CREATED));
@@ -309,7 +310,7 @@ bool WebMediaPlayerImpl::supportsSave() const {
void WebMediaPlayerImpl::seek(float seconds) {
DCHECK_EQ(main_loop_, MessageLoop::current());
- if (seeking_) {
+ if (starting_ || seeking_) {
pending_seek_ = true;
pending_seek_seconds_ = seconds;
proxy_->DemuxerCancelPendingSeek();
@@ -760,6 +761,8 @@ void WebMediaPlayerImpl::Repaint() {
}
void WebMediaPlayerImpl::OnPipelineInitialize(PipelineStatus status) {
+ starting_ = false;
Ami GONE FROM CHROMIUM 2012/08/15 18:00:08 put below DCHECK below.
acolwell GONE FROM CHROMIUM 2012/08/15 23:21:15 Done.
+
DCHECK_EQ(main_loop_, MessageLoop::current());
if (status != media::PIPELINE_OK) {
// Any error that occurs before the pipeline can initialize should be
@@ -776,14 +779,11 @@ void WebMediaPlayerImpl::OnPipelineInitialize(PipelineStatus status) {
if (is_local_source_)
SetNetworkState(WebMediaPlayer::NetworkStateLoaded);
- SetReadyState(WebMediaPlayer::ReadyStateHaveMetadata);
- // Fire canplaythrough immediately after playback begins because of
- // crbug.com/106480.
- // TODO(vrk): set ready state to HaveFutureData when bug above is fixed.
- SetReadyState(WebMediaPlayer::ReadyStateHaveEnoughData);
+ if (!pending_seek_)
+ return;
- // Repaint to trigger UI update.
- Repaint();
+ pending_seek_ = false;
+ seek(pending_seek_seconds_);
}
void WebMediaPlayerImpl::OnPipelineSeek(PipelineStatus status) {
@@ -865,6 +865,26 @@ void WebMediaPlayerImpl::OnPipelineError(PipelineStatus error) {
Repaint();
}
+void WebMediaPlayerImpl::OnPipelineReadyState(
+ media::Pipeline::ReadyState readyState) {
+ DVLOG(1) << "OnPipelineReadyState(" << readyState << ")";
+
+ switch(readyState) {
+ case media::Pipeline::HaveMetadata:
+ SetReadyState(WebMediaPlayer::ReadyStateHaveMetadata);
+ break;
+ case media::Pipeline::HaveEnoughData:
+ // Fire canplaythrough immediately after playback begins because of
+ // crbug.com/106480.
+ // TODO(vrk): set ready state to HaveFutureData when bug above is fixed.
+ SetReadyState(WebMediaPlayer::ReadyStateHaveEnoughData);
+ break;
+ }
+
+ // Repaint to trigger UI update.
+ Repaint();
+}
+
void WebMediaPlayerImpl::OnDemuxerOpened() {
DCHECK_EQ(main_loop_, MessageLoop::current());
@@ -959,11 +979,14 @@ void WebMediaPlayerImpl::NotifyDownloading(bool is_downloading) {
}
void WebMediaPlayerImpl::StartPipeline() {
+ starting_ = true;
pipeline_->Start(
filter_collection_.Pass(),
base::Bind(&WebMediaPlayerProxy::PipelineEndedCallback, proxy_.get()),
base::Bind(&WebMediaPlayerProxy::PipelineErrorCallback, proxy_.get()),
base::Bind(&WebMediaPlayerProxy::PipelineInitializationCallback,
+ proxy_.get()),
+ base::Bind(&WebMediaPlayerProxy::PipelineReadyStateCallback,
proxy_.get()));
}

Powered by Google App Engine
This is Rietveld 408576698