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

Side by Side Diff: cc/output/renderer_pixeltest.cc

Issue 92703003: Support videos with JPEG color range in GPU YUV convert path. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@yuv_v2
Patch Set: Whoops, forgot one. Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « cc/output/gl_renderer.cc ('k') | cc/quads/draw_quad_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 387 matching lines...) Expand 10 before | Expand all | Expand 10 after
398 EXPECT_TRUE(this->RunPixelTest( 398 EXPECT_TRUE(this->RunPixelTest(
399 &pass_list, 399 &pass_list,
400 PixelTest::NoOffscreenContext, 400 PixelTest::NoOffscreenContext,
401 base::FilePath(FILE_PATH_LITERAL("green_alpha.png")), 401 base::FilePath(FILE_PATH_LITERAL("green_alpha.png")),
402 FuzzyPixelOffByOneComparator(true))); 402 FuzzyPixelOffByOneComparator(true)));
403 } 403 }
404 404
405 class VideoGLRendererPixelTest : public GLRendererPixelTest { 405 class VideoGLRendererPixelTest : public GLRendererPixelTest {
406 protected: 406 protected:
407 scoped_ptr<YUVVideoDrawQuad> CreateTestYUVVideoDrawQuad( 407 scoped_ptr<YUVVideoDrawQuad> CreateTestYUVVideoDrawQuad(
408 SharedQuadState* shared_state, bool with_alpha, bool is_transparent) { 408 SharedQuadState* shared_state,
409 bool with_alpha,
410 bool is_transparent,
411 bool has_jpeg_color_range) {
409 gfx::Rect rect(this->device_viewport_size_); 412 gfx::Rect rect(this->device_viewport_size_);
410 gfx::Rect opaque_rect(0, 0, 0, 0); 413 gfx::Rect opaque_rect(0, 0, 0, 0);
411 414
412 ResourceProvider::ResourceId y_resource = 415 ResourceProvider::ResourceId y_resource =
413 resource_provider_->CreateResource( 416 resource_provider_->CreateResource(
414 this->device_viewport_size_, 417 this->device_viewport_size_,
415 GL_CLAMP_TO_EDGE, 418 GL_CLAMP_TO_EDGE,
416 ResourceProvider::TextureUsageAny, 419 ResourceProvider::TextureUsageAny,
417 LUMINANCE_8); 420 LUMINANCE_8);
418 ResourceProvider::ResourceId u_resource = 421 ResourceProvider::ResourceId u_resource =
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
459 resource_provider_->SetPixels(u_resource, u_plane.get(), uv_rect, uv_rect, 462 resource_provider_->SetPixels(u_resource, u_plane.get(), uv_rect, uv_rect,
460 gfx::Vector2d()); 463 gfx::Vector2d());
461 resource_provider_->SetPixels(v_resource, v_plane.get(), uv_rect, uv_rect, 464 resource_provider_->SetPixels(v_resource, v_plane.get(), uv_rect, uv_rect,
462 gfx::Vector2d()); 465 gfx::Vector2d());
463 if (with_alpha) { 466 if (with_alpha) {
464 resource_provider_->SetPixels(a_resource, a_plane.get(), rect, rect, 467 resource_provider_->SetPixels(a_resource, a_plane.get(), rect, rect,
465 gfx::Vector2d()); 468 gfx::Vector2d());
466 } 469 }
467 470
468 scoped_ptr<YUVVideoDrawQuad> yuv_quad = cc::YUVVideoDrawQuad::Create(); 471 scoped_ptr<YUVVideoDrawQuad> yuv_quad = cc::YUVVideoDrawQuad::Create();
469 yuv_quad->SetNew(shared_state, rect, opaque_rect, gfx::Size(), 472 yuv_quad->SetNew(shared_state,
470 y_resource, u_resource, v_resource, a_resource); 473 rect,
474 opaque_rect,
475 gfx::Size(),
476 y_resource,
477 u_resource,
478 v_resource,
479 a_resource,
480 has_jpeg_color_range);
471 return yuv_quad.Pass(); 481 return yuv_quad.Pass();
472 } 482 }
473 }; 483 };
474 484
475 TEST_F(VideoGLRendererPixelTest, SimpleYUVRect) { 485 TEST_F(VideoGLRendererPixelTest, SimpleYUVRect) {
476 gfx::Rect rect(this->device_viewport_size_); 486 gfx::Rect rect(this->device_viewport_size_);
477 487
478 RenderPass::Id id(1, 1); 488 RenderPass::Id id(1, 1);
479 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect); 489 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect);
480 490
481 scoped_ptr<SharedQuadState> shared_state = 491 scoped_ptr<SharedQuadState> shared_state =
482 CreateTestSharedQuadState(gfx::Transform(), rect); 492 CreateTestSharedQuadState(gfx::Transform(), rect);
483 493
484 scoped_ptr<YUVVideoDrawQuad> yuv_quad = 494 scoped_ptr<YUVVideoDrawQuad> yuv_quad =
485 CreateTestYUVVideoDrawQuad(shared_state.get(), false, false); 495 CreateTestYUVVideoDrawQuad(shared_state.get(), false, false, false);
486 496
487 pass->quad_list.push_back(yuv_quad.PassAs<DrawQuad>()); 497 pass->quad_list.push_back(yuv_quad.PassAs<DrawQuad>());
488 498
499 RenderPassList pass_list;
500 pass_list.push_back(pass.Pass());
501
502 EXPECT_TRUE(this->RunPixelTest(
503 &pass_list,
504 PixelTest::NoOffscreenContext,
505 base::FilePath(FILE_PATH_LITERAL("green.png")),
506 ExactPixelComparator(true)));
507 }
508
509 TEST_F(VideoGLRendererPixelTest, SimpleYUVJRect) {
510 gfx::Rect rect(this->device_viewport_size_);
511
512 RenderPass::Id id(1, 1);
513 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect);
514
515 scoped_ptr<SharedQuadState> shared_state =
516 CreateTestSharedQuadState(gfx::Transform(), rect);
517
518 scoped_ptr<YUVVideoDrawQuad> yuv_quad =
519 CreateTestYUVVideoDrawQuad(shared_state.get(), false, false, true);
520
521 pass->quad_list.push_back(yuv_quad.PassAs<DrawQuad>());
522
489 RenderPassList pass_list; 523 RenderPassList pass_list;
490 pass_list.push_back(pass.Pass()); 524 pass_list.push_back(pass.Pass());
491 525
492 EXPECT_TRUE(this->RunPixelTest( 526 EXPECT_TRUE(this->RunPixelTest(
493 &pass_list, 527 &pass_list,
494 PixelTest::NoOffscreenContext, 528 PixelTest::NoOffscreenContext,
495 base::FilePath(FILE_PATH_LITERAL("green.png")), 529 base::FilePath(FILE_PATH_LITERAL("green.png")),
rileya (GONE FROM CHROMIUM) 2013/12/03 23:33:41 Conveniently the test YUV values evaluate to the s
danakj 2013/12/03 23:39:04 Oh.. that's unfortunate as it means the test would
496 ExactPixelComparator(true))); 530 ExactPixelComparator(true)));
497 } 531 }
498 532
499 TEST_F(VideoGLRendererPixelTest, SimpleYUVARect) { 533 TEST_F(VideoGLRendererPixelTest, SimpleYUVARect) {
500 gfx::Rect rect(this->device_viewport_size_); 534 gfx::Rect rect(this->device_viewport_size_);
501 535
502 RenderPass::Id id(1, 1); 536 RenderPass::Id id(1, 1);
503 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect); 537 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect);
504 538
505 scoped_ptr<SharedQuadState> shared_state = 539 scoped_ptr<SharedQuadState> shared_state =
506 CreateTestSharedQuadState(gfx::Transform(), rect); 540 CreateTestSharedQuadState(gfx::Transform(), rect);
507 541
508 scoped_ptr<YUVVideoDrawQuad> yuv_quad = 542 scoped_ptr<YUVVideoDrawQuad> yuv_quad =
509 CreateTestYUVVideoDrawQuad(shared_state.get(), true, false); 543 CreateTestYUVVideoDrawQuad(shared_state.get(), true, false, false);
510 544
511 pass->quad_list.push_back(yuv_quad.PassAs<DrawQuad>()); 545 pass->quad_list.push_back(yuv_quad.PassAs<DrawQuad>());
512 546
513 scoped_ptr<SolidColorDrawQuad> color_quad = SolidColorDrawQuad::Create(); 547 scoped_ptr<SolidColorDrawQuad> color_quad = SolidColorDrawQuad::Create();
514 color_quad->SetNew(shared_state.get(), rect, SK_ColorWHITE, false); 548 color_quad->SetNew(shared_state.get(), rect, SK_ColorWHITE, false);
515 549
516 pass->quad_list.push_back(color_quad.PassAs<DrawQuad>()); 550 pass->quad_list.push_back(color_quad.PassAs<DrawQuad>());
517 551
518 RenderPassList pass_list; 552 RenderPassList pass_list;
519 pass_list.push_back(pass.Pass()); 553 pass_list.push_back(pass.Pass());
520 554
521 EXPECT_TRUE(this->RunPixelTest( 555 EXPECT_TRUE(this->RunPixelTest(
522 &pass_list, 556 &pass_list,
523 PixelTest::NoOffscreenContext, 557 PixelTest::NoOffscreenContext,
524 base::FilePath(FILE_PATH_LITERAL("green_alpha.png")), 558 base::FilePath(FILE_PATH_LITERAL("green_alpha.png")),
525 ExactPixelComparator(true))); 559 ExactPixelComparator(true)));
526 } 560 }
527 561
528 TEST_F(VideoGLRendererPixelTest, FullyTransparentYUVARect) { 562 TEST_F(VideoGLRendererPixelTest, FullyTransparentYUVARect) {
529 gfx::Rect rect(this->device_viewport_size_); 563 gfx::Rect rect(this->device_viewport_size_);
530 564
531 RenderPass::Id id(1, 1); 565 RenderPass::Id id(1, 1);
532 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect); 566 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect);
533 567
534 scoped_ptr<SharedQuadState> shared_state = 568 scoped_ptr<SharedQuadState> shared_state =
535 CreateTestSharedQuadState(gfx::Transform(), rect); 569 CreateTestSharedQuadState(gfx::Transform(), rect);
536 570
537 scoped_ptr<YUVVideoDrawQuad> yuv_quad = 571 scoped_ptr<YUVVideoDrawQuad> yuv_quad =
538 CreateTestYUVVideoDrawQuad(shared_state.get(), true, true); 572 CreateTestYUVVideoDrawQuad(shared_state.get(), true, true, false);
539 573
540 pass->quad_list.push_back(yuv_quad.PassAs<DrawQuad>()); 574 pass->quad_list.push_back(yuv_quad.PassAs<DrawQuad>());
541 575
542 scoped_ptr<SolidColorDrawQuad> color_quad = SolidColorDrawQuad::Create(); 576 scoped_ptr<SolidColorDrawQuad> color_quad = SolidColorDrawQuad::Create();
543 color_quad->SetNew(shared_state.get(), rect, SK_ColorBLACK, false); 577 color_quad->SetNew(shared_state.get(), rect, SK_ColorBLACK, false);
544 578
545 pass->quad_list.push_back(color_quad.PassAs<DrawQuad>()); 579 pass->quad_list.push_back(color_quad.PassAs<DrawQuad>());
546 580
547 RenderPassList pass_list; 581 RenderPassList pass_list;
548 pass_list.push_back(pass.Pass()); 582 pass_list.push_back(pass.Pass());
(...skipping 1526 matching lines...) Expand 10 before | Expand all | Expand 10 after
2075 &pass_list, 2109 &pass_list,
2076 PixelTest::NoOffscreenContext, 2110 PixelTest::NoOffscreenContext,
2077 base::FilePath(FILE_PATH_LITERAL("wrap_mode_repeat.png")), 2111 base::FilePath(FILE_PATH_LITERAL("wrap_mode_repeat.png")),
2078 FuzzyPixelOffByOneComparator(true))); 2112 FuzzyPixelOffByOneComparator(true)));
2079 } 2113 }
2080 2114
2081 #endif // !defined(OS_ANDROID) 2115 #endif // !defined(OS_ANDROID)
2082 2116
2083 } // namespace 2117 } // namespace
2084 } // namespace cc 2118 } // namespace cc
OLDNEW
« no previous file with comments | « cc/output/gl_renderer.cc ('k') | cc/quads/draw_quad_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698