Index: cc/resources/video_resource_updater_unittest.cc |
diff --git a/cc/resources/video_resource_updater_unittest.cc b/cc/resources/video_resource_updater_unittest.cc |
index 135d14453b68d4109d21b7b7b3d614848d9ce157..dfa9fa2e4ec769ae85e086bdc4a50c63fd1b14df 100644 |
--- a/cc/resources/video_resource_updater_unittest.cc |
+++ b/cc/resources/video_resource_updater_unittest.cc |
@@ -214,24 +214,25 @@ class VideoResourceUpdaterTest : public testing::Test { |
return video_frame; |
} |
- scoped_refptr<media::VideoFrame> CreateTestYuvHardwareVideoFrame() { |
+ scoped_refptr<media::VideoFrame> CreateTestYuvHardwareVideoFrame( |
+ media::VideoPixelFormat format, |
+ unsigned target, |
+ bool is_single_gmb) { |
const int kDimension = 10; |
gfx::Size size(kDimension, kDimension); |
const gpu::SyncToken sync_token( |
gpu::CommandBufferNamespace::GPU_IO, 0, |
gpu::CommandBufferId::FromUnsafeValue(0x123), 7); |
- const unsigned target = GL_TEXTURE_RECTANGLE_ARB; |
- const int kPlanesNum = 3; |
gpu::MailboxHolder mailbox_holders[media::VideoFrame::kMaxPlanes]; |
- for (int i = 0; i < kPlanesNum; ++i) { |
+ size_t num_plane = is_single_gmb ? 1 : media::VideoFrame::NumPlanes(format); |
+ for (size_t i = 0; i < num_plane; ++i) { |
gpu::Mailbox mailbox; |
mailbox.name[0] = 50 + 1; |
mailbox_holders[i] = gpu::MailboxHolder(mailbox, sync_token, target); |
} |
scoped_refptr<media::VideoFrame> video_frame = |
- media::VideoFrame::WrapNativeTextures(media::PIXEL_FORMAT_I420, |
- mailbox_holders, |
+ media::VideoFrame::WrapNativeTextures(format, mailbox_holders, |
base::Bind(&ReleaseMailboxCB), |
size, // coded_size |
gfx::Rect(size), // visible_rect |
@@ -488,7 +489,8 @@ TEST_F(VideoResourceUpdaterTest, CreateForHardwarePlanes) { |
EXPECT_EQ(1u, resources.release_callbacks.size()); |
EXPECT_EQ(0u, resources.software_resources.size()); |
- video_frame = CreateTestYuvHardwareVideoFrame(); |
+ video_frame = CreateTestYuvHardwareVideoFrame( |
+ media::PIXEL_FORMAT_I420, GL_TEXTURE_RECTANGLE_ARB, false); |
resources = updater.CreateExternalResourcesFromVideoFrame(video_frame); |
EXPECT_EQ(VideoFrameExternalResources::YUV_RESOURCE, resources.type); |
@@ -497,7 +499,39 @@ TEST_F(VideoResourceUpdaterTest, CreateForHardwarePlanes) { |
EXPECT_EQ(0u, resources.software_resources.size()); |
EXPECT_FALSE(resources.read_lock_fences_enabled); |
- video_frame = CreateTestYuvHardwareVideoFrame(); |
+ video_frame = CreateTestYuvHardwareVideoFrame( |
+ media::PIXEL_FORMAT_I420, GL_TEXTURE_RECTANGLE_ARB, false); |
+ video_frame->metadata()->SetBoolean( |
+ media::VideoFrameMetadata::READ_LOCK_FENCES_ENABLED, true); |
+ |
+ resources = updater.CreateExternalResourcesFromVideoFrame(video_frame); |
+ EXPECT_TRUE(resources.read_lock_fences_enabled); |
+} |
+ |
+TEST_F(VideoResourceUpdaterTest, CreateForNV12HardwarePlanes) { |
+ VideoResourceUpdater updater(context_provider_.get(), |
+ resource_provider3d_.get()); |
+ |
+ scoped_refptr<media::VideoFrame> video_frame = |
+ CreateTestYuvHardwareVideoFrame(media::PIXEL_FORMAT_NV12, |
+ GL_TEXTURE_EXTERNAL_OES, false); |
+ |
+ VideoFrameExternalResources resources = |
+ updater.CreateExternalResourcesFromVideoFrame(video_frame); |
+ |
+ EXPECT_EQ(VideoFrameExternalResources::YUV_RESOURCE, resources.type); |
+ EXPECT_EQ(2u, resources.mailboxes.size()); |
+ EXPECT_EQ(2u, resources.release_callbacks.size()); |
+ EXPECT_EQ(0u, resources.software_resources.size()); |
+ EXPECT_FALSE(resources.read_lock_fences_enabled); |
+ |
+ video_frame = CreateTestYuvHardwareVideoFrame(media::PIXEL_FORMAT_NV12, |
+ GL_TEXTURE_EXTERNAL_OES, true); |
+ resources = updater.CreateExternalResourcesFromVideoFrame(video_frame); |
+ EXPECT_EQ(VideoFrameExternalResources::RGB_RESOURCE, resources.type); |
+ |
+ video_frame = CreateTestYuvHardwareVideoFrame(media::PIXEL_FORMAT_NV12, |
+ GL_TEXTURE_EXTERNAL_OES, false); |
video_frame->metadata()->SetBoolean( |
media::VideoFrameMetadata::READ_LOCK_FENCES_ENABLED, true); |