| Index: webkit/glue/webmediaplayer_impl.cc
|
| ===================================================================
|
| --- webkit/glue/webmediaplayer_impl.cc (revision 22059)
|
| +++ webkit/glue/webmediaplayer_impl.cc (working copy)
|
| @@ -93,6 +93,11 @@
|
| &WebMediaPlayerImpl::Proxy::PipelineSeekTask));
|
| }
|
|
|
| +void WebMediaPlayerImpl::Proxy::PipelineErrorCallback() {
|
| + render_loop_->PostTask(FROM_HERE, NewRunnableMethod(this,
|
| + &WebMediaPlayerImpl::Proxy::PipelineErrorTask));
|
| +}
|
| +
|
| void WebMediaPlayerImpl::Proxy::RepaintTask() {
|
| DCHECK(MessageLoop::current() == render_loop_);
|
| {
|
| @@ -119,6 +124,13 @@
|
| }
|
| }
|
|
|
| +void WebMediaPlayerImpl::Proxy::PipelineErrorTask() {
|
| + DCHECK(MessageLoop::current() == render_loop_);
|
| + if (webmediaplayer_) {
|
| + webmediaplayer_->OnPipelineError();
|
| + }
|
| +}
|
| +
|
| /////////////////////////////////////////////////////////////////////////////
|
| // WebMediaPlayerImpl implementation
|
|
|
| @@ -139,16 +151,21 @@
|
| // Create the pipeline and its thread.
|
| if (!pipeline_thread_.Start()) {
|
| NOTREACHED() << "Could not start PipelineThread";
|
| - } else {
|
| - pipeline_ = new media::PipelineImpl(pipeline_thread_.message_loop());
|
| + return;
|
| }
|
|
|
| + pipeline_ = new media::PipelineImpl(pipeline_thread_.message_loop());
|
| +
|
| // Also we want to be notified of |main_loop_| destruction.
|
| main_loop_->AddDestructionObserver(this);
|
|
|
| // Creates the proxy.
|
| proxy_ = new Proxy(main_loop_, this);
|
|
|
| + // Sets the pipeline's error reporting callback.
|
| + pipeline_->SetPipelineErrorCallback(NewCallback(proxy_.get(),
|
| + &WebMediaPlayerImpl::Proxy::PipelineErrorCallback));
|
| +
|
| // Add in the default filter factories.
|
| filter_factory_->AddFactory(media::FFmpegDemuxer::CreateFilterFactory());
|
| filter_factory_->AddFactory(media::FFmpegAudioDecoder::CreateFactory());
|
| @@ -404,6 +421,38 @@
|
| }
|
| }
|
|
|
| +void WebMediaPlayerImpl::OnPipelineError() {
|
| + DCHECK(MessageLoop::current() == main_loop_);
|
| + switch (pipeline_->GetError()) {
|
| + case media::PIPELINE_OK:
|
| + case media::PIPELINE_STOPPING:
|
| + NOTREACHED() << "We shouldn't get called with these non-errors";
|
| + break;
|
| +
|
| + case media::PIPELINE_ERROR_INITIALIZATION_FAILED:
|
| + case media::PIPELINE_ERROR_REQUIRED_FILTER_MISSING:
|
| + case media::PIPELINE_ERROR_COULD_NOT_RENDER:
|
| + // Format error.
|
| + SetNetworkState(WebMediaPlayer::FormatError);
|
| + break;
|
| +
|
| + case media::PIPELINE_ERROR_URL_NOT_FOUND:
|
| + case media::PIPELINE_ERROR_NETWORK:
|
| + case media::PIPELINE_ERROR_DECODE:
|
| + case media::PIPELINE_ERROR_ABORT:
|
| + case media::PIPELINE_ERROR_OUT_OF_MEMORY:
|
| + case media::PIPELINE_ERROR_READ:
|
| + case media::PIPELINE_ERROR_AUDIO_HARDWARE:
|
| + case media::DEMUXER_ERROR_COULD_NOT_OPEN:
|
| + case media::DEMUXER_ERROR_COULD_NOT_PARSE:
|
| + case media::DEMUXER_ERROR_NO_SUPPORTED_STREAMS:
|
| + case media::DEMUXER_ERROR_COULD_NOT_CREATE_THREAD:
|
| + // Decode error.
|
| + SetNetworkState(WebMediaPlayer::DecodeError);
|
| + break;
|
| + }
|
| +}
|
| +
|
| void WebMediaPlayerImpl::SetNetworkState(
|
| WebKit::WebMediaPlayer::NetworkState state) {
|
| DCHECK(MessageLoop::current() == main_loop_);
|
|
|