CCVideoLayerImpl.h [plain text]
#ifndef CCVideoLayerImpl_h
#define CCVideoLayerImpl_h
#include "ManagedTexture.h"
#include "cc/CCLayerImpl.h"
#include <public/WebVideoFrameProvider.h>
namespace WebKit {
class WebVideoFrame;
}
namespace WebCore {
class CCLayerTreeHostImpl;
class CCVideoLayerImpl;
class CCVideoLayerImpl : public CCLayerImpl
, public WebKit::WebVideoFrameProvider::Client {
public:
static PassOwnPtr<CCVideoLayerImpl> create(int id, WebKit::WebVideoFrameProvider* provider)
{
return adoptPtr(new CCVideoLayerImpl(id, provider));
}
virtual ~CCVideoLayerImpl();
virtual void willDraw(LayerRendererChromium*) OVERRIDE;
virtual void appendQuads(CCQuadCuller&, const CCSharedQuadState*, bool& hadMissingTiles) OVERRIDE;
virtual void didDraw() OVERRIDE;
virtual void dumpLayerProperties(TextStream&, int indent) const OVERRIDE;
Mutex& providerMutex() { return m_providerMutex; }
virtual void stopUsingProvider(); virtual void didReceiveFrame(); virtual void didUpdateMatrix(const float*);
virtual void didLoseContext() OVERRIDE;
void setNeedsRedraw();
static const float yuv2RGB[9];
static const float yuvAdjust[3];
static const float flipTransform[16];
struct Texture {
OwnPtr<ManagedTexture> m_texture;
IntSize m_visibleSize;
};
enum { MaxPlanes = 3 };
private:
CCVideoLayerImpl(int, WebKit::WebVideoFrameProvider*);
static IntSize computeVisibleSize(const WebKit::WebVideoFrame&, unsigned plane);
virtual const char* layerTypeAsString() const OVERRIDE { return "VideoLayer"; }
void willDrawInternal(LayerRendererChromium*);
bool reserveTextures(const WebKit::WebVideoFrame&, GC3Denum format, LayerRendererChromium*);
Mutex m_providerMutex;
WebKit::WebVideoFrameProvider* m_provider;
Texture m_textures[MaxPlanes];
float m_streamTextureMatrix[16];
CCLayerTreeHostImpl* m_layerTreeHostImpl;
WebKit::WebVideoFrame* m_frame;
GC3Denum m_format;
};
}
#endif // CCVideoLayerImpl_h