1 // Copyright 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CC_LAYERS_VIDEO_FRAME_PROVIDER_CLIENT_IMPL_H_ 6 #define CC_LAYERS_VIDEO_FRAME_PROVIDER_CLIENT_IMPL_H_ 7 8 #include "base/memory/ref_counted.h" 9 #include "base/synchronization/lock.h" 10 #include "cc/layers/video_frame_provider.h" 11 #include "ui/gfx/transform.h" 12 13 namespace media { class VideoFrame; } 14 15 namespace cc { 16 class VideoLayerImpl; 17 18 class VideoFrameProviderClientImpl 19 : public VideoFrameProvider::Client, 20 public base::RefCounted<VideoFrameProviderClientImpl> { 21 public: 22 static scoped_refptr<VideoFrameProviderClientImpl> Create( 23 VideoFrameProvider* provider); 24 25 VideoLayerImpl* active_video_layer() { return active_video_layer_; } 26 void set_active_video_layer(VideoLayerImpl* video_layer) { 27 active_video_layer_ = video_layer; 28 } 29 30 void Stop(); 31 bool Stopped() const { return !provider_; } 32 33 scoped_refptr<media::VideoFrame> AcquireLockAndCurrentFrame(); 34 void PutCurrentFrame(const scoped_refptr<media::VideoFrame>& frame); 35 void ReleaseLock(); 36 const gfx::Transform& stream_texture_matrix() const { 37 return stream_texture_matrix_; 38 } 39 40 // VideoFrameProvider::Client implementation. These methods are all callable 41 // on any thread. 42 virtual void StopUsingProvider() OVERRIDE; 43 virtual void DidReceiveFrame() OVERRIDE; 44 virtual void DidUpdateMatrix(const float* matrix) OVERRIDE; 45 46 private: 47 explicit VideoFrameProviderClientImpl(VideoFrameProvider* provider); 48 friend class base::RefCounted<VideoFrameProviderClientImpl>; 49 virtual ~VideoFrameProviderClientImpl(); 50 51 VideoLayerImpl* active_video_layer_; 52 53 // Guards the destruction of provider_ and the frame that it provides 54 base::Lock provider_lock_; 55 VideoFrameProvider* provider_; 56 57 gfx::Transform stream_texture_matrix_; 58 59 DISALLOW_COPY_AND_ASSIGN(VideoFrameProviderClientImpl); 60 }; 61 62 } // namespace cc 63 64 #endif // CC_LAYERS_VIDEO_FRAME_PROVIDER_CLIENT_IMPL_H_ 65