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

Side by Side 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, 5 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 unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/resources/video_resource_updater.h" 5 #include "cc/resources/video_resource_updater.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after
207 207
208 scoped_refptr<media::VideoFrame> CreateTestStreamTextureHardwareVideoFrame( 208 scoped_refptr<media::VideoFrame> CreateTestStreamTextureHardwareVideoFrame(
209 bool needs_copy) { 209 bool needs_copy) {
210 scoped_refptr<media::VideoFrame> video_frame = 210 scoped_refptr<media::VideoFrame> video_frame =
211 CreateTestHardwareVideoFrame(GL_TEXTURE_EXTERNAL_OES); 211 CreateTestHardwareVideoFrame(GL_TEXTURE_EXTERNAL_OES);
212 video_frame->metadata()->SetBoolean( 212 video_frame->metadata()->SetBoolean(
213 media::VideoFrameMetadata::COPY_REQUIRED, needs_copy); 213 media::VideoFrameMetadata::COPY_REQUIRED, needs_copy);
214 return video_frame; 214 return video_frame;
215 } 215 }
216 216
217 scoped_refptr<media::VideoFrame> CreateTestYuvHardwareVideoFrame() { 217 scoped_refptr<media::VideoFrame> CreateTestYuvHardwareVideoFrame(
218 media::VideoPixelFormat format,
219 unsigned target,
220 bool is_single_gmb) {
218 const int kDimension = 10; 221 const int kDimension = 10;
219 gfx::Size size(kDimension, kDimension); 222 gfx::Size size(kDimension, kDimension);
220 223
221 const gpu::SyncToken sync_token( 224 const gpu::SyncToken sync_token(
222 gpu::CommandBufferNamespace::GPU_IO, 0, 225 gpu::CommandBufferNamespace::GPU_IO, 0,
223 gpu::CommandBufferId::FromUnsafeValue(0x123), 7); 226 gpu::CommandBufferId::FromUnsafeValue(0x123), 7);
224 const unsigned target = GL_TEXTURE_RECTANGLE_ARB;
225 const int kPlanesNum = 3;
226 gpu::MailboxHolder mailbox_holders[media::VideoFrame::kMaxPlanes]; 227 gpu::MailboxHolder mailbox_holders[media::VideoFrame::kMaxPlanes];
227 for (int i = 0; i < kPlanesNum; ++i) { 228 size_t num_plane = is_single_gmb ? 1 : media::VideoFrame::NumPlanes(format);
229 for (size_t i = 0; i < num_plane; ++i) {
228 gpu::Mailbox mailbox; 230 gpu::Mailbox mailbox;
229 mailbox.name[0] = 50 + 1; 231 mailbox.name[0] = 50 + 1;
230 mailbox_holders[i] = gpu::MailboxHolder(mailbox, sync_token, target); 232 mailbox_holders[i] = gpu::MailboxHolder(mailbox, sync_token, target);
231 } 233 }
232 scoped_refptr<media::VideoFrame> video_frame = 234 scoped_refptr<media::VideoFrame> video_frame =
233 media::VideoFrame::WrapNativeTextures(media::PIXEL_FORMAT_I420, 235 media::VideoFrame::WrapNativeTextures(format, mailbox_holders,
234 mailbox_holders,
235 base::Bind(&ReleaseMailboxCB), 236 base::Bind(&ReleaseMailboxCB),
236 size, // coded_size 237 size, // coded_size
237 gfx::Rect(size), // visible_rect 238 gfx::Rect(size), // visible_rect
238 size, // natural_size 239 size, // natural_size
239 base::TimeDelta()); // timestamp 240 base::TimeDelta()); // timestamp
240 EXPECT_TRUE(video_frame); 241 EXPECT_TRUE(video_frame);
241 return video_frame; 242 return video_frame;
242 } 243 }
243 244
244 WebGraphicsContext3DUploadCounter* context3d_; 245 WebGraphicsContext3DUploadCounter* context3d_;
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after
481 CreateTestRGBAHardwareVideoFrame(); 482 CreateTestRGBAHardwareVideoFrame();
482 483
483 VideoFrameExternalResources resources = 484 VideoFrameExternalResources resources =
484 updater.CreateExternalResourcesFromVideoFrame(video_frame); 485 updater.CreateExternalResourcesFromVideoFrame(video_frame);
485 EXPECT_EQ(VideoFrameExternalResources::RGBA_PREMULTIPLIED_RESOURCE, 486 EXPECT_EQ(VideoFrameExternalResources::RGBA_PREMULTIPLIED_RESOURCE,
486 resources.type); 487 resources.type);
487 EXPECT_EQ(1u, resources.mailboxes.size()); 488 EXPECT_EQ(1u, resources.mailboxes.size());
488 EXPECT_EQ(1u, resources.release_callbacks.size()); 489 EXPECT_EQ(1u, resources.release_callbacks.size());
489 EXPECT_EQ(0u, resources.software_resources.size()); 490 EXPECT_EQ(0u, resources.software_resources.size());
490 491
491 video_frame = CreateTestYuvHardwareVideoFrame(); 492 video_frame = CreateTestYuvHardwareVideoFrame(
493 media::PIXEL_FORMAT_I420, GL_TEXTURE_RECTANGLE_ARB, false);
492 494
493 resources = updater.CreateExternalResourcesFromVideoFrame(video_frame); 495 resources = updater.CreateExternalResourcesFromVideoFrame(video_frame);
494 EXPECT_EQ(VideoFrameExternalResources::YUV_RESOURCE, resources.type); 496 EXPECT_EQ(VideoFrameExternalResources::YUV_RESOURCE, resources.type);
495 EXPECT_EQ(3u, resources.mailboxes.size()); 497 EXPECT_EQ(3u, resources.mailboxes.size());
496 EXPECT_EQ(3u, resources.release_callbacks.size()); 498 EXPECT_EQ(3u, resources.release_callbacks.size());
497 EXPECT_EQ(0u, resources.software_resources.size()); 499 EXPECT_EQ(0u, resources.software_resources.size());
498 EXPECT_FALSE(resources.read_lock_fences_enabled); 500 EXPECT_FALSE(resources.read_lock_fences_enabled);
499 501
500 video_frame = CreateTestYuvHardwareVideoFrame(); 502 video_frame = CreateTestYuvHardwareVideoFrame(
503 media::PIXEL_FORMAT_I420, GL_TEXTURE_RECTANGLE_ARB, false);
501 video_frame->metadata()->SetBoolean( 504 video_frame->metadata()->SetBoolean(
502 media::VideoFrameMetadata::READ_LOCK_FENCES_ENABLED, true); 505 media::VideoFrameMetadata::READ_LOCK_FENCES_ENABLED, true);
503 506
507 resources = updater.CreateExternalResourcesFromVideoFrame(video_frame);
508 EXPECT_TRUE(resources.read_lock_fences_enabled);
509 }
510
511 TEST_F(VideoResourceUpdaterTest, CreateForNV12HardwarePlanes) {
512 VideoResourceUpdater updater(context_provider_.get(),
513 resource_provider3d_.get());
514
515 scoped_refptr<media::VideoFrame> video_frame =
516 CreateTestYuvHardwareVideoFrame(media::PIXEL_FORMAT_NV12,
517 GL_TEXTURE_EXTERNAL_OES, false);
518
519 VideoFrameExternalResources resources =
520 updater.CreateExternalResourcesFromVideoFrame(video_frame);
521
522 EXPECT_EQ(VideoFrameExternalResources::YUV_RESOURCE, resources.type);
523 EXPECT_EQ(2u, resources.mailboxes.size());
524 EXPECT_EQ(2u, resources.release_callbacks.size());
525 EXPECT_EQ(0u, resources.software_resources.size());
526 EXPECT_FALSE(resources.read_lock_fences_enabled);
527
528 video_frame = CreateTestYuvHardwareVideoFrame(media::PIXEL_FORMAT_NV12,
529 GL_TEXTURE_EXTERNAL_OES, true);
530 resources = updater.CreateExternalResourcesFromVideoFrame(video_frame);
531 EXPECT_EQ(VideoFrameExternalResources::RGB_RESOURCE, resources.type);
532
533 video_frame = CreateTestYuvHardwareVideoFrame(media::PIXEL_FORMAT_NV12,
534 GL_TEXTURE_EXTERNAL_OES, false);
535 video_frame->metadata()->SetBoolean(
536 media::VideoFrameMetadata::READ_LOCK_FENCES_ENABLED, true);
537
504 resources = updater.CreateExternalResourcesFromVideoFrame(video_frame); 538 resources = updater.CreateExternalResourcesFromVideoFrame(video_frame);
505 EXPECT_TRUE(resources.read_lock_fences_enabled); 539 EXPECT_TRUE(resources.read_lock_fences_enabled);
506 } 540 }
507 541
508 TEST_F(VideoResourceUpdaterTest, CreateForHardwarePlanes_StreamTexture) { 542 TEST_F(VideoResourceUpdaterTest, CreateForHardwarePlanes_StreamTexture) {
509 bool use_stream_video_draw_quad = true; 543 bool use_stream_video_draw_quad = true;
510 VideoResourceUpdater updater(context_provider_.get(), 544 VideoResourceUpdater updater(context_provider_.get(),
511 resource_provider3d_.get(), 545 resource_provider3d_.get(),
512 use_stream_video_draw_quad); 546 use_stream_video_draw_quad);
513 context3d_->ResetTextureCreationCount(); 547 context3d_->ResetTextureCreationCount();
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
561 resources.type); 595 resources.type);
562 EXPECT_EQ(1u, resources.mailboxes.size()); 596 EXPECT_EQ(1u, resources.mailboxes.size());
563 EXPECT_EQ((GLenum)GL_TEXTURE_EXTERNAL_OES, resources.mailboxes[0].target()); 597 EXPECT_EQ((GLenum)GL_TEXTURE_EXTERNAL_OES, resources.mailboxes[0].target());
564 EXPECT_EQ(1u, resources.release_callbacks.size()); 598 EXPECT_EQ(1u, resources.release_callbacks.size());
565 EXPECT_EQ(0u, resources.software_resources.size()); 599 EXPECT_EQ(0u, resources.software_resources.size());
566 EXPECT_EQ(0, context3d_->TextureCreationCount()); 600 EXPECT_EQ(0, context3d_->TextureCreationCount());
567 } 601 }
568 602
569 } // namespace 603 } // namespace
570 } // namespace cc 604 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698