Index: webkit/media/webmediaplayer_ms.h |
diff --git a/webkit/media/webmediaplayer_ms.h b/webkit/media/webmediaplayer_ms.h |
index 9d2d43e33510e710d136d0e0612e2d3ae55ca6ad..17ee8f23549af56a3a82c13f9cfb8b1a17a0e670 100644 |
--- a/webkit/media/webmediaplayer_ms.h |
+++ b/webkit/media/webmediaplayer_ms.h |
@@ -9,6 +9,7 @@ |
#include "base/memory/scoped_ptr.h" |
#include "base/memory/weak_ptr.h" |
#include "base/synchronization/lock.h" |
+#include "cc/layers/video_frame_provider.h" |
#include "googleurl/src/gurl.h" |
#include "media/filters/skcanvas_video_renderer.h" |
#include "skia/ext/platform_canvas.h" |
@@ -24,6 +25,10 @@ namespace media { |
class MediaLog; |
} |
+namespace webkit { |
+class WebLayerImpl; |
+} |
+ |
namespace webkit_media { |
class MediaStreamAudioRenderer; |
@@ -47,6 +52,7 @@ class WebMediaPlayerDelegate; |
// WebKit client of this media player object. |
class WebMediaPlayerMS |
: public WebKit::WebMediaPlayer, |
+ public cc::VideoFrameProvider, |
public base::SupportsWeakPtr<WebMediaPlayerMS> { |
public: |
// Construct a WebMediaPlayerMS with reference to the client, and |
@@ -120,8 +126,12 @@ class WebMediaPlayerMS |
virtual unsigned audioDecodedByteCount() const OVERRIDE; |
virtual unsigned videoDecodedByteCount() const OVERRIDE; |
- virtual WebKit::WebVideoFrame* getCurrentFrame() OVERRIDE; |
- virtual void putCurrentFrame(WebKit::WebVideoFrame* web_video_frame) OVERRIDE; |
+ // VideoFrameProvider implementation. |
+ virtual void SetVideoFrameProviderClient( |
+ cc::VideoFrameProvider::Client* client) OVERRIDE; |
+ virtual scoped_refptr<media::VideoFrame> GetCurrentFrame() OVERRIDE; |
+ virtual void PutCurrentFrame(const scoped_refptr<media::VideoFrame>& frame) |
+ OVERRIDE; |
private: |
// The callback for VideoFrameProvider to signal a new frame is available. |
@@ -155,9 +165,12 @@ class WebMediaPlayerMS |
base::WeakPtr<WebMediaPlayerDelegate> delegate_; |
MediaStreamClient* media_stream_client_; |
- scoped_refptr<VideoFrameProvider> video_frame_provider_; |
+ scoped_refptr<webkit_media::VideoFrameProvider> video_frame_provider_; |
bool paused_; |
- // |current_frame_| is updated only on main thread. |
+ |
+ // |current_frame_| is updated only on main thread. The object it holds |
+ // can be freed on the compositor thread if it is the last to hold a |
+ // reference but media::VideoFrame is a thread-safe ref-pointer. |
scoped_refptr<media::VideoFrame> current_frame_; |
// |current_frame_used_| is updated on both main and compositing thread. |
// It's used to track whether |current_frame_| was painted for detecting |
@@ -165,6 +178,13 @@ class WebMediaPlayerMS |
bool current_frame_used_; |
base::Lock current_frame_lock_; |
bool pending_repaint_; |
+ |
+ scoped_ptr<webkit::WebLayerImpl> video_weblayer_; |
+ |
+ // A pointer back to the compositor to inform it about state changes. This is |
+ // not NULL while the compositor is actively using this webmediaplayer. |
+ cc::VideoFrameProvider::Client* video_frame_provider_client_; |
+ |
bool received_first_frame_; |
bool sequence_started_; |
base::TimeDelta start_time_; |