| Index: webkit/media/webmediaplayer_ms.cc
|
| diff --git a/webkit/media/webmediaplayer_ms.cc b/webkit/media/webmediaplayer_ms.cc
|
| index fc21a3a5639b85af2470fcc8ca59aa5b5757828b..a79594e13a6d224c3b808aaa280bbb0a0ad9b218 100644
|
| --- a/webkit/media/webmediaplayer_ms.cc
|
| +++ b/webkit/media/webmediaplayer_ms.cc
|
| @@ -10,6 +10,7 @@
|
| #include "base/callback.h"
|
| #include "base/message_loop.h"
|
| #include "base/metrics/histogram.h"
|
| +#include "cc/layers/video_layer.h"
|
| #include "media/base/media_log.h"
|
| #include "media/base/video_frame.h"
|
| #include "third_party/WebKit/Source/Platform/chromium/public/WebRect.h"
|
| @@ -19,6 +20,7 @@
|
| #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h"
|
| #include "third_party/WebKit/Source/WebKit/chromium/public/WebMediaPlayerClient.h"
|
| #include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h"
|
| +#include "webkit/compositor_bindings/web_layer_impl.h"
|
| #include "webkit/media/media_stream_audio_renderer.h"
|
| #include "webkit/media/media_stream_client.h"
|
| #include "webkit/media/video_frame_provider.h"
|
| @@ -49,6 +51,7 @@ WebMediaPlayerMS::WebMediaPlayerMS(
|
| paused_(true),
|
| current_frame_used_(false),
|
| pending_repaint_(false),
|
| + video_frame_provider_client_(NULL),
|
| received_first_frame_(false),
|
| sequence_started_(false),
|
| total_frame_count_(0),
|
| @@ -63,6 +66,12 @@ WebMediaPlayerMS::WebMediaPlayerMS(
|
| WebMediaPlayerMS::~WebMediaPlayerMS() {
|
| DVLOG(1) << "WebMediaPlayerMS::dtor";
|
| DCHECK(thread_checker_.CalledOnValidThread());
|
| +
|
| +#ifdef REMOVE_WEBVIDEOFRAME
|
| + SetVideoFrameProviderClient(NULL);
|
| + GetClient()->setWebLayer(NULL);
|
| +#endif
|
| +
|
| if (video_frame_provider_) {
|
| video_frame_provider_->Stop();
|
| }
|
| @@ -358,6 +367,7 @@ unsigned WebMediaPlayerMS::videoDecodedByteCount() const {
|
| return 0;
|
| }
|
|
|
| +#ifndef REMOVE_WEBVIDEOFRAME
|
| WebKit::WebVideoFrame* WebMediaPlayerMS::getCurrentFrame() {
|
| DVLOG(3) << "WebMediaPlayerMS::getCurrentFrame";
|
| base::AutoLock auto_lock(current_frame_lock_);
|
| @@ -380,6 +390,34 @@ void WebMediaPlayerMS::putCurrentFrame(
|
| delete web_video_frame;
|
| }
|
| }
|
| +#else
|
| +void WebMediaPlayerMS::SetVideoFrameProviderClient(
|
| + cc::VideoFrameProvider::Client* client) {
|
| + // This is called from both the main renderer thread and the compositor
|
| + // thread (when the main thread is blocked).
|
| + if (video_frame_provider_client_)
|
| + video_frame_provider_client_->StopUsingProvider();
|
| + video_frame_provider_client_ = client;
|
| +}
|
| +
|
| +scoped_refptr<media::VideoFrame> WebMediaPlayerMS::GetCurrentFrame() {
|
| + DVLOG(3) << "WebMediaPlayerMS::GetCurrentFrame";
|
| + base::AutoLock auto_lock(current_frame_lock_);
|
| + DCHECK(!pending_repaint_);
|
| + if (!current_frame_)
|
| + return NULL;
|
| + pending_repaint_ = true;
|
| + current_frame_used_ = true;
|
| + return current_frame_;
|
| +}
|
| +
|
| +void WebMediaPlayerMS::PutCurrentFrame(
|
| + const scoped_refptr<media::VideoFrame>& frame) {
|
| + DVLOG(3) << "WebMediaPlayerMS::PutCurrentFrame";
|
| + DCHECK(pending_repaint_);
|
| + pending_repaint_ = false;
|
| +}
|
| +#endif
|
|
|
| void WebMediaPlayerMS::OnFrameAvailable(
|
| const scoped_refptr<media::VideoFrame>& frame) {
|
| @@ -397,6 +435,14 @@ void WebMediaPlayerMS::OnFrameAvailable(
|
| SetReadyState(WebMediaPlayer::ReadyStateHaveMetadata);
|
| SetReadyState(WebMediaPlayer::ReadyStateHaveEnoughData);
|
| GetClient()->sizeChanged();
|
| +
|
| +#ifdef REMOVE_WEBVIDEOFRAME
|
| + if (video_frame_provider_ && GetClient()->needsWebLayerForVideo()) {
|
| + video_weblayer_.reset(
|
| + new webkit::WebLayerImpl(cc::VideoLayer::Create(this)));
|
| + GetClient()->setWebLayer(video_weblayer_.get());
|
| + }
|
| +#endif
|
| }
|
|
|
| // Do not update |current_frame_| when paused.
|
|
|