OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |