Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(373)

Unified Diff: webkit/media/webmediaplayer_ms.cc

Issue 12676004: Move ownership of cc:VideoLayer to webkit/media (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webkit/media/webmediaplayer_ms.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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.
« no previous file with comments | « webkit/media/webmediaplayer_ms.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698