OLD | NEW |
1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "config.h" | 5 #include "config.h" |
6 | 6 |
7 #if USE(ACCELERATED_COMPOSITING) | 7 #if USE(ACCELERATED_COMPOSITING) |
8 | 8 |
9 #include "CCVideoLayerImpl.h" | 9 #include "CCVideoLayerImpl.h" |
10 | 10 |
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
149 if (!copyPlaneData(resourceProvider)) { | 149 if (!copyPlaneData(resourceProvider)) { |
150 m_provider->putCurrentFrame(m_frame); | 150 m_provider->putCurrentFrame(m_frame); |
151 m_frame = 0; | 151 m_frame = 0; |
152 return; | 152 return; |
153 } | 153 } |
154 | 154 |
155 if (m_format == GraphicsContext3D::TEXTURE_2D) | 155 if (m_format == GraphicsContext3D::TEXTURE_2D) |
156 m_externalTextureResource = resourceProvider->createResourceFromExternal
Texture(m_frame->textureId()); | 156 m_externalTextureResource = resourceProvider->createResourceFromExternal
Texture(m_frame->textureId()); |
157 } | 157 } |
158 | 158 |
159 void CCVideoLayerImpl::appendQuads(CCQuadSink& quadSink, bool&) | 159 void CCVideoLayerImpl::appendQuads(CCQuadSink& quadSink, CCAppendQuadsData& appe
ndQuadsData) |
160 { | 160 { |
161 ASSERT(CCProxy::isImplThread()); | 161 ASSERT(CCProxy::isImplThread()); |
162 | 162 |
163 if (!m_frame) | 163 if (!m_frame) |
164 return; | 164 return; |
165 | 165 |
166 CCSharedQuadState* sharedQuadState = quadSink.useSharedQuadState(createShare
dQuadState()); | 166 CCSharedQuadState* sharedQuadState = quadSink.useSharedQuadState(createShare
dQuadState()); |
167 appendDebugBorderQuad(quadSink, sharedQuadState); | 167 appendDebugBorderQuad(quadSink, sharedQuadState, appendQuadsData); |
168 | 168 |
169 // FIXME: When we pass quads out of process, we need to double-buffer, or | 169 // FIXME: When we pass quads out of process, we need to double-buffer, or |
170 // otherwise synchonize use of all textures in the quad. | 170 // otherwise synchonize use of all textures in the quad. |
171 | 171 |
172 IntRect quadRect(IntPoint(), contentBounds()); | 172 IntRect quadRect(IntPoint(), contentBounds()); |
173 | 173 |
174 switch (m_format) { | 174 switch (m_format) { |
175 case GraphicsContext3D::LUMINANCE: { | 175 case GraphicsContext3D::LUMINANCE: { |
176 // YUV software decoder. | 176 // YUV software decoder. |
177 const FramePlane& yPlane = m_framePlanes[WebKit::WebVideoFrame::yPlane]; | 177 const FramePlane& yPlane = m_framePlanes[WebKit::WebVideoFrame::yPlane]; |
178 const FramePlane& uPlane = m_framePlanes[WebKit::WebVideoFrame::uPlane]; | 178 const FramePlane& uPlane = m_framePlanes[WebKit::WebVideoFrame::uPlane]; |
179 const FramePlane& vPlane = m_framePlanes[WebKit::WebVideoFrame::vPlane]; | 179 const FramePlane& vPlane = m_framePlanes[WebKit::WebVideoFrame::vPlane]; |
180 OwnPtr<CCYUVVideoDrawQuad> yuvVideoQuad = CCYUVVideoDrawQuad::create(sha
redQuadState, quadRect, yPlane, uPlane, vPlane); | 180 OwnPtr<CCYUVVideoDrawQuad> yuvVideoQuad = CCYUVVideoDrawQuad::create(sha
redQuadState, quadRect, yPlane, uPlane, vPlane); |
181 quadSink.append(yuvVideoQuad.release()); | 181 quadSink.append(yuvVideoQuad.release(), appendQuadsData); |
182 break; | 182 break; |
183 } | 183 } |
184 case GraphicsContext3D::RGBA: { | 184 case GraphicsContext3D::RGBA: { |
185 // RGBA software decoder. | 185 // RGBA software decoder. |
186 const FramePlane& plane = m_framePlanes[WebKit::WebVideoFrame::rgbPlane]
; | 186 const FramePlane& plane = m_framePlanes[WebKit::WebVideoFrame::rgbPlane]
; |
187 float widthScaleFactor = static_cast<float>(plane.visibleSize.width()) /
plane.size.width(); | 187 float widthScaleFactor = static_cast<float>(plane.visibleSize.width()) /
plane.size.width(); |
188 | 188 |
189 bool premultipliedAlpha = true; | 189 bool premultipliedAlpha = true; |
190 FloatRect uvRect(0, 0, widthScaleFactor, 1); | 190 FloatRect uvRect(0, 0, widthScaleFactor, 1); |
191 bool flipped = false; | 191 bool flipped = false; |
192 OwnPtr<CCTextureDrawQuad> textureQuad = CCTextureDrawQuad::create(shared
QuadState, quadRect, plane.resourceId, premultipliedAlpha, uvRect, flipped); | 192 OwnPtr<CCTextureDrawQuad> textureQuad = CCTextureDrawQuad::create(shared
QuadState, quadRect, plane.resourceId, premultipliedAlpha, uvRect, flipped); |
193 quadSink.append(textureQuad.release()); | 193 quadSink.append(textureQuad.release(), appendQuadsData); |
194 break; | 194 break; |
195 } | 195 } |
196 case GraphicsContext3D::TEXTURE_2D: { | 196 case GraphicsContext3D::TEXTURE_2D: { |
197 // NativeTexture hardware decoder. | 197 // NativeTexture hardware decoder. |
198 bool premultipliedAlpha = true; | 198 bool premultipliedAlpha = true; |
199 FloatRect uvRect(0, 0, 1, 1); | 199 FloatRect uvRect(0, 0, 1, 1); |
200 bool flipped = false; | 200 bool flipped = false; |
201 OwnPtr<CCTextureDrawQuad> textureQuad = CCTextureDrawQuad::create(shared
QuadState, quadRect, m_externalTextureResource, premultipliedAlpha, uvRect, flip
ped); | 201 OwnPtr<CCTextureDrawQuad> textureQuad = CCTextureDrawQuad::create(shared
QuadState, quadRect, m_externalTextureResource, premultipliedAlpha, uvRect, flip
ped); |
202 quadSink.append(textureQuad.release()); | 202 quadSink.append(textureQuad.release(), appendQuadsData); |
203 break; | 203 break; |
204 } | 204 } |
205 case Extensions3D::TEXTURE_RECTANGLE_ARB: { | 205 case Extensions3D::TEXTURE_RECTANGLE_ARB: { |
206 IntSize textureSize(m_frame->width(), m_frame->height()); | 206 IntSize textureSize(m_frame->width(), m_frame->height()); |
207 OwnPtr<CCIOSurfaceDrawQuad> ioSurfaceQuad = CCIOSurfaceDrawQuad::create(
sharedQuadState, quadRect, textureSize, m_frame->textureId(), CCIOSurfaceDrawQua
d::Unflipped); | 207 OwnPtr<CCIOSurfaceDrawQuad> ioSurfaceQuad = CCIOSurfaceDrawQuad::create(
sharedQuadState, quadRect, textureSize, m_frame->textureId(), CCIOSurfaceDrawQua
d::Unflipped); |
208 quadSink.append(ioSurfaceQuad.release()); | 208 quadSink.append(ioSurfaceQuad.release(), appendQuadsData); |
209 break; | 209 break; |
210 } | 210 } |
211 case Extensions3DChromium::GL_TEXTURE_EXTERNAL_OES: { | 211 case Extensions3DChromium::GL_TEXTURE_EXTERNAL_OES: { |
212 // StreamTexture hardware decoder. | 212 // StreamTexture hardware decoder. |
213 OwnPtr<CCStreamVideoDrawQuad> streamVideoQuad = CCStreamVideoDrawQuad::c
reate(sharedQuadState, quadRect, m_frame->textureId(), m_streamTextureMatrix); | 213 OwnPtr<CCStreamVideoDrawQuad> streamVideoQuad = CCStreamVideoDrawQuad::c
reate(sharedQuadState, quadRect, m_frame->textureId(), m_streamTextureMatrix); |
214 quadSink.append(streamVideoQuad.release()); | 214 quadSink.append(streamVideoQuad.release(), appendQuadsData); |
215 break; | 215 break; |
216 } | 216 } |
217 default: | 217 default: |
218 CRASH(); // Someone updated convertVFCFormatToGC3DFormat above but updat
e this! | 218 CRASH(); // Someone updated convertVFCFormatToGC3DFormat above but updat
e this! |
219 } | 219 } |
220 } | 220 } |
221 | 221 |
222 void CCVideoLayerImpl::didDraw(CCResourceProvider* resourceProvider) | 222 void CCVideoLayerImpl::didDraw(CCResourceProvider* resourceProvider) |
223 { | 223 { |
224 ASSERT(CCProxy::isImplThread()); | 224 ASSERT(CCProxy::isImplThread()); |
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
379 void CCVideoLayerImpl::dumpLayerProperties(TextStream& ts, int indent) const | 379 void CCVideoLayerImpl::dumpLayerProperties(TextStream& ts, int indent) const |
380 { | 380 { |
381 writeIndent(ts, indent); | 381 writeIndent(ts, indent); |
382 ts << "video layer\n"; | 382 ts << "video layer\n"; |
383 CCLayerImpl::dumpLayerProperties(ts, indent); | 383 CCLayerImpl::dumpLayerProperties(ts, indent); |
384 } | 384 } |
385 | 385 |
386 } | 386 } |
387 | 387 |
388 #endif // USE(ACCELERATED_COMPOSITING) | 388 #endif // USE(ACCELERATED_COMPOSITING) |
OLD | NEW |