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