Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3477)

Unified Diff: cc/resources/video_resource_updater_unittest.cc

Issue 2678343011: chromeos: decode video into NV12 format instead of RGBA in vaapi decoder (Closed)
Patch Set: decide scanout in runtime Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);

Powered by Google App Engine
This is Rietveld 408576698