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 |