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 void set_active_video_layer(VideoLayerImpl* video_layer) { 26 active_video_layer_ = video_layer; 27 } 28 29 void Stop(); 30 bool Stopped() const { return !provider_; } 31 32 scoped_refptr<media::VideoFrame> AcquireLockAndCurrentFrame(); 33 void PutCurrentFrame(const scoped_refptr<media::VideoFrame>& frame); 34 void ReleaseLock(); 35 const gfx::Transform& stream_texture_matrix() const { 36 return stream_texture_matrix_; 37 } 38 39 // VideoFrameProvider::Client implementation. These methods are all callable 40 // on any thread. 41 virtual void StopUsingProvider() OVERRIDE; 42 virtual void DidReceiveFrame() OVERRIDE; 43 virtual void DidUpdateMatrix(const float* matrix) OVERRIDE; 44 45 private: 46 explicit VideoFrameProviderClientImpl(VideoFrameProvider* provider); 47 friend class base::RefCounted<VideoFrameProviderClientImpl>; 48 virtual ~VideoFrameProviderClientImpl(); 49 50 VideoLayerImpl* active_video_layer_; 51 52 // Guards the destruction of provider_ and the frame that it provides 53 base::Lock provider_lock_; 54 VideoFrameProvider* provider_; 55 56 gfx::Transform stream_texture_matrix_; 57 58 DISALLOW_COPY_AND_ASSIGN(VideoFrameProviderClientImpl); 59 }; 60 61 } // namespace cc 62 63 #endif // CC_LAYERS_VIDEO_FRAME_PROVIDER_CLIENT_IMPL_H_ 64