12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2012 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef CC_LAYERS_VIDEO_LAYER_IMPL_H_
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define CC_LAYERS_VIDEO_LAYER_IMPL_H_
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include <vector>
9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/base/cc_export.h"
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/layers/layer_impl.h"
12d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "cc/resources/release_callback.h"
13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "cc/resources/video_resource_updater.h"
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace media {
16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class VideoFrame;
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace cc {
20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class VideoFrameProvider;
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class VideoFrameProviderClientImpl;
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class CC_EXPORT VideoLayerImpl : public LayerImpl {
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static scoped_ptr<VideoLayerImpl> Create(LayerTreeImpl* tree_impl,
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                           int id,
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                           VideoFrameProvider* provider);
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual ~VideoLayerImpl();
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // LayerImpl implementation.
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl)
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      OVERRIDE;
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void PushPropertiesTo(LayerImpl* layer) OVERRIDE;
34868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  virtual bool WillDraw(DrawMode draw_mode,
35868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                        ResourceProvider* resource_provider) OVERRIDE;
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void AppendQuads(QuadSink* quad_sink,
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                           AppendQuadsData* append_quads_data) OVERRIDE;
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void DidDraw(ResourceProvider* resource_provider) OVERRIDE;
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void DidBecomeActive() OVERRIDE;
405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void ReleaseResources() OVERRIDE;
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetNeedsRedraw();
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetProviderClientImpl(
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      scoped_refptr<VideoFrameProviderClientImpl> provider_client_impl);
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  VideoLayerImpl(LayerTreeImpl* tree_impl, int id);
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual const char* LayerTypeAsString() const OVERRIDE;
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_refptr<VideoFrameProviderClientImpl> provider_client_impl_;
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_refptr<media::VideoFrame> frame_;
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  scoped_ptr<VideoResourceUpdater> updater_;
57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  VideoFrameExternalResources::ResourceType frame_resource_type_;
58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  std::vector<ResourceProvider::ResourceId> frame_resources_;
59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // TODO(danakj): Remove these, hide software path inside ResourceProvider and
61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // ExternalResource (aka TextureMailbox) classes.
62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  std::vector<unsigned> software_resources_;
63d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // Called once for each software resource.
64d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  ReleaseCallback software_release_callback_;
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(VideoLayerImpl);
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace cc
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif  // CC_LAYERS_VIDEO_LAYER_IMPL_H_
72