12bde8e466a4451c7319e3a072d118917957d6554Steve Block/* 22bde8e466a4451c7319e3a072d118917957d6554Steve Block * Copyright (C) 2011 Google Inc. All rights reserved. 32bde8e466a4451c7319e3a072d118917957d6554Steve Block * 42bde8e466a4451c7319e3a072d118917957d6554Steve Block * Redistribution and use in source and binary forms, with or without 52bde8e466a4451c7319e3a072d118917957d6554Steve Block * modification, are permitted provided that the following conditions 62bde8e466a4451c7319e3a072d118917957d6554Steve Block * are met: 72bde8e466a4451c7319e3a072d118917957d6554Steve Block * 82bde8e466a4451c7319e3a072d118917957d6554Steve Block * 1. Redistributions of source code must retain the above copyright 92bde8e466a4451c7319e3a072d118917957d6554Steve Block * notice, this list of conditions and the following disclaimer. 102bde8e466a4451c7319e3a072d118917957d6554Steve Block * 2. Redistributions in binary form must reproduce the above copyright 112bde8e466a4451c7319e3a072d118917957d6554Steve Block * notice, this list of conditions and the following disclaimer in the 122bde8e466a4451c7319e3a072d118917957d6554Steve Block * documentation and/or other materials provided with the distribution. 132bde8e466a4451c7319e3a072d118917957d6554Steve Block * 142bde8e466a4451c7319e3a072d118917957d6554Steve Block * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 152bde8e466a4451c7319e3a072d118917957d6554Steve Block * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 162bde8e466a4451c7319e3a072d118917957d6554Steve Block * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 172bde8e466a4451c7319e3a072d118917957d6554Steve Block * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 182bde8e466a4451c7319e3a072d118917957d6554Steve Block * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 192bde8e466a4451c7319e3a072d118917957d6554Steve Block * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 202bde8e466a4451c7319e3a072d118917957d6554Steve Block * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 212bde8e466a4451c7319e3a072d118917957d6554Steve Block * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 222bde8e466a4451c7319e3a072d118917957d6554Steve Block * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 232bde8e466a4451c7319e3a072d118917957d6554Steve Block * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 242bde8e466a4451c7319e3a072d118917957d6554Steve Block */ 252bde8e466a4451c7319e3a072d118917957d6554Steve Block 262bde8e466a4451c7319e3a072d118917957d6554Steve Block#ifndef CCVideoLayerImpl_h 272bde8e466a4451c7319e3a072d118917957d6554Steve Block#define CCVideoLayerImpl_h 282bde8e466a4451c7319e3a072d118917957d6554Steve Block 292bde8e466a4451c7319e3a072d118917957d6554Steve Block#include "ProgramBinding.h" 302bde8e466a4451c7319e3a072d118917957d6554Steve Block#include "ShaderChromium.h" 312bde8e466a4451c7319e3a072d118917957d6554Steve Block#include "VideoFrameChromium.h" 322bde8e466a4451c7319e3a072d118917957d6554Steve Block#include "VideoLayerChromium.h" 332bde8e466a4451c7319e3a072d118917957d6554Steve Block#include "cc/CCLayerImpl.h" 342bde8e466a4451c7319e3a072d118917957d6554Steve Block 352bde8e466a4451c7319e3a072d118917957d6554Steve Blocknamespace WebCore { 362bde8e466a4451c7319e3a072d118917957d6554Steve Block 372bde8e466a4451c7319e3a072d118917957d6554Steve Blockclass VideoFrameProvider; 382bde8e466a4451c7319e3a072d118917957d6554Steve Block 392bde8e466a4451c7319e3a072d118917957d6554Steve Blockclass CCVideoLayerImpl : public CCLayerImpl { 402bde8e466a4451c7319e3a072d118917957d6554Steve Blockpublic: 412bde8e466a4451c7319e3a072d118917957d6554Steve Block static PassRefPtr<CCVideoLayerImpl> create(LayerChromium* owner) 422bde8e466a4451c7319e3a072d118917957d6554Steve Block { 432bde8e466a4451c7319e3a072d118917957d6554Steve Block return adoptRef(new CCVideoLayerImpl(owner)); 442bde8e466a4451c7319e3a072d118917957d6554Steve Block } 452bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual ~CCVideoLayerImpl(); 462bde8e466a4451c7319e3a072d118917957d6554Steve Block 472bde8e466a4451c7319e3a072d118917957d6554Steve Block typedef ProgramBinding<VertexShaderPosTexTransform, FragmentShaderRGBATexFlipAlpha> RGBAProgram; 482bde8e466a4451c7319e3a072d118917957d6554Steve Block typedef ProgramBinding<VertexShaderPosTexYUVStretch, FragmentShaderYUVVideo> YUVProgram; 492bde8e466a4451c7319e3a072d118917957d6554Steve Block 502daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch virtual void draw(const IntRect&); 512bde8e466a4451c7319e3a072d118917957d6554Steve Block 522bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual void dumpLayerProperties(TextStream&, int indent) const; 532bde8e466a4451c7319e3a072d118917957d6554Steve Block 542bde8e466a4451c7319e3a072d118917957d6554Steve Block void setSkipsDraw(bool skipsDraw) { m_skipsDraw = skipsDraw; } 552bde8e466a4451c7319e3a072d118917957d6554Steve Block void setFrameFormat(VideoFrameChromium::Format format) { m_frameFormat = format; } 562bde8e466a4451c7319e3a072d118917957d6554Steve Block void setTexture(size_t, VideoLayerChromium::Texture); 572bde8e466a4451c7319e3a072d118917957d6554Steve Block 582bde8e466a4451c7319e3a072d118917957d6554Steve Blockprivate: 592bde8e466a4451c7319e3a072d118917957d6554Steve Block explicit CCVideoLayerImpl(LayerChromium*); 602bde8e466a4451c7319e3a072d118917957d6554Steve Block 612bde8e466a4451c7319e3a072d118917957d6554Steve Block void drawYUV(const YUVProgram*) const; 622bde8e466a4451c7319e3a072d118917957d6554Steve Block void drawRGBA(const RGBAProgram*) const; 632bde8e466a4451c7319e3a072d118917957d6554Steve Block 642bde8e466a4451c7319e3a072d118917957d6554Steve Block static const float yuv2RGB[9]; 652bde8e466a4451c7319e3a072d118917957d6554Steve Block static const float yuvAdjust[3]; 662bde8e466a4451c7319e3a072d118917957d6554Steve Block 672bde8e466a4451c7319e3a072d118917957d6554Steve Block bool m_skipsDraw; 682bde8e466a4451c7319e3a072d118917957d6554Steve Block VideoFrameChromium::Format m_frameFormat; 692bde8e466a4451c7319e3a072d118917957d6554Steve Block VideoLayerChromium::Texture m_textures[3]; 702bde8e466a4451c7319e3a072d118917957d6554Steve Block}; 712bde8e466a4451c7319e3a072d118917957d6554Steve Block 722bde8e466a4451c7319e3a072d118917957d6554Steve Block} 732bde8e466a4451c7319e3a072d118917957d6554Steve Block 742bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif // CCVideoLayerImpl_h 75