Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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 "base/message_loop/message_loop.h" | 5 #include "base/message_loop/message_loop.h" |
| 6 #include "cc/layers/append_quads_data.h" | 6 #include "cc/layers/append_quads_data.h" |
| 7 #include "cc/output/gl_renderer.h" | 7 #include "cc/output/gl_renderer.h" |
| 8 #include "cc/quads/draw_quad.h" | 8 #include "cc/quads/draw_quad.h" |
| 9 #include "cc/quads/picture_draw_quad.h" | 9 #include "cc/quads/picture_draw_quad.h" |
| 10 #include "cc/quads/texture_draw_quad.h" | 10 #include "cc/quads/texture_draw_quad.h" |
| (...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 149 resource, | 149 resource, |
| 150 premultiplied_alpha, | 150 premultiplied_alpha, |
| 151 gfx::PointF(0.0f, 0.0f), // uv_top_left | 151 gfx::PointF(0.0f, 0.0f), // uv_top_left |
| 152 gfx::PointF(1.0f, 1.0f), // uv_bottom_right | 152 gfx::PointF(1.0f, 1.0f), // uv_bottom_right |
| 153 background_color, | 153 background_color, |
| 154 vertex_opacity, | 154 vertex_opacity, |
| 155 false, // flipped | 155 false, // flipped |
| 156 false); // nearest_neighbor | 156 false); // nearest_neighbor |
| 157 } | 157 } |
| 158 | 158 |
| 159 void CreateTestYUVVideoDrawQuad_FromVideoFrame( | |
|
enne (OOO)
2015/02/04 21:24:00
Ack, I touched some of these functions in a recent
awoloszyn
2015/02/12 16:48:51
Turns out it wasn't too bad!
| |
| 160 const SharedQuadState* shared_state, | |
| 161 scoped_refptr<media::VideoFrame> video_frame, | |
| 162 bool is_transparent, | |
| 163 const gfx::RectF& tex_coord_rect, | |
| 164 RenderPass* render_pass, | |
| 165 VideoResourceUpdater* video_resource_updater, | |
| 166 const gfx::Rect& rect, | |
| 167 ResourceProvider* resource_provider) { | |
| 168 const bool with_alpha = (video_frame->format() == media::VideoFrame::YV12A); | |
| 169 const YUVVideoDrawQuad::ColorSpace color_space = | |
| 170 (video_frame->format() == media::VideoFrame::YV12J | |
| 171 ? YUVVideoDrawQuad::REC_601_JPEG | |
| 172 : YUVVideoDrawQuad::REC_601); | |
| 173 const gfx::Rect opaque_rect(0, 0, 0, 0); | |
| 174 | |
| 175 if (with_alpha) | |
| 176 memset(video_frame->data(media::VideoFrame::kAPlane), | |
| 177 is_transparent ? 0 : 128, | |
| 178 video_frame->stride(media::VideoFrame::kAPlane) * | |
| 179 video_frame->rows(media::VideoFrame::kAPlane)); | |
| 180 | |
| 181 VideoFrameExternalResources resources = | |
| 182 video_resource_updater->CreateExternalResourcesFromVideoFrame( | |
| 183 video_frame); | |
| 184 | |
| 185 EXPECT_EQ(VideoFrameExternalResources::YUV_RESOURCE, resources.type); | |
| 186 EXPECT_EQ(media::VideoFrame::NumPlanes(video_frame->format()), | |
| 187 resources.mailboxes.size()); | |
| 188 EXPECT_EQ(media::VideoFrame::NumPlanes(video_frame->format()), | |
| 189 resources.release_callbacks.size()); | |
| 190 | |
| 191 ResourceProvider::ResourceId y_resource = | |
| 192 resource_provider->CreateResourceFromTextureMailbox( | |
| 193 resources.mailboxes[media::VideoFrame::kYPlane], | |
| 194 SingleReleaseCallbackImpl::Create( | |
| 195 resources.release_callbacks[media::VideoFrame::kYPlane])); | |
| 196 ResourceProvider::ResourceId u_resource = | |
| 197 resource_provider->CreateResourceFromTextureMailbox( | |
| 198 resources.mailboxes[media::VideoFrame::kUPlane], | |
| 199 SingleReleaseCallbackImpl::Create( | |
| 200 resources.release_callbacks[media::VideoFrame::kUPlane])); | |
| 201 ResourceProvider::ResourceId v_resource = | |
| 202 resource_provider->CreateResourceFromTextureMailbox( | |
| 203 resources.mailboxes[media::VideoFrame::kVPlane], | |
| 204 SingleReleaseCallbackImpl::Create( | |
| 205 resources.release_callbacks[media::VideoFrame::kVPlane])); | |
| 206 ResourceProvider::ResourceId a_resource = 0; | |
| 207 if (with_alpha) { | |
| 208 a_resource = resource_provider->CreateResourceFromTextureMailbox( | |
| 209 resources.mailboxes[media::VideoFrame::kAPlane], | |
| 210 SingleReleaseCallbackImpl::Create( | |
| 211 resources.release_callbacks[media::VideoFrame::kAPlane])); | |
| 212 } | |
| 213 | |
| 214 YUVVideoDrawQuad* yuv_quad = | |
| 215 render_pass->CreateAndAppendDrawQuad<YUVVideoDrawQuad>(); | |
| 216 yuv_quad->SetNew(shared_state, rect, opaque_rect, rect, tex_coord_rect, | |
| 217 y_resource, u_resource, v_resource, a_resource, color_space); | |
| 218 } | |
| 219 | |
| 220 void CreateTestYUVVideoDrawQuad_Striped( | |
| 221 const SharedQuadState* shared_state, | |
| 222 media::VideoFrame::Format format, | |
| 223 bool is_transparent, | |
| 224 const gfx::RectF& tex_coord_rect, | |
| 225 RenderPass* render_pass, | |
| 226 VideoResourceUpdater* video_resource_updater, | |
| 227 const gfx::Rect& rect, | |
| 228 ResourceProvider* resource_provider) { | |
| 229 scoped_refptr<media::VideoFrame> video_frame = media::VideoFrame::CreateFrame( | |
| 230 format, rect.size(), rect, rect.size(), base::TimeDelta()); | |
| 231 | |
| 232 // YUV values representing a striped pattern, for validating texture | |
| 233 // coordinates for sampling. | |
| 234 uint8_t y_value = 0; | |
| 235 uint8_t u_value = 0; | |
| 236 uint8_t v_value = 0; | |
| 237 for (int i = 0; i < video_frame->rows(media::VideoFrame::kYPlane); ++i) { | |
| 238 uint8_t* y_row = video_frame->data(media::VideoFrame::kYPlane) + | |
| 239 video_frame->stride(media::VideoFrame::kYPlane) * i; | |
| 240 for (int j = 0; j < video_frame->row_bytes(media::VideoFrame::kYPlane); | |
| 241 ++j) { | |
| 242 y_row[j] = (y_value += 1); | |
| 243 } | |
| 244 } | |
| 245 for (int i = 0; i < video_frame->rows(media::VideoFrame::kUPlane); ++i) { | |
| 246 uint8_t* u_row = video_frame->data(media::VideoFrame::kUPlane) + | |
| 247 video_frame->stride(media::VideoFrame::kUPlane) * i; | |
| 248 uint8_t* v_row = video_frame->data(media::VideoFrame::kVPlane) + | |
| 249 video_frame->stride(media::VideoFrame::kVPlane) * i; | |
| 250 for (int j = 0; j < video_frame->row_bytes(media::VideoFrame::kUPlane); | |
| 251 ++j) { | |
| 252 u_row[j] = (u_value += 3); | |
| 253 v_row[j] = (v_value += 5); | |
| 254 } | |
| 255 } | |
| 256 CreateTestYUVVideoDrawQuad_FromVideoFrame( | |
| 257 shared_state, video_frame, is_transparent, tex_coord_rect, render_pass, | |
| 258 video_resource_updater, rect, resource_provider); | |
| 259 } | |
| 260 | |
| 261 void CreateTestYUVVideoDrawQuad_Solid( | |
| 262 const SharedQuadState* shared_state, | |
| 263 media::VideoFrame::Format format, | |
| 264 bool is_transparent, | |
| 265 const gfx::RectF& tex_coord_rect, | |
| 266 uint8 y, | |
| 267 uint8 u, | |
| 268 uint8 v, | |
| 269 RenderPass* render_pass, | |
| 270 VideoResourceUpdater* video_resource_updater, | |
| 271 const gfx::Rect& rect, | |
| 272 ResourceProvider* resource_provider) { | |
| 273 scoped_refptr<media::VideoFrame> video_frame = media::VideoFrame::CreateFrame( | |
| 274 format, rect.size(), rect, rect.size(), base::TimeDelta()); | |
| 275 | |
| 276 // YUV values of a solid, constant, color. Useful for testing that color | |
| 277 // space/color range are being handled properly. | |
| 278 memset(video_frame->data(media::VideoFrame::kYPlane), y, | |
| 279 video_frame->stride(media::VideoFrame::kYPlane) * | |
| 280 video_frame->rows(media::VideoFrame::kYPlane)); | |
| 281 memset(video_frame->data(media::VideoFrame::kUPlane), u, | |
| 282 video_frame->stride(media::VideoFrame::kUPlane) * | |
| 283 video_frame->rows(media::VideoFrame::kUPlane)); | |
| 284 memset(video_frame->data(media::VideoFrame::kVPlane), v, | |
| 285 video_frame->stride(media::VideoFrame::kVPlane) * | |
| 286 video_frame->rows(media::VideoFrame::kVPlane)); | |
| 287 | |
| 288 CreateTestYUVVideoDrawQuad_FromVideoFrame( | |
| 289 shared_state, video_frame, is_transparent, tex_coord_rect, render_pass, | |
| 290 video_resource_updater, rect, resource_provider); | |
| 291 } | |
| 292 | |
| 159 typedef ::testing::Types<GLRenderer, | 293 typedef ::testing::Types<GLRenderer, |
| 160 SoftwareRenderer, | 294 SoftwareRenderer, |
| 161 GLRendererWithExpandedViewport, | 295 GLRendererWithExpandedViewport, |
| 162 SoftwareRendererWithExpandedViewport> RendererTypes; | 296 SoftwareRendererWithExpandedViewport> RendererTypes; |
| 163 TYPED_TEST_CASE(RendererPixelTest, RendererTypes); | 297 TYPED_TEST_CASE(RendererPixelTest, RendererTypes); |
| 164 | 298 |
| 165 template <typename RendererType> | 299 template <typename RendererType> |
| 166 class FuzzyForSoftwareOnlyPixelComparator : public PixelComparator { | 300 class FuzzyForSoftwareOnlyPixelComparator : public PixelComparator { |
| 167 public: | 301 public: |
| 168 explicit FuzzyForSoftwareOnlyPixelComparator(bool discard_alpha) | 302 explicit FuzzyForSoftwareOnlyPixelComparator(bool discard_alpha) |
| (...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 314 | 448 |
| 315 RenderPassList pass_list; | 449 RenderPassList pass_list; |
| 316 pass_list.push_back(pass.Pass()); | 450 pass_list.push_back(pass.Pass()); |
| 317 | 451 |
| 318 EXPECT_TRUE(this->RunPixelTest( | 452 EXPECT_TRUE(this->RunPixelTest( |
| 319 &pass_list, | 453 &pass_list, |
| 320 base::FilePath(FILE_PATH_LITERAL("green_alpha.png")), | 454 base::FilePath(FILE_PATH_LITERAL("green_alpha.png")), |
| 321 FuzzyPixelOffByOneComparator(true))); | 455 FuzzyPixelOffByOneComparator(true))); |
| 322 } | 456 } |
| 323 | 457 |
| 458 static const char* types[] = { | |
| 459 "intersecting_blue_green.png", | |
| 460 "intersecting_blue_green_texture.png", | |
|
enne (OOO)
2015/02/04 21:24:00
What's with the weird aliasing in this image and t
awoloszyn
2015/02/12 16:48:52
I replaced these images with more sensible ones. W
| |
| 461 "intersecting_blue_green_render_pass.png", | |
|
enne (OOO)
2015/02/04 21:24:00
The intersecting_blue_green_render_pass.png looks
awoloszyn
2015/02/12 16:48:51
I replaced most of the pictures with fuzz.
| |
| 462 }; | |
| 463 | |
| 464 #define GLImageIndex(Type, number) \ | |
| 465 template <> \ | |
| 466 struct GLImage<Type> { \ | |
| 467 static const int val = number; \ | |
| 468 }; | |
| 469 | |
| 470 template <typename QuadType> | |
| 471 struct GLImage { | |
| 472 static const int val = 0; | |
| 473 }; | |
| 474 GLImageIndex(TextureDrawQuad, 1); | |
|
enne (OOO)
2015/02/04 21:24:00
Whoa, this is a bit obtuse to get a string into a
awoloszyn
2015/02/12 16:48:52
Fixed.
| |
| 475 GLImageIndex(YUVVideoDrawQuad, 1); | |
| 476 GLImageIndex(RenderPassDrawQuad, 2); | |
| 477 | |
| 478 template <typename RendererType, typename QuadType> | |
| 479 struct TypeStruct { | |
| 480 static const char* IntersectingQuadImage() { | |
| 481 return types[GLImage<QuadType>::val]; | |
| 482 } | |
| 483 }; | |
| 484 | |
| 485 template <typename QuadType> | |
| 486 struct TypeStruct<SoftwareRenderer, QuadType> { | |
| 487 static const char* IntersectingQuadImage() { | |
| 488 return "intersecting_blue_green_software.png"; | |
| 489 } | |
| 490 }; | |
| 491 | |
| 492 template <typename QuadType> | |
| 493 struct TypeStruct<SoftwareRendererWithExpandedViewport, QuadType> { | |
| 494 static const char* IntersectingQuadImage() { | |
| 495 return "intersecting_blue_green_software.png"; | |
| 496 } | |
| 497 }; | |
| 498 | |
| 499 template <typename TypeParam> | |
| 500 class IntersectingQuadPixelTest : public RendererPixelTest<TypeParam> { | |
| 501 protected: | |
| 502 void SetupQuadStateAndRenderPass() { | |
| 503 viewport_rect_ = gfx::Rect(this->device_viewport_size_); | |
| 504 quad_rect_ = gfx::Rect(0, 0, this->device_viewport_size_.width(), | |
| 505 this->device_viewport_size_.height() / 2.0); | |
| 506 | |
| 507 RenderPassId id(1, 1); | |
| 508 render_pass_ = CreateTestRootRenderPass(id, viewport_rect_); | |
| 509 gfx::Transform trans; | |
|
enne (OOO)
2015/02/04 21:24:00
Can you leave a large comment about what this is s
awoloszyn
2015/02/12 16:48:51
Done.
| |
| 510 trans.Translate3d(0, 0, 0.707 * this->device_viewport_size_.width() / 2.0); | |
| 511 trans.RotateAboutZAxis(46.0); | |
|
enne (OOO)
2015/02/04 21:24:00
Why 46 degrees? Is that why there's the weird alia
awoloszyn
2015/02/12 16:48:51
I wanted to avoid picking a very common rotation,
| |
| 512 trans.RotateAboutYAxis(46.0); | |
| 513 | |
| 514 front_quad_state_ = | |
| 515 CreateTestSharedQuadState(trans, viewport_rect_, render_pass_.get()); | |
| 516 front_quad_state_->clip_rect = quad_rect_; | |
| 517 front_quad_state_->sorting_context_id = 1; | |
| 518 | |
| 519 trans = gfx::Transform(); | |
| 520 trans.Translate3d(0, 0, -0.707 * this->device_viewport_size_.width() / 2.0); | |
| 521 trans.RotateAboutYAxis(-45.0); | |
| 522 back_quad_state_ = | |
| 523 CreateTestSharedQuadState(trans, viewport_rect_, render_pass_.get()); | |
| 524 back_quad_state_->sorting_context_id = 1; | |
| 525 back_quad_state_->clip_rect = quad_rect_; | |
| 526 } | |
| 527 template <typename T> | |
| 528 void AppendBackgroundAndRunTest() { | |
| 529 SharedQuadState* background_quad_state = CreateTestSharedQuadState( | |
| 530 gfx::Transform(), viewport_rect_, render_pass_.get()); | |
| 531 SolidColorDrawQuad* background_quad = | |
| 532 render_pass_->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); | |
| 533 background_quad->SetNew(background_quad_state, viewport_rect_, | |
| 534 viewport_rect_, SK_ColorWHITE, false); | |
| 535 pass_list_.push_back(render_pass_.Pass()); | |
| 536 const char* fileName = TypeStruct<TypeParam, T>::IntersectingQuadImage(); | |
| 537 EXPECT_TRUE(this->RunPixelTest(&pass_list_, | |
| 538 base::FilePath(FILE_PATH_LITERAL(fileName)), | |
| 539 FuzzyPixelOffByOneComparator(true))); | |
| 540 } | |
| 541 template <typename T> | |
| 542 T* CreateAndAppendDrawQuad() { | |
| 543 return render_pass_->CreateAndAppendDrawQuad<T>(); | |
| 544 } | |
| 545 | |
| 546 scoped_ptr<RenderPass> render_pass_; | |
| 547 gfx::Rect viewport_rect_; | |
| 548 SharedQuadState* front_quad_state_; | |
| 549 SharedQuadState* back_quad_state_; | |
| 550 gfx::Rect quad_rect_; | |
| 551 RenderPassList pass_list_; | |
| 552 }; | |
| 553 | |
| 554 TYPED_TEST_CASE(IntersectingQuadPixelTest, RendererTypes); | |
| 555 | |
| 556 TYPED_TEST(IntersectingQuadPixelTest, SolidColorQuads) { | |
| 557 this->SetupQuadStateAndRenderPass(); | |
| 558 | |
| 559 SolidColorDrawQuad* quad = | |
| 560 this->template CreateAndAppendDrawQuad<SolidColorDrawQuad>(); | |
| 561 SolidColorDrawQuad* quad2 = | |
| 562 this->template CreateAndAppendDrawQuad<SolidColorDrawQuad>(); | |
| 563 | |
| 564 quad->SetNew(this->front_quad_state_, this->quad_rect_, this->quad_rect_, | |
| 565 SK_ColorBLUE, false); | |
| 566 quad2->SetNew(this->back_quad_state_, this->quad_rect_, this->quad_rect_, | |
| 567 SK_ColorGREEN, false); | |
| 568 SCOPED_TRACE("IntersectingSolidColorQuads"); | |
| 569 this->template AppendBackgroundAndRunTest<SolidColorDrawQuad>(); | |
| 570 } | |
| 571 | |
| 572 template <typename TypeParam> | |
| 573 SkColor GetColor(const SkColor& color) { | |
| 574 return color; | |
| 575 } | |
| 576 | |
| 577 template <> | |
| 578 SkColor GetColor<GLRenderer>(const SkColor& color) { | |
| 579 return SkColorSetARGB(SkColorGetA(color), SkColorGetB(color), | |
| 580 SkColorGetG(color), SkColorGetR(color)); | |
| 581 } | |
| 582 template <> | |
| 583 SkColor GetColor<GLRendererWithExpandedViewport>(const SkColor& color) { | |
| 584 return GetColor<GLRenderer>(color); | |
| 585 } | |
| 586 | |
| 587 TYPED_TEST(IntersectingQuadPixelTest, TexturedQuads) { | |
| 588 this->SetupQuadStateAndRenderPass(); | |
| 589 CreateTestTextureDrawQuad( | |
| 590 this->quad_rect_, GetColor<TypeParam>(SkColorSetARGB(255, 0, 0, 255)), | |
|
enne (OOO)
2015/02/04 21:24:00
Do you think the texture/video/picture/content qua
awoloszyn
2015/02/12 16:48:51
Fixed, now have a small square inside a large squa
| |
| 591 SK_ColorTRANSPARENT, true, this->front_quad_state_, | |
| 592 this->resource_provider_.get(), this->render_pass_.get()); | |
| 593 CreateTestTextureDrawQuad( | |
| 594 this->quad_rect_, GetColor<TypeParam>(SkColorSetARGB(255, 0, 255, 0)), | |
| 595 SK_ColorTRANSPARENT, true, this->back_quad_state_, | |
| 596 this->resource_provider_.get(), this->render_pass_.get()); | |
| 597 | |
| 598 SCOPED_TRACE("IntersectingTexturedQuads"); | |
| 599 this->template AppendBackgroundAndRunTest<TextureDrawQuad>(); | |
| 600 } | |
| 601 | |
| 602 TYPED_TEST(IntersectingQuadPixelTest, PictureQuads) { | |
| 603 this->SetupQuadStateAndRenderPass(); | |
| 604 | |
| 605 scoped_refptr<FakePicturePileImpl> blue_pile = | |
| 606 FakePicturePileImpl::CreateFilledPile(gfx::Size(1000, 1000), | |
| 607 this->quad_rect_.size()); | |
| 608 SkPaint blue_paint; | |
| 609 blue_paint.setColor(SK_ColorBLUE); | |
| 610 blue_pile->add_draw_rect_with_paint(this->quad_rect_, blue_paint); | |
| 611 blue_pile->RerecordPile(); | |
| 612 | |
| 613 PictureDrawQuad* blue_quad = | |
| 614 this->render_pass_->template CreateAndAppendDrawQuad<PictureDrawQuad>(); | |
| 615 blue_quad->SetNew(this->front_quad_state_, this->quad_rect_, gfx::Rect(), | |
| 616 this->quad_rect_, this->quad_rect_, this->quad_rect_.size(), | |
| 617 false, RGBA_8888, this->quad_rect_, 1.f, blue_pile); | |
| 618 | |
| 619 scoped_refptr<FakePicturePileImpl> green_pile = | |
| 620 FakePicturePileImpl::CreateFilledPile(this->quad_rect_.size(), | |
| 621 this->quad_rect_.size()); | |
| 622 SkPaint green_paint; | |
| 623 green_paint.setColor(SK_ColorGREEN); | |
| 624 green_pile->add_draw_rect_with_paint(this->quad_rect_, green_paint); | |
| 625 green_pile->RerecordPile(); | |
| 626 | |
| 627 PictureDrawQuad* green_quad = | |
| 628 this->render_pass_->template CreateAndAppendDrawQuad<PictureDrawQuad>(); | |
| 629 green_quad->SetNew(this->back_quad_state_, this->quad_rect_, gfx::Rect(), | |
| 630 this->quad_rect_, this->quad_rect_, | |
| 631 this->quad_rect_.size(), false, RGBA_8888, | |
| 632 this->quad_rect_, 1.f, green_pile); | |
| 633 SCOPED_TRACE("IntersectingPictureQuadsPass"); | |
| 634 this->template AppendBackgroundAndRunTest<PictureDrawQuad>(); | |
| 635 } | |
| 636 | |
| 637 TYPED_TEST(IntersectingQuadPixelTest, RenderPassQuads) { | |
| 638 this->SetupQuadStateAndRenderPass(); | |
| 639 RenderPassId child_pass_id1(2, 2); | |
| 640 RenderPassId child_pass_id2(2, 3); | |
| 641 scoped_ptr<RenderPass> child_pass1 = | |
| 642 CreateTestRenderPass(child_pass_id1, this->quad_rect_, gfx::Transform()); | |
| 643 SharedQuadState* child1_quad_state = CreateTestSharedQuadState( | |
| 644 gfx::Transform(), this->quad_rect_, child_pass1.get()); | |
| 645 scoped_ptr<RenderPass> child_pass2 = | |
| 646 CreateTestRenderPass(child_pass_id2, this->quad_rect_, gfx::Transform()); | |
| 647 SharedQuadState* child2_quad_state = CreateTestSharedQuadState( | |
| 648 gfx::Transform(), this->quad_rect_, child_pass2.get()); | |
| 649 SolidColorDrawQuad* quad = | |
| 650 child_pass1->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); | |
| 651 SolidColorDrawQuad* quad2 = | |
| 652 child_pass2->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); | |
| 653 quad->SetNew(child1_quad_state, this->quad_rect_, this->quad_rect_, | |
| 654 SK_ColorBLUE, false); | |
| 655 quad2->SetNew(child2_quad_state, this->quad_rect_, this->quad_rect_, | |
| 656 SK_ColorGREEN, false); | |
| 657 CreateTestRenderPassDrawQuad(this->front_quad_state_, this->quad_rect_, | |
| 658 child_pass_id1, this->render_pass_.get()); | |
| 659 CreateTestRenderPassDrawQuad(this->back_quad_state_, this->quad_rect_, | |
| 660 child_pass_id2, this->render_pass_.get()); | |
| 661 | |
| 662 this->pass_list_.push_back(child_pass1.Pass()); | |
| 663 this->pass_list_.push_back(child_pass2.Pass()); | |
| 664 SCOPED_TRACE("IntersectingRenderQuadsPass"); | |
| 665 this->template AppendBackgroundAndRunTest<RenderPassDrawQuad>(); | |
| 666 } | |
| 667 template <typename TypeParam> | |
| 668 class IntersectingQuadGLPixelTest | |
| 669 : public IntersectingQuadPixelTest<TypeParam> { | |
| 670 public: | |
| 671 void SetUp() override { | |
| 672 IntersectingQuadPixelTest<TypeParam>::SetUp(); | |
| 673 video_resource_updater_.reset( | |
| 674 new VideoResourceUpdater(this->output_surface_->context_provider(), | |
| 675 this->resource_provider_.get())); | |
| 676 video_resource_updater2_.reset( | |
| 677 new VideoResourceUpdater(this->output_surface_->context_provider(), | |
| 678 this->resource_provider_.get())); | |
| 679 } | |
| 680 | |
| 681 protected: | |
| 682 scoped_ptr<VideoResourceUpdater> video_resource_updater_; | |
| 683 scoped_ptr<VideoResourceUpdater> video_resource_updater2_; | |
| 684 }; | |
| 685 | |
| 686 typedef ::testing::Types<GLRenderer, GLRendererWithExpandedViewport> | |
| 687 GLRendererTypes; | |
| 688 | |
| 689 TYPED_TEST_CASE(IntersectingQuadGLPixelTest, GLRendererTypes); | |
| 690 | |
| 691 TYPED_TEST(IntersectingQuadGLPixelTest, YUVVideoQuads) { | |
| 692 this->SetupQuadStateAndRenderPass(); | |
| 693 | |
| 694 CreateTestYUVVideoDrawQuad_Solid( | |
| 695 this->front_quad_state_, media::VideoFrame::YV12, false, | |
| 696 gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f), 29, 255, 107, | |
| 697 this->render_pass_.get(), this->video_resource_updater_.get(), | |
| 698 this->quad_rect_, this->resource_provider_.get()); | |
| 699 | |
| 700 CreateTestYUVVideoDrawQuad_Solid( | |
| 701 this->back_quad_state_, media::VideoFrame::YV12, false, | |
| 702 gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f), 149, 43, 21, this->render_pass_.get(), | |
| 703 this->video_resource_updater2_.get(), this->quad_rect_, | |
| 704 this->resource_provider_.get()); | |
| 705 | |
| 706 SCOPED_TRACE("IntersectingVideoQuads"); | |
| 707 this->template AppendBackgroundAndRunTest<YUVVideoDrawQuad>(); | |
| 708 } | |
| 709 | |
| 324 // TODO(skaslev): The software renderer does not support non-premultplied alpha. | 710 // TODO(skaslev): The software renderer does not support non-premultplied alpha. |
| 325 TEST_F(GLRendererPixelTest, NonPremultipliedTextureWithoutBackground) { | 711 TEST_F(GLRendererPixelTest, NonPremultipliedTextureWithoutBackground) { |
| 326 gfx::Rect rect(this->device_viewport_size_); | 712 gfx::Rect rect(this->device_viewport_size_); |
| 327 | 713 |
| 328 RenderPassId id(1, 1); | 714 RenderPassId id(1, 1); |
| 329 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect); | 715 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect); |
| 330 | 716 |
| 331 SharedQuadState* shared_state = | 717 SharedQuadState* shared_state = |
| 332 CreateTestSharedQuadState(gfx::Transform(), rect, pass.get()); | 718 CreateTestSharedQuadState(gfx::Transform(), rect, pass.get()); |
| 333 | 719 |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 381 pass_list.push_back(pass.Pass()); | 767 pass_list.push_back(pass.Pass()); |
| 382 | 768 |
| 383 EXPECT_TRUE(this->RunPixelTest( | 769 EXPECT_TRUE(this->RunPixelTest( |
| 384 &pass_list, | 770 &pass_list, |
| 385 base::FilePath(FILE_PATH_LITERAL("green_alpha.png")), | 771 base::FilePath(FILE_PATH_LITERAL("green_alpha.png")), |
| 386 FuzzyPixelOffByOneComparator(true))); | 772 FuzzyPixelOffByOneComparator(true))); |
| 387 } | 773 } |
| 388 | 774 |
| 389 class VideoGLRendererPixelTest : public GLRendererPixelTest { | 775 class VideoGLRendererPixelTest : public GLRendererPixelTest { |
| 390 protected: | 776 protected: |
| 391 void CreateTestYUVVideoDrawQuad_Striped(const SharedQuadState* shared_state, | |
| 392 media::VideoFrame::Format format, | |
| 393 bool is_transparent, | |
| 394 const gfx::RectF& tex_coord_rect, | |
| 395 RenderPass* render_pass) { | |
| 396 const gfx::Rect rect(this->device_viewport_size_); | |
| 397 | |
| 398 scoped_refptr<media::VideoFrame> video_frame = | |
| 399 media::VideoFrame::CreateFrame( | |
| 400 format, rect.size(), rect, rect.size(), base::TimeDelta()); | |
| 401 | |
| 402 // YUV values representing a striped pattern, for validating texture | |
| 403 // coordinates for sampling. | |
| 404 uint8_t y_value = 0; | |
| 405 uint8_t u_value = 0; | |
| 406 uint8_t v_value = 0; | |
| 407 for (int i = 0; i < video_frame->rows(media::VideoFrame::kYPlane); ++i) { | |
| 408 uint8_t* y_row = video_frame->data(media::VideoFrame::kYPlane) + | |
| 409 video_frame->stride(media::VideoFrame::kYPlane) * i; | |
| 410 for (int j = 0; j < video_frame->row_bytes(media::VideoFrame::kYPlane); | |
| 411 ++j) { | |
| 412 y_row[j] = (y_value += 1); | |
| 413 } | |
| 414 } | |
| 415 for (int i = 0; i < video_frame->rows(media::VideoFrame::kUPlane); ++i) { | |
| 416 uint8_t* u_row = video_frame->data(media::VideoFrame::kUPlane) + | |
| 417 video_frame->stride(media::VideoFrame::kUPlane) * i; | |
| 418 uint8_t* v_row = video_frame->data(media::VideoFrame::kVPlane) + | |
| 419 video_frame->stride(media::VideoFrame::kVPlane) * i; | |
| 420 for (int j = 0; j < video_frame->row_bytes(media::VideoFrame::kUPlane); | |
| 421 ++j) { | |
| 422 u_row[j] = (u_value += 3); | |
| 423 v_row[j] = (v_value += 5); | |
| 424 } | |
| 425 } | |
| 426 CreateTestYUVVideoDrawQuad_FromVideoFrame( | |
| 427 shared_state, video_frame, is_transparent, tex_coord_rect, render_pass); | |
| 428 } | |
| 429 | |
| 430 void CreateTestYUVVideoDrawQuad_Solid(const SharedQuadState* shared_state, | |
| 431 media::VideoFrame::Format format, | |
| 432 bool is_transparent, | |
| 433 const gfx::RectF& tex_coord_rect, | |
| 434 uint8 y, | |
| 435 uint8 u, | |
| 436 uint8 v, | |
| 437 RenderPass* render_pass) { | |
| 438 const gfx::Rect rect(this->device_viewport_size_); | |
| 439 | |
| 440 scoped_refptr<media::VideoFrame> video_frame = | |
| 441 media::VideoFrame::CreateFrame( | |
| 442 format, rect.size(), rect, rect.size(), base::TimeDelta()); | |
| 443 | |
| 444 // YUV values of a solid, constant, color. Useful for testing that color | |
| 445 // space/color range are being handled properly. | |
| 446 memset(video_frame->data(media::VideoFrame::kYPlane), | |
| 447 y, | |
| 448 video_frame->stride(media::VideoFrame::kYPlane) * | |
| 449 video_frame->rows(media::VideoFrame::kYPlane)); | |
| 450 memset(video_frame->data(media::VideoFrame::kUPlane), | |
| 451 u, | |
| 452 video_frame->stride(media::VideoFrame::kUPlane) * | |
| 453 video_frame->rows(media::VideoFrame::kUPlane)); | |
| 454 memset(video_frame->data(media::VideoFrame::kVPlane), | |
| 455 v, | |
| 456 video_frame->stride(media::VideoFrame::kVPlane) * | |
| 457 video_frame->rows(media::VideoFrame::kVPlane)); | |
| 458 | |
| 459 CreateTestYUVVideoDrawQuad_FromVideoFrame( | |
| 460 shared_state, video_frame, is_transparent, tex_coord_rect, render_pass); | |
| 461 } | |
| 462 | |
| 463 void CreateTestYUVVideoDrawQuad_FromVideoFrame( | |
| 464 const SharedQuadState* shared_state, | |
| 465 scoped_refptr<media::VideoFrame> video_frame, | |
| 466 bool is_transparent, | |
| 467 const gfx::RectF& tex_coord_rect, | |
| 468 RenderPass* render_pass) { | |
| 469 const bool with_alpha = (video_frame->format() == media::VideoFrame::YV12A); | |
| 470 const YUVVideoDrawQuad::ColorSpace color_space = | |
| 471 (video_frame->format() == media::VideoFrame::YV12J | |
| 472 ? YUVVideoDrawQuad::REC_601_JPEG | |
| 473 : YUVVideoDrawQuad::REC_601); | |
| 474 const gfx::Rect rect(this->device_viewport_size_); | |
| 475 const gfx::Rect opaque_rect(0, 0, 0, 0); | |
| 476 | |
| 477 if (with_alpha) | |
| 478 memset(video_frame->data(media::VideoFrame::kAPlane), | |
| 479 is_transparent ? 0 : 128, | |
| 480 video_frame->stride(media::VideoFrame::kAPlane) * | |
| 481 video_frame->rows(media::VideoFrame::kAPlane)); | |
| 482 | |
| 483 VideoFrameExternalResources resources = | |
| 484 video_resource_updater_->CreateExternalResourcesFromVideoFrame( | |
| 485 video_frame); | |
| 486 | |
| 487 EXPECT_EQ(VideoFrameExternalResources::YUV_RESOURCE, resources.type); | |
| 488 EXPECT_EQ(media::VideoFrame::NumPlanes(video_frame->format()), | |
| 489 resources.mailboxes.size()); | |
| 490 EXPECT_EQ(media::VideoFrame::NumPlanes(video_frame->format()), | |
| 491 resources.release_callbacks.size()); | |
| 492 | |
| 493 ResourceProvider::ResourceId y_resource = | |
| 494 resource_provider_->CreateResourceFromTextureMailbox( | |
| 495 resources.mailboxes[media::VideoFrame::kYPlane], | |
| 496 SingleReleaseCallbackImpl::Create( | |
| 497 resources.release_callbacks[media::VideoFrame::kYPlane])); | |
| 498 ResourceProvider::ResourceId u_resource = | |
| 499 resource_provider_->CreateResourceFromTextureMailbox( | |
| 500 resources.mailboxes[media::VideoFrame::kUPlane], | |
| 501 SingleReleaseCallbackImpl::Create( | |
| 502 resources.release_callbacks[media::VideoFrame::kUPlane])); | |
| 503 ResourceProvider::ResourceId v_resource = | |
| 504 resource_provider_->CreateResourceFromTextureMailbox( | |
| 505 resources.mailboxes[media::VideoFrame::kVPlane], | |
| 506 SingleReleaseCallbackImpl::Create( | |
| 507 resources.release_callbacks[media::VideoFrame::kVPlane])); | |
| 508 ResourceProvider::ResourceId a_resource = 0; | |
| 509 if (with_alpha) { | |
| 510 a_resource = resource_provider_->CreateResourceFromTextureMailbox( | |
| 511 resources.mailboxes[media::VideoFrame::kAPlane], | |
| 512 SingleReleaseCallbackImpl::Create( | |
| 513 resources.release_callbacks[media::VideoFrame::kAPlane])); | |
| 514 } | |
| 515 | |
| 516 YUVVideoDrawQuad* yuv_quad = | |
| 517 render_pass->CreateAndAppendDrawQuad<YUVVideoDrawQuad>(); | |
| 518 yuv_quad->SetNew(shared_state, | |
| 519 rect, | |
| 520 opaque_rect, | |
| 521 rect, | |
| 522 tex_coord_rect, | |
| 523 y_resource, | |
| 524 u_resource, | |
| 525 v_resource, | |
| 526 a_resource, | |
| 527 color_space); | |
| 528 } | |
| 529 | |
| 530 void SetUp() override { | 777 void SetUp() override { |
| 531 GLRendererPixelTest::SetUp(); | 778 GLRendererPixelTest::SetUp(); |
| 532 video_resource_updater_.reset(new VideoResourceUpdater( | 779 video_resource_updater_.reset(new VideoResourceUpdater( |
| 533 output_surface_->context_provider(), resource_provider_.get())); | 780 output_surface_->context_provider(), resource_provider_.get())); |
| 534 } | 781 } |
| 535 | 782 |
| 536 private: | |
| 537 scoped_ptr<VideoResourceUpdater> video_resource_updater_; | 783 scoped_ptr<VideoResourceUpdater> video_resource_updater_; |
| 538 }; | 784 }; |
| 539 | 785 |
| 540 TEST_F(VideoGLRendererPixelTest, SimpleYUVRect) { | 786 TEST_F(VideoGLRendererPixelTest, SimpleYUVRect) { |
| 541 gfx::Rect rect(this->device_viewport_size_); | 787 gfx::Rect rect(this->device_viewport_size_); |
| 542 | 788 |
| 543 RenderPassId id(1, 1); | 789 RenderPassId id(1, 1); |
| 544 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect); | 790 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect); |
| 545 | 791 |
| 546 SharedQuadState* shared_state = | 792 SharedQuadState* shared_state = |
| 547 CreateTestSharedQuadState(gfx::Transform(), rect, pass.get()); | 793 CreateTestSharedQuadState(gfx::Transform(), rect, pass.get()); |
| 548 | 794 |
| 549 CreateTestYUVVideoDrawQuad_Striped(shared_state, | 795 CreateTestYUVVideoDrawQuad_Striped(shared_state, media::VideoFrame::YV12, |
| 550 media::VideoFrame::YV12, | 796 false, gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f), |
| 551 false, | 797 pass.get(), video_resource_updater_.get(), |
| 552 gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f), | 798 gfx::Rect(this->device_viewport_size_), |
| 553 pass.get()); | 799 this->resource_provider_.get()); |
| 554 | 800 |
| 555 RenderPassList pass_list; | 801 RenderPassList pass_list; |
| 556 pass_list.push_back(pass.Pass()); | 802 pass_list.push_back(pass.Pass()); |
| 557 | 803 |
| 558 EXPECT_TRUE( | 804 EXPECT_TRUE( |
| 559 this->RunPixelTest(&pass_list, | 805 this->RunPixelTest(&pass_list, |
| 560 base::FilePath(FILE_PATH_LITERAL("yuv_stripes.png")), | 806 base::FilePath(FILE_PATH_LITERAL("yuv_stripes.png")), |
| 561 FuzzyPixelOffByOneComparator(true))); | 807 FuzzyPixelOffByOneComparator(true))); |
| 562 } | 808 } |
| 563 | 809 |
| 564 TEST_F(VideoGLRendererPixelTest, OffsetYUVRect) { | 810 TEST_F(VideoGLRendererPixelTest, OffsetYUVRect) { |
| 565 gfx::Rect rect(this->device_viewport_size_); | 811 gfx::Rect rect(this->device_viewport_size_); |
| 566 | 812 |
| 567 RenderPassId id(1, 1); | 813 RenderPassId id(1, 1); |
| 568 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect); | 814 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect); |
| 569 | 815 |
| 570 SharedQuadState* shared_state = | 816 SharedQuadState* shared_state = |
| 571 CreateTestSharedQuadState(gfx::Transform(), rect, pass.get()); | 817 CreateTestSharedQuadState(gfx::Transform(), rect, pass.get()); |
| 572 | 818 |
| 573 // Intentionally sets frame format to I420 for testing coverage. | 819 // Intentionally sets frame format to I420 for testing coverage. |
| 574 CreateTestYUVVideoDrawQuad_Striped(shared_state, | 820 CreateTestYUVVideoDrawQuad_Striped( |
| 575 media::VideoFrame::I420, | 821 shared_state, media::VideoFrame::I420, false, |
| 576 false, | 822 gfx::RectF(0.125f, 0.25f, 0.75f, 0.5f), pass.get(), |
| 577 gfx::RectF(0.125f, 0.25f, 0.75f, 0.5f), | 823 video_resource_updater_.get(), gfx::Rect(this->device_viewport_size_), |
| 578 pass.get()); | 824 this->resource_provider_.get()); |
| 579 | 825 |
| 580 RenderPassList pass_list; | 826 RenderPassList pass_list; |
| 581 pass_list.push_back(pass.Pass()); | 827 pass_list.push_back(pass.Pass()); |
| 582 | 828 |
| 583 EXPECT_TRUE(this->RunPixelTest( | 829 EXPECT_TRUE(this->RunPixelTest( |
| 584 &pass_list, | 830 &pass_list, |
| 585 base::FilePath(FILE_PATH_LITERAL("yuv_stripes_offset.png")), | 831 base::FilePath(FILE_PATH_LITERAL("yuv_stripes_offset.png")), |
| 586 FuzzyPixelOffByOneComparator(true))); | 832 FuzzyPixelOffByOneComparator(true))); |
| 587 } | 833 } |
| 588 | 834 |
| 589 TEST_F(VideoGLRendererPixelTest, SimpleYUVRectBlack) { | 835 TEST_F(VideoGLRendererPixelTest, SimpleYUVRectBlack) { |
| 590 gfx::Rect rect(this->device_viewport_size_); | 836 gfx::Rect rect(this->device_viewport_size_); |
| 591 | 837 |
| 592 RenderPassId id(1, 1); | 838 RenderPassId id(1, 1); |
| 593 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect); | 839 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect); |
| 594 | 840 |
| 595 SharedQuadState* shared_state = | 841 SharedQuadState* shared_state = |
| 596 CreateTestSharedQuadState(gfx::Transform(), rect, pass.get()); | 842 CreateTestSharedQuadState(gfx::Transform(), rect, pass.get()); |
| 597 | 843 |
| 598 // In MPEG color range YUV values of (15,128,128) should produce black. | 844 // In MPEG color range YUV values of (15,128,128) should produce black. |
| 599 CreateTestYUVVideoDrawQuad_Solid(shared_state, | 845 CreateTestYUVVideoDrawQuad_Solid( |
| 600 media::VideoFrame::YV12, | 846 shared_state, media::VideoFrame::YV12, false, |
| 601 false, | 847 gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f), 15, 128, 128, pass.get(), |
| 602 gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f), | 848 video_resource_updater_.get(), gfx::Rect(this->device_viewport_size_), |
| 603 15, | 849 this->resource_provider_.get()); |
| 604 128, | |
| 605 128, | |
| 606 pass.get()); | |
| 607 | 850 |
| 608 RenderPassList pass_list; | 851 RenderPassList pass_list; |
| 609 pass_list.push_back(pass.Pass()); | 852 pass_list.push_back(pass.Pass()); |
| 610 | 853 |
| 611 // If we didn't get black out of the YUV values above, then we probably have a | 854 // If we didn't get black out of the YUV values above, then we probably have a |
| 612 // color range issue. | 855 // color range issue. |
| 613 EXPECT_TRUE(this->RunPixelTest(&pass_list, | 856 EXPECT_TRUE(this->RunPixelTest(&pass_list, |
| 614 base::FilePath(FILE_PATH_LITERAL("black.png")), | 857 base::FilePath(FILE_PATH_LITERAL("black.png")), |
| 615 FuzzyPixelOffByOneComparator(true))); | 858 FuzzyPixelOffByOneComparator(true))); |
| 616 } | 859 } |
| 617 | 860 |
| 618 TEST_F(VideoGLRendererPixelTest, SimpleYUVJRect) { | 861 TEST_F(VideoGLRendererPixelTest, SimpleYUVJRect) { |
| 619 gfx::Rect rect(this->device_viewport_size_); | 862 gfx::Rect rect(this->device_viewport_size_); |
| 620 | 863 |
| 621 RenderPassId id(1, 1); | 864 RenderPassId id(1, 1); |
| 622 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect); | 865 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect); |
| 623 | 866 |
| 624 SharedQuadState* shared_state = | 867 SharedQuadState* shared_state = |
| 625 CreateTestSharedQuadState(gfx::Transform(), rect, pass.get()); | 868 CreateTestSharedQuadState(gfx::Transform(), rect, pass.get()); |
| 626 | 869 |
| 627 // YUV of (149,43,21) should be green (0,255,0) in RGB. | 870 // YUV of (149,43,21) should be green (0,255,0) in RGB. |
| 628 CreateTestYUVVideoDrawQuad_Solid(shared_state, | 871 CreateTestYUVVideoDrawQuad_Solid( |
| 629 media::VideoFrame::YV12J, | 872 shared_state, media::VideoFrame::YV12J, false, |
| 630 false, | 873 gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f), 149, 43, 21, pass.get(), |
| 631 gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f), | 874 video_resource_updater_.get(), gfx::Rect(this->device_viewport_size_), |
| 632 149, | 875 this->resource_provider_.get()); |
| 633 43, | |
| 634 21, | |
| 635 pass.get()); | |
| 636 | 876 |
| 637 RenderPassList pass_list; | 877 RenderPassList pass_list; |
| 638 pass_list.push_back(pass.Pass()); | 878 pass_list.push_back(pass.Pass()); |
| 639 | 879 |
| 640 EXPECT_TRUE(this->RunPixelTest(&pass_list, | 880 EXPECT_TRUE(this->RunPixelTest(&pass_list, |
| 641 base::FilePath(FILE_PATH_LITERAL("green.png")), | 881 base::FilePath(FILE_PATH_LITERAL("green.png")), |
| 642 FuzzyPixelOffByOneComparator(true))); | 882 FuzzyPixelOffByOneComparator(true))); |
| 643 } | 883 } |
| 644 | 884 |
| 645 TEST_F(VideoGLRendererPixelTest, SimpleYUVJRectGrey) { | 885 TEST_F(VideoGLRendererPixelTest, SimpleYUVJRectGrey) { |
| 646 gfx::Rect rect(this->device_viewport_size_); | 886 gfx::Rect rect(this->device_viewport_size_); |
| 647 | 887 |
| 648 RenderPassId id(1, 1); | 888 RenderPassId id(1, 1); |
| 649 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect); | 889 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect); |
| 650 | 890 |
| 651 SharedQuadState* shared_state = | 891 SharedQuadState* shared_state = |
| 652 CreateTestSharedQuadState(gfx::Transform(), rect, pass.get()); | 892 CreateTestSharedQuadState(gfx::Transform(), rect, pass.get()); |
| 653 | 893 |
| 654 // Dark grey in JPEG color range (in MPEG, this is black). | 894 // Dark grey in JPEG color range (in MPEG, this is black). |
| 655 CreateTestYUVVideoDrawQuad_Solid(shared_state, | 895 CreateTestYUVVideoDrawQuad_Solid( |
| 656 media::VideoFrame::YV12J, | 896 shared_state, media::VideoFrame::YV12J, false, |
| 657 false, | 897 gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f), 15, 128, 128, pass.get(), |
| 658 gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f), | 898 video_resource_updater_.get(), gfx::Rect(this->device_viewport_size_), |
| 659 15, | 899 this->resource_provider_.get()); |
| 660 128, | |
| 661 128, | |
| 662 pass.get()); | |
| 663 | 900 |
| 664 RenderPassList pass_list; | 901 RenderPassList pass_list; |
| 665 pass_list.push_back(pass.Pass()); | 902 pass_list.push_back(pass.Pass()); |
| 666 | 903 |
| 667 EXPECT_TRUE( | 904 EXPECT_TRUE( |
| 668 this->RunPixelTest(&pass_list, | 905 this->RunPixelTest(&pass_list, |
| 669 base::FilePath(FILE_PATH_LITERAL("dark_grey.png")), | 906 base::FilePath(FILE_PATH_LITERAL("dark_grey.png")), |
| 670 FuzzyPixelOffByOneComparator(true))); | 907 FuzzyPixelOffByOneComparator(true))); |
| 671 } | 908 } |
| 672 | 909 |
| 673 TEST_F(VideoGLRendererPixelTest, SimpleYUVARect) { | 910 TEST_F(VideoGLRendererPixelTest, SimpleYUVARect) { |
| 674 gfx::Rect rect(this->device_viewport_size_); | 911 gfx::Rect rect(this->device_viewport_size_); |
| 675 | 912 |
| 676 RenderPassId id(1, 1); | 913 RenderPassId id(1, 1); |
| 677 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect); | 914 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect); |
| 678 | 915 |
| 679 SharedQuadState* shared_state = | 916 SharedQuadState* shared_state = |
| 680 CreateTestSharedQuadState(gfx::Transform(), rect, pass.get()); | 917 CreateTestSharedQuadState(gfx::Transform(), rect, pass.get()); |
| 681 | 918 |
| 682 CreateTestYUVVideoDrawQuad_Striped(shared_state, | 919 CreateTestYUVVideoDrawQuad_Striped(shared_state, media::VideoFrame::YV12A, |
| 683 media::VideoFrame::YV12A, | 920 false, gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f), |
| 684 false, | 921 pass.get(), video_resource_updater_.get(), |
| 685 gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f), | 922 gfx::Rect(this->device_viewport_size_), |
| 686 pass.get()); | 923 this->resource_provider_.get()); |
| 687 | 924 |
| 688 SolidColorDrawQuad* color_quad = | 925 SolidColorDrawQuad* color_quad = |
| 689 pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); | 926 pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); |
| 690 color_quad->SetNew(shared_state, rect, rect, SK_ColorWHITE, false); | 927 color_quad->SetNew(shared_state, rect, rect, SK_ColorWHITE, false); |
| 691 | 928 |
| 692 RenderPassList pass_list; | 929 RenderPassList pass_list; |
| 693 pass_list.push_back(pass.Pass()); | 930 pass_list.push_back(pass.Pass()); |
| 694 | 931 |
| 695 EXPECT_TRUE(this->RunPixelTest( | 932 EXPECT_TRUE(this->RunPixelTest( |
| 696 &pass_list, | 933 &pass_list, |
| 697 base::FilePath(FILE_PATH_LITERAL("yuv_stripes_alpha.png")), | 934 base::FilePath(FILE_PATH_LITERAL("yuv_stripes_alpha.png")), |
| 698 FuzzyPixelOffByOneComparator(true))); | 935 FuzzyPixelOffByOneComparator(true))); |
| 699 } | 936 } |
| 700 | 937 |
| 701 TEST_F(VideoGLRendererPixelTest, FullyTransparentYUVARect) { | 938 TEST_F(VideoGLRendererPixelTest, FullyTransparentYUVARect) { |
| 702 gfx::Rect rect(this->device_viewport_size_); | 939 gfx::Rect rect(this->device_viewport_size_); |
| 703 | 940 |
| 704 RenderPassId id(1, 1); | 941 RenderPassId id(1, 1); |
| 705 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect); | 942 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect); |
| 706 | 943 |
| 707 SharedQuadState* shared_state = | 944 SharedQuadState* shared_state = |
| 708 CreateTestSharedQuadState(gfx::Transform(), rect, pass.get()); | 945 CreateTestSharedQuadState(gfx::Transform(), rect, pass.get()); |
| 709 | 946 |
| 710 CreateTestYUVVideoDrawQuad_Striped(shared_state, | 947 CreateTestYUVVideoDrawQuad_Striped(shared_state, media::VideoFrame::YV12A, |
| 711 media::VideoFrame::YV12A, | 948 true, gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f), |
| 712 true, | 949 pass.get(), video_resource_updater_.get(), |
| 713 gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f), | 950 gfx::Rect(this->device_viewport_size_), |
| 714 pass.get()); | 951 this->resource_provider_.get()); |
| 715 | 952 |
| 716 SolidColorDrawQuad* color_quad = | 953 SolidColorDrawQuad* color_quad = |
| 717 pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); | 954 pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); |
| 718 color_quad->SetNew(shared_state, rect, rect, SK_ColorBLACK, false); | 955 color_quad->SetNew(shared_state, rect, rect, SK_ColorBLACK, false); |
| 719 | 956 |
| 720 RenderPassList pass_list; | 957 RenderPassList pass_list; |
| 721 pass_list.push_back(pass.Pass()); | 958 pass_list.push_back(pass.Pass()); |
| 722 | 959 |
| 723 EXPECT_TRUE(this->RunPixelTest( | 960 EXPECT_TRUE(this->RunPixelTest( |
| 724 &pass_list, | 961 &pass_list, |
| (...skipping 1694 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2419 EXPECT_TRUE(this->RunPixelTest( | 2656 EXPECT_TRUE(this->RunPixelTest( |
| 2420 &pass_list, | 2657 &pass_list, |
| 2421 base::FilePath(FILE_PATH_LITERAL("wrap_mode_repeat.png")), | 2658 base::FilePath(FILE_PATH_LITERAL("wrap_mode_repeat.png")), |
| 2422 FuzzyPixelOffByOneComparator(true))); | 2659 FuzzyPixelOffByOneComparator(true))); |
| 2423 } | 2660 } |
| 2424 | 2661 |
| 2425 #endif // !defined(OS_ANDROID) | 2662 #endif // !defined(OS_ANDROID) |
| 2426 | 2663 |
| 2427 } // namespace | 2664 } // namespace |
| 2428 } // namespace cc | 2665 } // namespace cc |
| OLD | NEW |