| Index: webkit/glue/webmediaplayer_impl.cc
|
| diff --git a/webkit/glue/webmediaplayer_impl.cc b/webkit/glue/webmediaplayer_impl.cc
|
| index 04f5dc8527400127ddcd67999af50c2e737090b5..4f3778582a1ad4eeb33da0b54b0f099652dbcc0f 100644
|
| --- a/webkit/glue/webmediaplayer_impl.cc
|
| +++ b/webkit/glue/webmediaplayer_impl.cc
|
| @@ -112,6 +112,11 @@ void WebMediaPlayerImpl::Proxy::PipelineSeekCallback() {
|
| &WebMediaPlayerImpl::Proxy::PipelineSeekTask));
|
| }
|
|
|
| +void WebMediaPlayerImpl::Proxy::PipelineEndedCallback() {
|
| + render_loop_->PostTask(FROM_HERE, NewRunnableMethod(this,
|
| + &WebMediaPlayerImpl::Proxy::PipelineEndedTask));
|
| +}
|
| +
|
| void WebMediaPlayerImpl::Proxy::PipelineErrorCallback() {
|
| render_loop_->PostTask(FROM_HERE, NewRunnableMethod(this,
|
| &WebMediaPlayerImpl::Proxy::PipelineErrorTask));
|
| @@ -143,6 +148,13 @@ void WebMediaPlayerImpl::Proxy::PipelineSeekTask() {
|
| }
|
| }
|
|
|
| +void WebMediaPlayerImpl::Proxy::PipelineEndedTask() {
|
| + DCHECK(MessageLoop::current() == render_loop_);
|
| + if (webmediaplayer_) {
|
| + webmediaplayer_->OnPipelineEnded();
|
| + }
|
| +}
|
| +
|
| void WebMediaPlayerImpl::Proxy::PipelineErrorTask() {
|
| DCHECK(MessageLoop::current() == render_loop_);
|
| if (webmediaplayer_) {
|
| @@ -181,7 +193,9 @@ WebMediaPlayerImpl::WebMediaPlayerImpl(WebKit::WebMediaPlayerClient* client,
|
| // Creates the proxy.
|
| proxy_ = new Proxy(main_loop_, this);
|
|
|
| - // Sets the pipeline's error reporting callback.
|
| + // Set our pipeline callbacks.
|
| + pipeline_->SetPipelineEndedCallback(NewCallback(proxy_.get(),
|
| + &WebMediaPlayerImpl::Proxy::PipelineEndedCallback));
|
| pipeline_->SetPipelineErrorCallback(NewCallback(proxy_.get(),
|
| &WebMediaPlayerImpl::Proxy::PipelineErrorCallback));
|
|
|
| @@ -248,9 +262,12 @@ bool WebMediaPlayerImpl::supportsSave() const {
|
| void WebMediaPlayerImpl::seek(float seconds) {
|
| DCHECK(MessageLoop::current() == main_loop_);
|
|
|
| + // TODO(scherkus): WebKit fires a seek(0) at the very start, however pipeline
|
| + // already does a seek(0) internally. Investigate whether doing two seek(0)
|
| + // at the start impacts startup latency.
|
| +
|
| // Try to preserve as much accuracy as possible.
|
| float microseconds = seconds * base::Time::kMicrosecondsPerSecond;
|
| - if (seconds != 0)
|
| pipeline_->Seek(
|
| base::TimeDelta::FromMicroseconds(static_cast<int64>(microseconds)),
|
| NewCallback(proxy_.get(),
|
| @@ -453,6 +470,13 @@ void WebMediaPlayerImpl::OnPipelineSeek() {
|
| }
|
| }
|
|
|
| +void WebMediaPlayerImpl::OnPipelineEnded() {
|
| + DCHECK(MessageLoop::current() == main_loop_);
|
| + if (pipeline_->GetError() == media::PIPELINE_OK) {
|
| + GetClient()->timeChanged();
|
| + }
|
| +}
|
| +
|
| void WebMediaPlayerImpl::OnPipelineError() {
|
| DCHECK(MessageLoop::current() == main_loop_);
|
| switch (pipeline_->GetError()) {
|
|
|