Index: webkit/glue/webmediaplayer_impl.cc |
diff --git a/webkit/glue/webmediaplayer_impl.cc b/webkit/glue/webmediaplayer_impl.cc |
index 30af6d66abd306a12c7f529665af0dd7ea616de3..5d307f9ea59da7c29718030a45555a222f97f348 100644 |
--- a/webkit/glue/webmediaplayer_impl.cc |
+++ b/webkit/glue/webmediaplayer_impl.cc |
@@ -31,6 +31,7 @@ |
#include "webkit/glue/media/media_stream_client.h" |
#include "webkit/glue/media/video_renderer_impl.h" |
#include "webkit/glue/media/web_video_renderer.h" |
+#include "webkit/glue/webmediaplayer_proxy.h" |
#include "webkit/glue/webvideoframe_impl.h" |
using WebKit::WebCanvas; |
@@ -40,11 +41,6 @@ using media::PipelineStatus; |
namespace { |
-// Limits the maximum outstanding repaints posted on render thread. |
-// This number of 50 is a guess, it does not take too much memory on the task |
-// queue but gives up a pretty good latency on repaint. |
-const int kMaxOutstandingRepaints = 50; |
- |
// Limits the range of playback rate. |
// |
// TODO(kylep): Revisit these. |
@@ -87,235 +83,6 @@ base::TimeDelta ConvertSecondsToTimestamp(float seconds) { |
namespace webkit_glue { |
-///////////////////////////////////////////////////////////////////////////// |
-// WebMediaPlayerImpl::Proxy implementation |
- |
-WebMediaPlayerImpl::Proxy::Proxy(MessageLoop* render_loop, |
- WebMediaPlayerImpl* webmediaplayer) |
- : render_loop_(render_loop), |
- webmediaplayer_(webmediaplayer), |
- outstanding_repaints_(0) { |
- DCHECK(render_loop_); |
- DCHECK(webmediaplayer_); |
-} |
- |
-WebMediaPlayerImpl::Proxy::~Proxy() { |
- Detach(); |
-} |
- |
-void WebMediaPlayerImpl::Proxy::Repaint() { |
- base::AutoLock auto_lock(lock_); |
- if (outstanding_repaints_ < kMaxOutstandingRepaints) { |
- ++outstanding_repaints_; |
- |
- render_loop_->PostTask(FROM_HERE, |
- NewRunnableMethod(this, &WebMediaPlayerImpl::Proxy::RepaintTask)); |
- } |
-} |
- |
-void WebMediaPlayerImpl::Proxy::SetVideoRenderer( |
- scoped_refptr<WebVideoRenderer> video_renderer) { |
- video_renderer_ = video_renderer; |
-} |
- |
-WebDataSourceBuildObserverHack* WebMediaPlayerImpl::Proxy::GetBuildObserver() { |
- if (!build_observer_.get()) |
- build_observer_.reset(NewCallback(this, &Proxy::AddDataSource)); |
- return build_observer_.get(); |
-} |
- |
-void WebMediaPlayerImpl::Proxy::Paint(SkCanvas* canvas, |
- const gfx::Rect& dest_rect) { |
- DCHECK(MessageLoop::current() == render_loop_); |
- if (video_renderer_) { |
- video_renderer_->Paint(canvas, dest_rect); |
- } |
-} |
- |
-void WebMediaPlayerImpl::Proxy::SetSize(const gfx::Rect& rect) { |
- DCHECK(MessageLoop::current() == render_loop_); |
- if (video_renderer_) { |
- video_renderer_->SetRect(rect); |
- } |
-} |
- |
-bool WebMediaPlayerImpl::Proxy::HasSingleOrigin() { |
- DCHECK(MessageLoop::current() == render_loop_); |
- |
- base::AutoLock auto_lock(data_sources_lock_); |
- |
- for (DataSourceList::iterator itr = data_sources_.begin(); |
- itr != data_sources_.end(); |
- itr++) { |
- if (!(*itr)->HasSingleOrigin()) |
- return false; |
- } |
- return true; |
-} |
- |
-void WebMediaPlayerImpl::Proxy::AbortDataSources() { |
- DCHECK(MessageLoop::current() == render_loop_); |
- base::AutoLock auto_lock(data_sources_lock_); |
- |
- for (DataSourceList::iterator itr = data_sources_.begin(); |
- itr != data_sources_.end(); |
- itr++) { |
- (*itr)->Abort(); |
- } |
-} |
- |
-void WebMediaPlayerImpl::Proxy::Detach() { |
- DCHECK(MessageLoop::current() == render_loop_); |
- webmediaplayer_ = NULL; |
- video_renderer_ = NULL; |
- |
- { |
- base::AutoLock auto_lock(data_sources_lock_); |
- data_sources_.clear(); |
- } |
-} |
- |
-void WebMediaPlayerImpl::Proxy::PipelineInitializationCallback( |
- PipelineStatus status) { |
- render_loop_->PostTask(FROM_HERE, NewRunnableMethod( |
- this, &WebMediaPlayerImpl::Proxy::PipelineInitializationTask, status)); |
-} |
- |
-void WebMediaPlayerImpl::Proxy::PipelineSeekCallback(PipelineStatus status) { |
- render_loop_->PostTask(FROM_HERE, NewRunnableMethod( |
- this, &WebMediaPlayerImpl::Proxy::PipelineSeekTask, status)); |
-} |
- |
-void WebMediaPlayerImpl::Proxy::PipelineEndedCallback(PipelineStatus status) { |
- render_loop_->PostTask(FROM_HERE, NewRunnableMethod( |
- this, &WebMediaPlayerImpl::Proxy::PipelineEndedTask, status)); |
-} |
- |
-void WebMediaPlayerImpl::Proxy::PipelineErrorCallback(PipelineStatus error) { |
- DCHECK_NE(error, media::PIPELINE_OK); |
- render_loop_->PostTask(FROM_HERE, NewRunnableMethod( |
- this, &WebMediaPlayerImpl::Proxy::PipelineErrorTask, error)); |
-} |
- |
-void WebMediaPlayerImpl::Proxy::NetworkEventCallback(PipelineStatus status) { |
- render_loop_->PostTask(FROM_HERE, NewRunnableMethod( |
- this, &WebMediaPlayerImpl::Proxy::NetworkEventTask, status)); |
-} |
- |
-void WebMediaPlayerImpl::Proxy::AddDataSource(WebDataSource* data_source) { |
- base::AutoLock auto_lock(data_sources_lock_); |
- data_sources_.push_back(make_scoped_refptr(data_source)); |
-} |
- |
-void WebMediaPlayerImpl::Proxy::RepaintTask() { |
- DCHECK(MessageLoop::current() == render_loop_); |
- { |
- base::AutoLock auto_lock(lock_); |
- --outstanding_repaints_; |
- DCHECK_GE(outstanding_repaints_, 0); |
- } |
- if (webmediaplayer_) { |
- webmediaplayer_->Repaint(); |
- } |
-} |
- |
-void WebMediaPlayerImpl::Proxy::PipelineInitializationTask( |
- PipelineStatus status) { |
- DCHECK(MessageLoop::current() == render_loop_); |
- if (webmediaplayer_) { |
- webmediaplayer_->OnPipelineInitialize(status); |
- } |
-} |
- |
-void WebMediaPlayerImpl::Proxy::PipelineSeekTask(PipelineStatus status) { |
- DCHECK(MessageLoop::current() == render_loop_); |
- if (webmediaplayer_) { |
- webmediaplayer_->OnPipelineSeek(status); |
- } |
-} |
- |
-void WebMediaPlayerImpl::Proxy::PipelineEndedTask(PipelineStatus status) { |
- DCHECK(MessageLoop::current() == render_loop_); |
- if (webmediaplayer_) { |
- webmediaplayer_->OnPipelineEnded(status); |
- } |
-} |
- |
-void WebMediaPlayerImpl::Proxy::PipelineErrorTask(PipelineStatus error) { |
- DCHECK(MessageLoop::current() == render_loop_); |
- if (webmediaplayer_) { |
- webmediaplayer_->OnPipelineError(error); |
- } |
-} |
- |
-void WebMediaPlayerImpl::Proxy::NetworkEventTask(PipelineStatus status) { |
- DCHECK(MessageLoop::current() == render_loop_); |
- if (webmediaplayer_) { |
- webmediaplayer_->OnNetworkEvent(status); |
- } |
-} |
- |
-void WebMediaPlayerImpl::Proxy::GetCurrentFrame( |
- scoped_refptr<media::VideoFrame>* frame_out) { |
- if (video_renderer_) |
- video_renderer_->GetCurrentFrame(frame_out); |
-} |
- |
-void WebMediaPlayerImpl::Proxy::PutCurrentFrame( |
- scoped_refptr<media::VideoFrame> frame) { |
- if (video_renderer_) |
- video_renderer_->PutCurrentFrame(frame); |
-} |
- |
-void WebMediaPlayerImpl::Proxy::DemuxerOpened(media::ChunkDemuxer* demuxer) { |
- render_loop_->PostTask(FROM_HERE, NewRunnableMethod( |
- this, &WebMediaPlayerImpl::Proxy::DemuxerOpenedTask, |
- scoped_refptr<media::ChunkDemuxer>(demuxer))); |
-} |
- |
-void WebMediaPlayerImpl::Proxy::DemuxerClosed() { |
- render_loop_->PostTask(FROM_HERE, NewRunnableMethod( |
- this, &WebMediaPlayerImpl::Proxy::DemuxerClosedTask)); |
-} |
- |
-void WebMediaPlayerImpl::Proxy::DemuxerFlush() { |
- if (chunk_demuxer_.get()) |
- chunk_demuxer_->FlushData(); |
-} |
- |
-bool WebMediaPlayerImpl::Proxy::DemuxerAppend(const uint8* data, |
- size_t length) { |
- if (chunk_demuxer_.get()) |
- return chunk_demuxer_->AppendData(data, length); |
- return false; |
-} |
- |
-void WebMediaPlayerImpl::Proxy::DemuxerEndOfStream( |
- media::PipelineStatus status) { |
- if (chunk_demuxer_.get()) |
- chunk_demuxer_->EndOfStream(status); |
-} |
- |
-void WebMediaPlayerImpl::Proxy::DemuxerShutdown() { |
- if (chunk_demuxer_.get()) |
- chunk_demuxer_->Shutdown(); |
-} |
- |
-void WebMediaPlayerImpl::Proxy::DemuxerOpenedTask( |
- const scoped_refptr<media::ChunkDemuxer>& demuxer) { |
- DCHECK(MessageLoop::current() == render_loop_); |
- chunk_demuxer_ = demuxer; |
- if (webmediaplayer_) |
- webmediaplayer_->OnDemuxerOpened(); |
-} |
- |
-void WebMediaPlayerImpl::Proxy::DemuxerClosedTask() { |
- chunk_demuxer_ = NULL; |
-} |
- |
-///////////////////////////////////////////////////////////////////////////// |
-// WebMediaPlayerImpl implementation |
- |
WebMediaPlayerImpl::WebMediaPlayerImpl( |
WebKit::WebMediaPlayerClient* client, |
media::FilterCollection* collection, |
@@ -358,18 +125,18 @@ bool WebMediaPlayerImpl::Initialize( |
main_loop_->AddDestructionObserver(this); |
// Creates the proxy. |
- proxy_ = new Proxy(main_loop_, this); |
- web_video_renderer->SetWebMediaPlayerImplProxy(proxy_); |
+ proxy_ = new WebMediaPlayerProxy(main_loop_, this); |
+ web_video_renderer->SetWebMediaPlayerProxy(proxy_); |
proxy_->SetVideoRenderer(web_video_renderer); |
// Set our pipeline callbacks. |
pipeline_->Init( |
NewCallback(proxy_.get(), |
- &WebMediaPlayerImpl::Proxy::PipelineEndedCallback), |
+ &WebMediaPlayerProxy::PipelineEndedCallback), |
NewCallback(proxy_.get(), |
- &WebMediaPlayerImpl::Proxy::PipelineErrorCallback), |
+ &WebMediaPlayerProxy::PipelineErrorCallback), |
NewCallback(proxy_.get(), |
- &WebMediaPlayerImpl::Proxy::NetworkEventCallback)); |
+ &WebMediaPlayerProxy::NetworkEventCallback)); |
// A simple data source that keeps all data in memory. |
scoped_ptr<media::DataSourceFactory> simple_data_source_factory( |
@@ -462,8 +229,7 @@ void WebMediaPlayerImpl::load(const WebKit::WebURL& url) { |
filter_collection_.release(), |
url.spec(), |
NewCallback(proxy_.get(), |
- &WebMediaPlayerImpl::Proxy::PipelineInitializationCallback)); |
- |
+ &WebMediaPlayerProxy::PipelineInitializationCallback)); |
media_log_->Load(url.spec()); |
} |
@@ -530,7 +296,7 @@ void WebMediaPlayerImpl::seek(float seconds) { |
pipeline_->Seek( |
seek_time, |
NewCallback(proxy_.get(), |
- &WebMediaPlayerImpl::Proxy::PipelineSeekCallback)); |
+ &WebMediaPlayerProxy::PipelineSeekCallback)); |
} |
void WebMediaPlayerImpl::setEndTime(float seconds) { |