Chromium Code Reviews| Index: webkit/media/webmediaplayer_ms.cc |
| diff --git a/webkit/media/webmediaplayer_ms.cc b/webkit/media/webmediaplayer_ms.cc |
| index fc21a3a5639b85af2470fcc8ca59aa5b5757828b..3da4b4891dd32029a43ae859784e334488b7f218 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"; |
|
jamesr
2013/03/22 00:11:13
GetCurrentFrame ?
danakj
2013/03/22 04:12:31
Done.
|
| + 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"; |
|
jamesr
2013/03/22 00:11:13
PutCurrentFrame?
danakj
2013/03/22 04:12:31
Done.
|
| + 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()->needsWebLayer()) { |
| + video_weblayer_.reset( |
| + new webkit::WebLayerImpl(cc::VideoLayer::Create(this))); |
| + GetClient()->setWebLayer(video_weblayer_.get()); |
| + } |
| +#endif |
| } |
| // Do not update |current_frame_| when paused. |