Chromium Code Reviews| Index: cc/resources/video_resource_updater.cc |
| diff --git a/cc/resources/video_resource_updater.cc b/cc/resources/video_resource_updater.cc |
| index 86cb6bff085e7fb444442c6c1b7bf3912420244f..154f9ffdae56790b087cc1bdbcee07bd7ca98bb3 100644 |
| --- a/cc/resources/video_resource_updater.cc |
| +++ b/cc/resources/video_resource_updater.cc |
| @@ -402,38 +402,47 @@ VideoFrameExternalResources VideoResourceUpdater::CreateForHardwarePlanes( |
| media::VideoFrame::Format frame_format = video_frame->format(); |
| DCHECK_EQ(frame_format, media::VideoFrame::NATIVE_TEXTURE); |
| - if (frame_format != media::VideoFrame::NATIVE_TEXTURE) |
| - return VideoFrameExternalResources(); |
| - |
| if (!context_provider_) |
| return VideoFrameExternalResources(); |
| - DCHECK_EQ(1u, media::VideoFrame::NumTextures(video_frame->texture_format())); |
| - const gpu::MailboxHolder& mailbox_holder = video_frame->mailbox_holder(0); |
| + size_t textures = |
| + media::VideoFrame::NumTextures(video_frame->texture_format()); |
| + DCHECK_GE(textures, 1u); |
| VideoFrameExternalResources external_resources; |
| - switch (mailbox_holder.texture_target) { |
| - case GL_TEXTURE_2D: |
| - external_resources.type = VideoFrameExternalResources::RGB_RESOURCE; |
| - break; |
| - case GL_TEXTURE_EXTERNAL_OES: |
| - external_resources.type = |
| - VideoFrameExternalResources::STREAM_TEXTURE_RESOURCE; |
| + switch (video_frame->texture_format()) { |
| + case media::VideoFrame::TEXTURE_RGBA: |
| + DCHECK_EQ(1u, textures); |
| + switch (video_frame->mailbox_holder(0).texture_target) { |
| + case GL_TEXTURE_2D: |
| + external_resources.type = VideoFrameExternalResources::RGB_RESOURCE; |
| + break; |
| + case GL_TEXTURE_EXTERNAL_OES: |
| + external_resources.type = |
| + VideoFrameExternalResources::STREAM_TEXTURE_RESOURCE; |
| + break; |
| + case GL_TEXTURE_RECTANGLE_ARB: |
| + external_resources.type = VideoFrameExternalResources::IO_SURFACE; |
| + break; |
| + default: |
| + NOTREACHED(); |
| + return VideoFrameExternalResources(); |
| + } |
| break; |
| - case GL_TEXTURE_RECTANGLE_ARB: |
| - external_resources.type = VideoFrameExternalResources::IO_SURFACE; |
| + case media::VideoFrame::TEXTURE_YUV_420: |
| + external_resources.type = VideoFrameExternalResources::YUV_RESOURCE; |
| break; |
| - default: |
| - NOTREACHED(); |
| - return VideoFrameExternalResources(); |
| } |
|
hendrikw
2015/05/11 18:53:39
You should probably have a default and NOTREACHED(
Daniele Castagna
2015/05/11 19:09:12
We opted to add a DCHECK to verify that extenral_r
|
| - external_resources.mailboxes.push_back( |
| - TextureMailbox(mailbox_holder.mailbox, mailbox_holder.texture_target, |
| - mailbox_holder.sync_point)); |
| - external_resources.mailboxes.back().set_allow_overlay( |
| - video_frame->allow_overlay()); |
| - external_resources.release_callbacks.push_back( |
| - base::Bind(&ReturnTexture, AsWeakPtr(), video_frame)); |
| + for (size_t i = 0; i < textures; ++i) { |
| + const gpu::MailboxHolder& mailbox_holder = video_frame->mailbox_holder(i); |
| + external_resources.mailboxes.push_back( |
| + TextureMailbox(mailbox_holder.mailbox, mailbox_holder.texture_target, |
| + mailbox_holder.sync_point)); |
| + external_resources.mailboxes.back().set_allow_overlay( |
| + video_frame->allow_overlay()); |
| + external_resources.release_callbacks.push_back( |
| + base::Bind(&ReturnTexture, AsWeakPtr(), video_frame)); |
| + } |
| return external_resources; |
| } |