video_layer_impl.h revision 6e8cce623b6e4fe0c9e4af605d675dd9d0338c38
1// Copyright 2012 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_LAYER_IMPL_H_ 6#define CC_LAYERS_VIDEO_LAYER_IMPL_H_ 7 8#include <vector> 9 10#include "cc/base/cc_export.h" 11#include "cc/layers/layer_impl.h" 12#include "cc/resources/release_callback.h" 13#include "cc/resources/video_resource_updater.h" 14#include "media/base/video_rotation.h" 15 16namespace media { 17class VideoFrame; 18} 19 20namespace cc { 21class VideoFrameProvider; 22class VideoFrameProviderClientImpl; 23 24class CC_EXPORT VideoLayerImpl : public LayerImpl { 25 public: 26 static scoped_ptr<VideoLayerImpl> Create(LayerTreeImpl* tree_impl, 27 int id, 28 VideoFrameProvider* provider, 29 media::VideoRotation video_rotation); 30 virtual ~VideoLayerImpl(); 31 32 // LayerImpl implementation. 33 virtual scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl) 34 OVERRIDE; 35 virtual void PushPropertiesTo(LayerImpl* layer) OVERRIDE; 36 virtual bool WillDraw(DrawMode draw_mode, 37 ResourceProvider* resource_provider) OVERRIDE; 38 virtual void AppendQuads(RenderPass* render_pass, 39 const OcclusionTracker<LayerImpl>& occlusion_tracker, 40 AppendQuadsData* append_quads_data) OVERRIDE; 41 virtual void DidDraw(ResourceProvider* resource_provider) OVERRIDE; 42 virtual void DidBecomeActive() OVERRIDE; 43 virtual void ReleaseResources() OVERRIDE; 44 45 void SetNeedsRedraw(); 46 47 void SetProviderClientImpl( 48 scoped_refptr<VideoFrameProviderClientImpl> provider_client_impl); 49 50 media::VideoRotation video_rotation() const { return video_rotation_; } 51 52 private: 53 VideoLayerImpl(LayerTreeImpl* tree_impl, 54 int id, 55 media::VideoRotation video_rotation); 56 57 virtual const char* LayerTypeAsString() const OVERRIDE; 58 59 scoped_refptr<VideoFrameProviderClientImpl> provider_client_impl_; 60 61 scoped_refptr<media::VideoFrame> frame_; 62 63 media::VideoRotation video_rotation_; 64 65 scoped_ptr<VideoResourceUpdater> updater_; 66 VideoFrameExternalResources::ResourceType frame_resource_type_; 67 std::vector<ResourceProvider::ResourceId> frame_resources_; 68 69 // TODO(danakj): Remove these, hide software path inside ResourceProvider and 70 // ExternalResource (aka TextureMailbox) classes. 71 std::vector<unsigned> software_resources_; 72 // Called once for each software resource. 73 ReleaseCallback software_release_callback_; 74 75 DISALLOW_COPY_AND_ASSIGN(VideoLayerImpl); 76}; 77 78} // namespace cc 79 80#endif // CC_LAYERS_VIDEO_LAYER_IMPL_H_ 81