| 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 "cc/video_layer_impl.h" | 5 #include "cc/video_layer_impl.h" |
| 6 | 6 |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "cc/io_surface_draw_quad.h" | 8 #include "cc/io_surface_draw_quad.h" |
| 9 #include "cc/layer_tree_impl.h" | 9 #include "cc/layer_tree_impl.h" |
| 10 #include "cc/math_util.h" | 10 #include "cc/math_util.h" |
| 11 #include "cc/quad_sink.h" | 11 #include "cc/quad_sink.h" |
| 12 #include "cc/renderer.h" | 12 #include "cc/renderer.h" |
| 13 #include "cc/resource_provider.h" | 13 #include "cc/resource_provider.h" |
| 14 #include "cc/stream_video_draw_quad.h" | 14 #include "cc/stream_video_draw_quad.h" |
| 15 #include "cc/texture_draw_quad.h" | 15 #include "cc/texture_draw_quad.h" |
| 16 #include "cc/video_frame_provider_client_impl.h" | 16 #include "cc/video_frame_provider_client_impl.h" |
| 17 #include "cc/yuv_video_draw_quad.h" | 17 #include "cc/yuv_video_draw_quad.h" |
| 18 #include "gpu/GLES2/gl2extchromium.h" | 18 #include "gpu/GLES2/gl2extchromium.h" |
| 19 #include "media/filters/skcanvas_video_renderer.h" | 19 #include "media/filters/skcanvas_video_renderer.h" |
| 20 #include "third_party/khronos/GLES2/gl2.h" | 20 #include "third_party/khronos/GLES2/gl2.h" |
| 21 #include "third_party/khronos/GLES2/gl2ext.h" | 21 #include "third_party/khronos/GLES2/gl2ext.h" |
| 22 | 22 |
| 23 #if defined(GOOGLE_TV) | 23 #if defined(GOOGLE_TV) |
| 24 #include "cc/solid_color_draw_quad.h" | 24 #include "cc/solid_color_draw_quad.h" |
| 25 #endif | 25 #endif |
| 26 | 26 |
| 27 namespace cc { | 27 namespace cc { |
| 28 | 28 |
| 29 // static | 29 // static |
| 30 scoped_ptr<VideoLayerImpl> VideoLayerImpl::create(LayerTreeImpl* treeImpl, int i
d, VideoFrameProvider* provider) | 30 scoped_ptr<VideoLayerImpl> VideoLayerImpl::Create(LayerTreeImpl* treeImpl, int i
d, VideoFrameProvider* provider) |
| 31 { | 31 { |
| 32 scoped_ptr<VideoLayerImpl> layer(new VideoLayerImpl(treeImpl, id)); | 32 scoped_ptr<VideoLayerImpl> layer(new VideoLayerImpl(treeImpl, id)); |
| 33 layer->setProviderClientImpl(VideoFrameProviderClientImpl::Create(provider))
; | 33 layer->setProviderClientImpl(VideoFrameProviderClientImpl::Create(provider))
; |
| 34 DCHECK(treeImpl->proxy()->IsImplThread()); | 34 DCHECK(treeImpl->proxy()->IsImplThread()); |
| 35 DCHECK(treeImpl->proxy()->IsMainThreadBlocked()); | 35 DCHECK(treeImpl->proxy()->IsMainThreadBlocked()); |
| 36 return layer.Pass(); | 36 return layer.Pass(); |
| 37 } | 37 } |
| 38 | 38 |
| 39 VideoLayerImpl::VideoLayerImpl(LayerTreeImpl* treeImpl, int id) | 39 VideoLayerImpl::VideoLayerImpl(LayerTreeImpl* treeImpl, int id) |
| 40 : LayerImpl(treeImpl, id) | 40 : LayerImpl(treeImpl, id) |
| 41 , m_frame(0) | 41 , m_frame(0) |
| 42 , m_format(GL_INVALID_VALUE) | 42 , m_format(GL_INVALID_VALUE) |
| 43 , m_convertYUV(false) | 43 , m_convertYUV(false) |
| 44 , m_externalTextureResource(0) | 44 , m_externalTextureResource(0) |
| 45 { | 45 { |
| 46 } | 46 } |
| 47 | 47 |
| 48 VideoLayerImpl::~VideoLayerImpl() | 48 VideoLayerImpl::~VideoLayerImpl() |
| 49 { | 49 { |
| 50 if (!m_providerClientImpl->Stopped()) { | 50 if (!m_providerClientImpl->Stopped()) { |
| 51 // In impl side painting, we may have a pending and active layer | 51 // In impl side painting, we may have a pending and active layer |
| 52 // associated with the video provider at the same time. Both have a ref | 52 // associated with the video provider at the same time. Both have a ref |
| 53 // on the VideoFrameProviderClientImpl, but we stop when the first | 53 // on the VideoFrameProviderClientImpl, but we stop when the first |
| 54 // LayerImpl (the one on the pending tree) is destroyed since we know | 54 // LayerImpl (the one on the pending tree) is destroyed since we know |
| 55 // the main thread is blocked for this commit. | 55 // the main thread is blocked for this commit. |
| 56 DCHECK(layerTreeImpl()->proxy()->IsImplThread()); | 56 DCHECK(layer_tree_impl()->proxy()->IsImplThread()); |
| 57 DCHECK(layerTreeImpl()->proxy()->IsMainThreadBlocked()); | 57 DCHECK(layer_tree_impl()->proxy()->IsMainThreadBlocked()); |
| 58 m_providerClientImpl->Stop(); | 58 m_providerClientImpl->Stop(); |
| 59 } | 59 } |
| 60 freePlaneData(layerTreeImpl()->resource_provider()); | 60 freePlaneData(layer_tree_impl()->resource_provider()); |
| 61 | 61 |
| 62 #ifndef NDEBUG | 62 #ifndef NDEBUG |
| 63 for (size_t i = 0; i < media::VideoFrame::kMaxPlanes; ++i) | 63 for (size_t i = 0; i < media::VideoFrame::kMaxPlanes; ++i) |
| 64 DCHECK(!m_framePlanes[i].resourceId); | 64 DCHECK(!m_framePlanes[i].resourceId); |
| 65 DCHECK(!m_externalTextureResource); | 65 DCHECK(!m_externalTextureResource); |
| 66 #endif | 66 #endif |
| 67 } | 67 } |
| 68 | 68 |
| 69 scoped_ptr<LayerImpl> VideoLayerImpl::createLayerImpl(LayerTreeImpl* treeImpl) | 69 scoped_ptr<LayerImpl> VideoLayerImpl::CreateLayerImpl(LayerTreeImpl* treeImpl) |
| 70 { | 70 { |
| 71 return scoped_ptr<LayerImpl>(new VideoLayerImpl(treeImpl, id())); | 71 return scoped_ptr<LayerImpl>(new VideoLayerImpl(treeImpl, id())); |
| 72 } | 72 } |
| 73 | 73 |
| 74 void VideoLayerImpl::pushPropertiesTo(LayerImpl* layer) | 74 void VideoLayerImpl::PushPropertiesTo(LayerImpl* layer) |
| 75 { | 75 { |
| 76 LayerImpl::pushPropertiesTo(layer); | 76 LayerImpl::PushPropertiesTo(layer); |
| 77 | 77 |
| 78 VideoLayerImpl* other = static_cast<VideoLayerImpl*>(layer); | 78 VideoLayerImpl* other = static_cast<VideoLayerImpl*>(layer); |
| 79 other->setProviderClientImpl(m_providerClientImpl); | 79 other->setProviderClientImpl(m_providerClientImpl); |
| 80 } | 80 } |
| 81 | 81 |
| 82 void VideoLayerImpl::didBecomeActive() | 82 void VideoLayerImpl::DidBecomeActive() |
| 83 { | 83 { |
| 84 m_providerClientImpl->set_active_video_layer(this); | 84 m_providerClientImpl->set_active_video_layer(this); |
| 85 } | 85 } |
| 86 | 86 |
| 87 // Convert media::VideoFrame::Format to OpenGL enum values. | 87 // Convert media::VideoFrame::Format to OpenGL enum values. |
| 88 static GLenum convertVFCFormatToGLenum(const media::VideoFrame& frame) | 88 static GLenum convertVFCFormatToGLenum(const media::VideoFrame& frame) |
| 89 { | 89 { |
| 90 switch (frame.format()) { | 90 switch (frame.format()) { |
| 91 case media::VideoFrame::YV12: | 91 case media::VideoFrame::YV12: |
| 92 case media::VideoFrame::YV16: | 92 case media::VideoFrame::YV16: |
| (...skipping 18 matching lines...) Expand all Loading... |
| 111 { | 111 { |
| 112 if (!m_frame) | 112 if (!m_frame) |
| 113 return 0; | 113 return 0; |
| 114 | 114 |
| 115 if (m_convertYUV) | 115 if (m_convertYUV) |
| 116 return 1; | 116 return 1; |
| 117 | 117 |
| 118 return media::VideoFrame::NumPlanes(m_frame->format()); | 118 return media::VideoFrame::NumPlanes(m_frame->format()); |
| 119 } | 119 } |
| 120 | 120 |
| 121 void VideoLayerImpl::willDraw(ResourceProvider* resourceProvider) | 121 void VideoLayerImpl::WillDraw(ResourceProvider* resourceProvider) |
| 122 { | 122 { |
| 123 LayerImpl::willDraw(resourceProvider); | 123 LayerImpl::WillDraw(resourceProvider); |
| 124 | 124 |
| 125 | 125 |
| 126 // Explicitly acquire and release the provider mutex so it can be held from | 126 // Explicitly acquire and release the provider mutex so it can be held from |
| 127 // willDraw to didDraw. Since the compositor thread is in the middle of | 127 // willDraw to didDraw. Since the compositor thread is in the middle of |
| 128 // drawing, the layer will not be destroyed before didDraw is called. | 128 // drawing, the layer will not be destroyed before didDraw is called. |
| 129 // Therefore, the only thing that will prevent this lock from being released | 129 // Therefore, the only thing that will prevent this lock from being released |
| 130 // is the GPU process locking it. As the GPU process can't cause the | 130 // is the GPU process locking it. As the GPU process can't cause the |
| 131 // destruction of the provider (calling stopUsingProvider), holding this | 131 // destruction of the provider (calling stopUsingProvider), holding this |
| 132 // lock should not cause a deadlock. | 132 // lock should not cause a deadlock. |
| 133 m_frame = m_providerClientImpl->AcquireLockAndCurrentFrame(); | 133 m_frame = m_providerClientImpl->AcquireLockAndCurrentFrame(); |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 185 if (!copyPlaneData(resourceProvider)) { | 185 if (!copyPlaneData(resourceProvider)) { |
| 186 m_providerClientImpl->PutCurrentFrame(m_frame); | 186 m_providerClientImpl->PutCurrentFrame(m_frame); |
| 187 m_frame = 0; | 187 m_frame = 0; |
| 188 return; | 188 return; |
| 189 } | 189 } |
| 190 | 190 |
| 191 if (m_format == GL_TEXTURE_2D) | 191 if (m_format == GL_TEXTURE_2D) |
| 192 m_externalTextureResource = resourceProvider->CreateResourceFromExternal
Texture(m_frame->texture_id()); | 192 m_externalTextureResource = resourceProvider->CreateResourceFromExternal
Texture(m_frame->texture_id()); |
| 193 } | 193 } |
| 194 | 194 |
| 195 void VideoLayerImpl::appendQuads(QuadSink& quadSink, AppendQuadsData& appendQuad
sData) | 195 void VideoLayerImpl::AppendQuads(QuadSink* quadSink, AppendQuadsData* appendQuad
sData) |
| 196 { | 196 { |
| 197 if (!m_frame) | 197 if (!m_frame) |
| 198 return; | 198 return; |
| 199 | 199 |
| 200 SharedQuadState* sharedQuadState = quadSink.useSharedQuadState(createSharedQ
uadState()); | 200 SharedQuadState* sharedQuadState = quadSink->useSharedQuadState(CreateShared
QuadState()); |
| 201 appendDebugBorderQuad(quadSink, sharedQuadState, appendQuadsData); | 201 AppendDebugBorderQuad(quadSink, sharedQuadState, appendQuadsData); |
| 202 | 202 |
| 203 // FIXME: When we pass quads out of process, we need to double-buffer, or | 203 // FIXME: When we pass quads out of process, we need to double-buffer, or |
| 204 // otherwise synchonize use of all textures in the quad. | 204 // otherwise synchonize use of all textures in the quad. |
| 205 | 205 |
| 206 gfx::Rect quadRect(gfx::Point(), contentBounds()); | 206 gfx::Rect quadRect(content_bounds()); |
| 207 gfx::Rect opaqueRect(contentsOpaque() ? quadRect : gfx::Rect()); | 207 gfx::Rect opaqueRect(contents_opaque() ? quadRect : gfx::Rect()); |
| 208 gfx::Rect visibleRect = m_frame->visible_rect(); | 208 gfx::Rect visibleRect = m_frame->visible_rect(); |
| 209 gfx::Size codedSize = m_frame->coded_size(); | 209 gfx::Size codedSize = m_frame->coded_size(); |
| 210 | 210 |
| 211 // pixels for macroblocked formats. | 211 // pixels for macroblocked formats. |
| 212 const float texWidthScale = | 212 const float texWidthScale = |
| 213 static_cast<float>(visibleRect.width()) / codedSize.width(); | 213 static_cast<float>(visibleRect.width()) / codedSize.width(); |
| 214 const float texHeightScale = | 214 const float texHeightScale = |
| 215 static_cast<float>(visibleRect.height()) / codedSize.height(); | 215 static_cast<float>(visibleRect.height()) / codedSize.height(); |
| 216 | 216 |
| 217 #if defined(GOOGLE_TV) | 217 #if defined(GOOGLE_TV) |
| 218 // This block and other blocks wrapped around #if defined(GOOGLE_TV) is not | 218 // This block and other blocks wrapped around #if defined(GOOGLE_TV) is not |
| 219 // maintained by the general compositor team. Please contact the following | 219 // maintained by the general compositor team. Please contact the following |
| 220 // people instead: | 220 // people instead: |
| 221 // | 221 // |
| 222 // wonsik@chromium.org | 222 // wonsik@chromium.org |
| 223 // ycheo@chromium.org | 223 // ycheo@chromium.org |
| 224 | 224 |
| 225 if (m_frame->format() == media::VideoFrame::HOLE) { | 225 if (m_frame->format() == media::VideoFrame::HOLE) { |
| 226 scoped_ptr<SolidColorDrawQuad> solidColorDrawQuad = | 226 scoped_ptr<SolidColorDrawQuad> solidColorDrawQuad = |
| 227 SolidColorDrawQuad::Create(); | 227 SolidColorDrawQuad::Create(); |
| 228 // Create a solid color quad with transparent black and force no | 228 // Create a solid color quad with transparent black and force no |
| 229 // blending. | 229 // blending. |
| 230 solidColorDrawQuad->SetAll( | 230 solidColorDrawQuad->SetAll( |
| 231 sharedQuadState, quadRect, quadRect, quadRect, false, | 231 sharedQuadState, quadRect, quadRect, quadRect, false, |
| 232 SK_ColorTRANSPARENT); | 232 SK_ColorTRANSPARENT); |
| 233 quadSink.append(solidColorDrawQuad.PassAs<DrawQuad>(), appendQuadsData); | 233 quadSink->append(solidColorDrawQuad.PassAs<DrawQuad>(), appendQuadsData)
; |
| 234 return; | 234 return; |
| 235 } | 235 } |
| 236 #endif | 236 #endif |
| 237 | 237 |
| 238 switch (m_format) { | 238 switch (m_format) { |
| 239 case GL_LUMINANCE: { | 239 case GL_LUMINANCE: { |
| 240 // YUV software decoder. | 240 // YUV software decoder. |
| 241 const FramePlane& yPlane = m_framePlanes[media::VideoFrame::kYPlane]; | 241 const FramePlane& yPlane = m_framePlanes[media::VideoFrame::kYPlane]; |
| 242 const FramePlane& uPlane = m_framePlanes[media::VideoFrame::kUPlane]; | 242 const FramePlane& uPlane = m_framePlanes[media::VideoFrame::kUPlane]; |
| 243 const FramePlane& vPlane = m_framePlanes[media::VideoFrame::kVPlane]; | 243 const FramePlane& vPlane = m_framePlanes[media::VideoFrame::kVPlane]; |
| 244 gfx::SizeF texScale(texWidthScale, texHeightScale); | 244 gfx::SizeF texScale(texWidthScale, texHeightScale); |
| 245 scoped_ptr<YUVVideoDrawQuad> yuvVideoQuad = YUVVideoDrawQuad::Create(); | 245 scoped_ptr<YUVVideoDrawQuad> yuvVideoQuad = YUVVideoDrawQuad::Create(); |
| 246 yuvVideoQuad->SetNew(sharedQuadState, quadRect, opaqueRect, texScale, yP
lane, uPlane, vPlane); | 246 yuvVideoQuad->SetNew(sharedQuadState, quadRect, opaqueRect, texScale, yP
lane, uPlane, vPlane); |
| 247 quadSink.append(yuvVideoQuad.PassAs<DrawQuad>(), appendQuadsData); | 247 quadSink->append(yuvVideoQuad.PassAs<DrawQuad>(), appendQuadsData); |
| 248 break; | 248 break; |
| 249 } | 249 } |
| 250 case GL_RGBA: { | 250 case GL_RGBA: { |
| 251 // RGBA software decoder. | 251 // RGBA software decoder. |
| 252 const FramePlane& plane = m_framePlanes[media::VideoFrame::kRGBPlane]; | 252 const FramePlane& plane = m_framePlanes[media::VideoFrame::kRGBPlane]; |
| 253 bool premultipliedAlpha = true; | 253 bool premultipliedAlpha = true; |
| 254 gfx::PointF uvTopLeft(0.f, 0.f); | 254 gfx::PointF uvTopLeft(0.f, 0.f); |
| 255 gfx::PointF uvBottomRight(texWidthScale, texHeightScale); | 255 gfx::PointF uvBottomRight(texWidthScale, texHeightScale); |
| 256 const float opacity[] = {1.0f, 1.0f, 1.0f, 1.0f}; | 256 const float opacity[] = {1.0f, 1.0f, 1.0f, 1.0f}; |
| 257 bool flipped = false; | 257 bool flipped = false; |
| 258 scoped_ptr<TextureDrawQuad> textureQuad = TextureDrawQuad::Create(); | 258 scoped_ptr<TextureDrawQuad> textureQuad = TextureDrawQuad::Create(); |
| 259 textureQuad->SetNew(sharedQuadState, quadRect, opaqueRect, plane.resourc
eId, premultipliedAlpha, uvTopLeft, uvBottomRight, opacity, flipped); | 259 textureQuad->SetNew(sharedQuadState, quadRect, opaqueRect, plane.resourc
eId, premultipliedAlpha, uvTopLeft, uvBottomRight, opacity, flipped); |
| 260 quadSink.append(textureQuad.PassAs<DrawQuad>(), appendQuadsData); | 260 quadSink->append(textureQuad.PassAs<DrawQuad>(), appendQuadsData); |
| 261 break; | 261 break; |
| 262 } | 262 } |
| 263 case GL_TEXTURE_2D: { | 263 case GL_TEXTURE_2D: { |
| 264 // NativeTexture hardware decoder. | 264 // NativeTexture hardware decoder. |
| 265 bool premultipliedAlpha = true; | 265 bool premultipliedAlpha = true; |
| 266 gfx::PointF uvTopLeft(0.f, 0.f); | 266 gfx::PointF uvTopLeft(0.f, 0.f); |
| 267 gfx::PointF uvBottomRight(texWidthScale, texHeightScale); | 267 gfx::PointF uvBottomRight(texWidthScale, texHeightScale); |
| 268 const float opacity[] = {1.0f, 1.0f, 1.0f, 1.0f}; | 268 const float opacity[] = {1.0f, 1.0f, 1.0f, 1.0f}; |
| 269 bool flipped = false; | 269 bool flipped = false; |
| 270 scoped_ptr<TextureDrawQuad> textureQuad = TextureDrawQuad::Create(); | 270 scoped_ptr<TextureDrawQuad> textureQuad = TextureDrawQuad::Create(); |
| 271 textureQuad->SetNew(sharedQuadState, quadRect, opaqueRect, m_externalTex
tureResource, premultipliedAlpha, uvTopLeft, uvBottomRight, opacity, flipped); | 271 textureQuad->SetNew(sharedQuadState, quadRect, opaqueRect, m_externalTex
tureResource, premultipliedAlpha, uvTopLeft, uvBottomRight, opacity, flipped); |
| 272 quadSink.append(textureQuad.PassAs<DrawQuad>(), appendQuadsData); | 272 quadSink->append(textureQuad.PassAs<DrawQuad>(), appendQuadsData); |
| 273 break; | 273 break; |
| 274 } | 274 } |
| 275 case GL_TEXTURE_RECTANGLE_ARB: { | 275 case GL_TEXTURE_RECTANGLE_ARB: { |
| 276 gfx::Size visibleSize(visibleRect.width(), visibleRect.height()); | 276 gfx::Size visibleSize(visibleRect.width(), visibleRect.height()); |
| 277 scoped_ptr<IOSurfaceDrawQuad> ioSurfaceQuad = IOSurfaceDrawQuad::Create(
); | 277 scoped_ptr<IOSurfaceDrawQuad> ioSurfaceQuad = IOSurfaceDrawQuad::Create(
); |
| 278 ioSurfaceQuad->SetNew(sharedQuadState, quadRect, opaqueRect, visibleSize
, m_frame->texture_id(), IOSurfaceDrawQuad::UNFLIPPED); | 278 ioSurfaceQuad->SetNew(sharedQuadState, quadRect, opaqueRect, visibleSize
, m_frame->texture_id(), IOSurfaceDrawQuad::UNFLIPPED); |
| 279 quadSink.append(ioSurfaceQuad.PassAs<DrawQuad>(), appendQuadsData); | 279 quadSink->append(ioSurfaceQuad.PassAs<DrawQuad>(), appendQuadsData); |
| 280 break; | 280 break; |
| 281 } | 281 } |
| 282 case GL_TEXTURE_EXTERNAL_OES: { | 282 case GL_TEXTURE_EXTERNAL_OES: { |
| 283 // StreamTexture hardware decoder. | 283 // StreamTexture hardware decoder. |
| 284 gfx::Transform transform(m_providerClientImpl->stream_texture_matrix()); | 284 gfx::Transform transform(m_providerClientImpl->stream_texture_matrix()); |
| 285 transform.Scale(texWidthScale, texHeightScale); | 285 transform.Scale(texWidthScale, texHeightScale); |
| 286 scoped_ptr<StreamVideoDrawQuad> streamVideoQuad = StreamVideoDrawQuad::C
reate(); | 286 scoped_ptr<StreamVideoDrawQuad> streamVideoQuad = StreamVideoDrawQuad::C
reate(); |
| 287 streamVideoQuad->SetNew(sharedQuadState, quadRect, opaqueRect, m_frame->
texture_id(), transform); | 287 streamVideoQuad->SetNew(sharedQuadState, quadRect, opaqueRect, m_frame->
texture_id(), transform); |
| 288 quadSink.append(streamVideoQuad.PassAs<DrawQuad>(), appendQuadsData); | 288 quadSink->append(streamVideoQuad.PassAs<DrawQuad>(), appendQuadsData); |
| 289 break; | 289 break; |
| 290 } | 290 } |
| 291 default: | 291 default: |
| 292 NOTREACHED(); // Someone updated convertVFCFormatToGLenum above but upd
ate this! | 292 NOTREACHED(); // Someone updated convertVFCFormatToGLenum above but upd
ate this! |
| 293 break; | 293 break; |
| 294 } | 294 } |
| 295 } | 295 } |
| 296 | 296 |
| 297 void VideoLayerImpl::didDraw(ResourceProvider* resourceProvider) | 297 void VideoLayerImpl::DidDraw(ResourceProvider* resourceProvider) |
| 298 { | 298 { |
| 299 LayerImpl::didDraw(resourceProvider); | 299 LayerImpl::DidDraw(resourceProvider); |
| 300 | 300 |
| 301 if (!m_frame) | 301 if (!m_frame) |
| 302 return; | 302 return; |
| 303 | 303 |
| 304 if (m_format == GL_TEXTURE_2D) { | 304 if (m_format == GL_TEXTURE_2D) { |
| 305 DCHECK(m_externalTextureResource); | 305 DCHECK(m_externalTextureResource); |
| 306 // FIXME: the following assert will not be true when sending resources t
o a | 306 // FIXME: the following assert will not be true when sending resources t
o a |
| 307 // parent compositor. We will probably need to hold on to m_frame for | 307 // parent compositor. We will probably need to hold on to m_frame for |
| 308 // longer, and have several "current frames" in the pipeline. | 308 // longer, and have several "current frames" in the pipeline. |
| 309 DCHECK(!resourceProvider->InUseByConsumer(m_externalTextureResource)); | 309 DCHECK(!resourceProvider->InUseByConsumer(m_externalTextureResource)); |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 416 m_framePlanes[i].freeData(resourceProvider); | 416 m_framePlanes[i].freeData(resourceProvider); |
| 417 } | 417 } |
| 418 | 418 |
| 419 void VideoLayerImpl::freeUnusedPlaneData(ResourceProvider* resourceProvider) | 419 void VideoLayerImpl::freeUnusedPlaneData(ResourceProvider* resourceProvider) |
| 420 { | 420 { |
| 421 const size_t firstUnusedPlane = numPlanes(); | 421 const size_t firstUnusedPlane = numPlanes(); |
| 422 for (size_t i = firstUnusedPlane; i < media::VideoFrame::kMaxPlanes; ++i) | 422 for (size_t i = firstUnusedPlane; i < media::VideoFrame::kMaxPlanes; ++i) |
| 423 m_framePlanes[i].freeData(resourceProvider); | 423 m_framePlanes[i].freeData(resourceProvider); |
| 424 } | 424 } |
| 425 | 425 |
| 426 void VideoLayerImpl::didLoseOutputSurface() | 426 void VideoLayerImpl::DidLoseOutputSurface() |
| 427 { | 427 { |
| 428 freePlaneData(layerTreeImpl()->resource_provider()); | 428 freePlaneData(layer_tree_impl()->resource_provider()); |
| 429 } | 429 } |
| 430 | 430 |
| 431 void VideoLayerImpl::setNeedsRedraw() | 431 void VideoLayerImpl::setNeedsRedraw() |
| 432 { | 432 { |
| 433 layerTreeImpl()->SetNeedsRedraw(); | 433 layer_tree_impl()->SetNeedsRedraw(); |
| 434 } | 434 } |
| 435 | 435 |
| 436 void VideoLayerImpl::setProviderClientImpl(scoped_refptr<VideoFrameProviderClien
tImpl> providerClientImpl) | 436 void VideoLayerImpl::setProviderClientImpl(scoped_refptr<VideoFrameProviderClien
tImpl> providerClientImpl) |
| 437 { | 437 { |
| 438 m_providerClientImpl = providerClientImpl; | 438 m_providerClientImpl = providerClientImpl; |
| 439 } | 439 } |
| 440 | 440 |
| 441 const char* VideoLayerImpl::layerTypeAsString() const | 441 const char* VideoLayerImpl::LayerTypeAsString() const |
| 442 { | 442 { |
| 443 return "VideoLayer"; | 443 return "VideoLayer"; |
| 444 } | 444 } |
| 445 | 445 |
| 446 } // namespace cc | 446 } // namespace cc |
| OLD | NEW |