| Index: content/renderer/media/webmediaplayer_impl.cc
|
| diff --git a/content/renderer/media/webmediaplayer_impl.cc b/content/renderer/media/webmediaplayer_impl.cc
|
| index ea68fc7348126590c586d2cc31718fbf749f7223..b3af5bfa33044f4d2d45654d5a395f246547fcdb 100644
|
| --- a/content/renderer/media/webmediaplayer_impl.cc
|
| +++ b/content/renderer/media/webmediaplayer_impl.cc
|
| @@ -171,12 +171,14 @@ WebMediaPlayerImpl::WebMediaPlayerImpl(
|
| supports_save_(true),
|
| starting_(false),
|
| chunk_demuxer_(NULL),
|
| - compositor_( // Threaded compositing isn't enabled universally yet.
|
| - (RenderThreadImpl::current()->compositor_message_loop_proxy()
|
| - ? RenderThreadImpl::current()->compositor_message_loop_proxy()
|
| - : base::MessageLoopProxy::current()),
|
| + // Threaded compositing isn't enabled universally yet.
|
| + compositor_task_runner_(
|
| + RenderThreadImpl::current()->compositor_message_loop_proxy()
|
| + ? RenderThreadImpl::current()->compositor_message_loop_proxy()
|
| + : base::MessageLoopProxy::current()),
|
| + compositor_(new VideoFrameCompositor(
|
| BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnNaturalSizeChanged),
|
| - BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnOpacityChanged)),
|
| + BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnOpacityChanged))),
|
| text_track_index_(0),
|
| web_cdm_(NULL) {
|
| media_log_->AddEvent(
|
| @@ -232,6 +234,8 @@ WebMediaPlayerImpl::~WebMediaPlayerImpl() {
|
| base::Bind(&base::WaitableEvent::Signal, base::Unretained(&waiter)));
|
| waiter.Wait();
|
|
|
| + compositor_task_runner_->DeleteSoon(FROM_HERE, compositor_);
|
| +
|
| // Let V8 know we are not using extra resources anymore.
|
| if (incremented_externally_allocated_memory_) {
|
| v8::Isolate::GetCurrent()->AdjustAmountOfExternalAllocatedMemory(
|
| @@ -560,7 +564,7 @@ void WebMediaPlayerImpl::paint(WebCanvas* canvas,
|
| // - We haven't reached HAVE_CURRENT_DATA and need to paint black
|
| // - We're painting to a canvas
|
| // See http://crbug.com/341225 http://crbug.com/342621 for details.
|
| - scoped_refptr<media::VideoFrame> video_frame = compositor_.GetCurrentFrame();
|
| + scoped_refptr<media::VideoFrame> video_frame = compositor_->GetCurrentFrame();
|
|
|
| TRACE_EVENT0("media", "WebMediaPlayerImpl:paint");
|
| gfx::Rect gfx_rect(rect);
|
| @@ -594,14 +598,7 @@ unsigned WebMediaPlayerImpl::droppedFrameCount() const {
|
| DCHECK(main_loop_->BelongsToCurrentThread());
|
|
|
| media::PipelineStatistics stats = pipeline_.GetStatistics();
|
| -
|
| - unsigned frames_dropped = stats.video_frames_dropped;
|
| -
|
| - frames_dropped += const_cast<VideoFrameCompositor&>(compositor_)
|
| - .GetFramesDroppedBeforeCompositorWasNotified();
|
| -
|
| - DCHECK_LE(frames_dropped, stats.video_frames_decoded);
|
| - return frames_dropped;
|
| + return stats.video_frames_dropped;
|
| }
|
|
|
| unsigned WebMediaPlayerImpl::audioDecodedByteCount() const {
|
| @@ -626,7 +623,7 @@ bool WebMediaPlayerImpl::copyVideoTextureToPlatformTexture(
|
| unsigned int type,
|
| bool premultiply_alpha,
|
| bool flip_y) {
|
| - scoped_refptr<media::VideoFrame> video_frame = compositor_.GetCurrentFrame();
|
| + scoped_refptr<media::VideoFrame> video_frame = compositor_->GetCurrentFrame();
|
|
|
| TRACE_EVENT0("media", "WebMediaPlayerImpl:copyVideoTextureToPlatformTexture");
|
|
|
| @@ -991,8 +988,8 @@ void WebMediaPlayerImpl::OnPipelineMetadata(
|
|
|
| if (hasVideo()) {
|
| DCHECK(!video_weblayer_);
|
| - video_weblayer_.reset(new webkit::WebLayerImpl(
|
| - cc::VideoLayer::Create(compositor_.GetVideoFrameProvider())));
|
| + video_weblayer_.reset(
|
| + new webkit::WebLayerImpl(cc::VideoLayer::Create(compositor_)));
|
| video_weblayer_->setOpaque(opaque_);
|
| client_->setWebLayer(video_weblayer_.get());
|
| }
|
| @@ -1212,6 +1209,7 @@ void WebMediaPlayerImpl::StartPipeline() {
|
| set_decryptor_ready_cb,
|
| base::Bind(&WebMediaPlayerImpl::FrameReady, base::Unretained(this)),
|
| true));
|
| +
|
| filter_collection->SetVideoRenderer(video_renderer.Pass());
|
|
|
| if (cmd_line->HasSwitch(switches::kEnableInbandTextTracks)) {
|
| @@ -1309,7 +1307,11 @@ void WebMediaPlayerImpl::OnOpacityChanged(bool opaque) {
|
|
|
| void WebMediaPlayerImpl::FrameReady(
|
| const scoped_refptr<media::VideoFrame>& frame) {
|
| - compositor_.UpdateCurrentFrame(frame);
|
| + compositor_task_runner_->PostTask(
|
| + FROM_HERE,
|
| + base::Bind(&VideoFrameCompositor::UpdateCurrentFrame,
|
| + base::Unretained(compositor_),
|
| + frame));
|
| }
|
|
|
| void WebMediaPlayerImpl::SetDecryptorReadyCB(
|
|
|