diff options
Diffstat (limited to 'cc/video_layer_impl.h')
-rw-r--r-- | cc/video_layer_impl.h | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/cc/video_layer_impl.h b/cc/video_layer_impl.h index 638cbb2..b254e8c 100644 --- a/cc/video_layer_impl.h +++ b/cc/video_layer_impl.h @@ -1,3 +1,89 @@ // Copyright 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. + +#ifndef CCVideoLayerImpl_h +#define CCVideoLayerImpl_h + +#include "CCLayerImpl.h" +#include "GraphicsContext3D.h" +#include "IntSize.h" +#include <public/WebTransformationMatrix.h> +#include <public/WebVideoFrameProvider.h> + +namespace WebKit { +class WebVideoFrame; +} + +namespace cc { + +class CCLayerTreeHostImpl; +class CCVideoLayerImpl; + +class CCVideoLayerImpl : public CCLayerImpl + , public WebKit::WebVideoFrameProvider::Client { +public: + static scoped_ptr<CCVideoLayerImpl> create(int id, WebKit::WebVideoFrameProvider* provider) + { + return make_scoped_ptr(new CCVideoLayerImpl(id, provider)); + } + virtual ~CCVideoLayerImpl(); + + virtual void willDraw(CCResourceProvider*) OVERRIDE; + virtual void appendQuads(CCQuadSink&, CCAppendQuadsData&) OVERRIDE; + virtual void didDraw(CCResourceProvider*) OVERRIDE; + + virtual void dumpLayerProperties(std::string*, int indent) const OVERRIDE; + + Mutex& providerMutex() { return m_providerMutex; } + + // WebKit::WebVideoFrameProvider::Client implementation. + virtual void stopUsingProvider(); // Callable on any thread. + virtual void didReceiveFrame(); // Callable on impl thread. + virtual void didUpdateMatrix(const float*); // Callable on impl thread. + + virtual void didLoseContext() OVERRIDE; + + void setNeedsRedraw(); + + struct FramePlane { + CCResourceProvider::ResourceId resourceId; + IntSize size; + GC3Denum format; + IntSize visibleSize; + + FramePlane() : resourceId(0) { } + + bool allocateData(CCResourceProvider*); + void freeData(CCResourceProvider*); + }; + +private: + CCVideoLayerImpl(int, WebKit::WebVideoFrameProvider*); + + static IntSize computeVisibleSize(const WebKit::WebVideoFrame&, unsigned plane); + virtual const char* layerTypeAsString() const OVERRIDE; + + void willDrawInternal(CCResourceProvider*); + bool allocatePlaneData(CCResourceProvider*); + bool copyPlaneData(CCResourceProvider*); + void freePlaneData(CCResourceProvider*); + void freeUnusedPlaneData(CCResourceProvider*); + + // Guards the destruction of m_provider and the frame that it provides + Mutex m_providerMutex; + WebKit::WebVideoFrameProvider* m_provider; + + WebKit::WebTransformationMatrix m_streamTextureMatrix; + + WebKit::WebVideoFrame* m_frame; + GC3Denum m_format; + CCResourceProvider::ResourceId m_externalTextureResource; + + // Each index in this array corresponds to a plane in WebKit::WebVideoFrame. + FramePlane m_framePlanes[WebKit::WebVideoFrame::maxPlanes]; +}; + +} + +#endif // CCVideoLayerImpl_h |