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 dadc62a3719476fa2a27d0094e7dc7f08046aa14..497b902a364128fea38fd02814ecbf4e454b4742 100644 |
| --- a/cc/resources/video_resource_updater.cc |
| +++ b/cc/resources/video_resource_updater.cc |
| @@ -25,6 +25,49 @@ namespace { |
| const ResourceFormat kRGBResourceFormat = RGBA_8888; |
| +VideoFrameExternalResources::ResourceType ResourceTypeForVideoFrame( |
| + media::VideoFrame* video_frame) { |
| + switch (video_frame->format()) { |
| + case media::PIXEL_FORMAT_ARGB: |
| + case media::PIXEL_FORMAT_XRGB: |
| + case media::PIXEL_FORMAT_UYVY: |
| + switch (video_frame->mailbox_holder(0).texture_target) { |
| + case GL_TEXTURE_2D: |
| + return (video_frame->format() == media::PIXEL_FORMAT_XRGB) |
|
sandersd (OOO until July 31)
2015/09/08 23:09:57
Indent.
danakj
2015/09/08 23:13:48
Please run git cl format on any patch that touches
Andre
2015/09/09 00:40:44
Done.
|
| + ? VideoFrameExternalResources::RGB_RESOURCE |
| + : VideoFrameExternalResources::RGBA_RESOURCE; |
| + case GL_TEXTURE_EXTERNAL_OES: |
| + return VideoFrameExternalResources::STREAM_TEXTURE_RESOURCE; |
| + case GL_TEXTURE_RECTANGLE_ARB: |
| + return VideoFrameExternalResources::IO_SURFACE; |
| + default: |
| + NOTREACHED(); |
| + break; |
| + } |
| + break; |
| + case media::PIXEL_FORMAT_I420: |
| + return VideoFrameExternalResources::YUV_RESOURCE; |
| + break; |
| + case media::PIXEL_FORMAT_NV12: |
|
ccameron
2015/09/08 23:09:09
I'm a little bit afraid we'll hit this on a non-Ma
|
| + DCHECK_EQ(static_cast<uint32_t>(GL_TEXTURE_RECTANGLE_ARB), |
| + video_frame->mailbox_holder(0).texture_target); |
| + return VideoFrameExternalResources::IO_SURFACE; |
| + break; |
| + case media::PIXEL_FORMAT_YV12: |
| + case media::PIXEL_FORMAT_YV16: |
| + case media::PIXEL_FORMAT_YV24: |
| + case media::PIXEL_FORMAT_YV12A: |
| + case media::PIXEL_FORMAT_NV21: |
| + case media::PIXEL_FORMAT_YUY2: |
| + case media::PIXEL_FORMAT_RGB24: |
| + case media::PIXEL_FORMAT_RGB32: |
| + case media::PIXEL_FORMAT_MJPEG: |
| + case media::PIXEL_FORMAT_UNKNOWN: |
| + break; |
| + } |
| + return VideoFrameExternalResources::NONE; |
| +} |
| + |
| class SyncPointClientImpl : public media::VideoFrame::SyncPointClient { |
| public: |
| explicit SyncPointClientImpl(gpu::gles2::GLES2Interface* gl, |
| @@ -375,56 +418,21 @@ VideoFrameExternalResources VideoResourceUpdater::CreateForHardwarePlanes( |
| if (!context_provider_) |
| return VideoFrameExternalResources(); |
| - const size_t textures = media::VideoFrame::NumPlanes(video_frame->format()); |
| - DCHECK_GE(textures, 1u); |
| VideoFrameExternalResources external_resources; |
| external_resources.read_lock_fences_enabled = true; |
| - switch (video_frame->format()) { |
| - case media::PIXEL_FORMAT_ARGB: |
| - case media::PIXEL_FORMAT_XRGB: |
| - case media::PIXEL_FORMAT_UYVY: |
| - DCHECK_EQ(1u, textures); |
| - switch (video_frame->mailbox_holder(0).texture_target) { |
| - case GL_TEXTURE_2D: |
| - external_resources.type = |
| - (video_frame->format() == media::PIXEL_FORMAT_XRGB) |
| - ? VideoFrameExternalResources::RGB_RESOURCE |
| - : VideoFrameExternalResources::RGBA_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 media::PIXEL_FORMAT_I420: |
| - external_resources.type = VideoFrameExternalResources::YUV_RESOURCE; |
| - break; |
| - case media::PIXEL_FORMAT_YV12: |
| - case media::PIXEL_FORMAT_YV16: |
| - case media::PIXEL_FORMAT_YV24: |
| - case media::PIXEL_FORMAT_YV12A: |
| - case media::PIXEL_FORMAT_NV12: |
| - case media::PIXEL_FORMAT_NV21: |
| - case media::PIXEL_FORMAT_YUY2: |
| - case media::PIXEL_FORMAT_RGB24: |
| - case media::PIXEL_FORMAT_RGB32: |
| - case media::PIXEL_FORMAT_MJPEG: |
| - case media::PIXEL_FORMAT_UNKNOWN: |
| - DLOG(ERROR) << "Unsupported Texture format" |
| - << media::VideoPixelFormatToString(video_frame->format()); |
| - return external_resources; |
| + |
| + external_resources.type = ResourceTypeForVideoFrame(video_frame.get()); |
| + if (external_resources.type == VideoFrameExternalResources::NONE) { |
| + DLOG(ERROR) << "Unsupported Texture format" |
| + << media::VideoPixelFormatToString(video_frame->format()); |
| + return external_resources; |
| } |
| - DCHECK_NE(VideoFrameExternalResources::NONE, external_resources.type); |
| - for (size_t i = 0; i < textures; ++i) { |
| + const size_t num_planes = media::VideoFrame::NumPlanes(video_frame->format()); |
| + for (size_t i = 0; i < num_planes; ++i) { |
| const gpu::MailboxHolder& mailbox_holder = video_frame->mailbox_holder(i); |
| + if (mailbox_holder.mailbox.IsZero()) |
|
ccameron
2015/09/08 23:09:09
IIUC, for NV12, num_planes will be 2, but we'll on
|
| + break; |
| external_resources.mailboxes.push_back( |
| TextureMailbox(mailbox_holder.mailbox, mailbox_holder.texture_target, |
| mailbox_holder.sync_point, video_frame->coded_size(), |