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

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

Issue 1007383004: Fixed YUV Video quads when their visible_content_rect != their rect. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Added correct yuv_striped_clipped.png Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « cc/output/gl_renderer.cc ('k') | cc/test/data/yuv_stripes_clipped.png » ('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/output/gl_renderer.h" 6 #include "cc/output/gl_renderer.h"
7 #include "cc/quads/draw_quad.h" 7 #include "cc/quads/draw_quad.h"
8 #include "cc/quads/picture_draw_quad.h" 8 #include "cc/quads/picture_draw_quad.h"
9 #include "cc/quads/texture_draw_quad.h" 9 #include "cc/quads/texture_draw_quad.h"
10 #include "cc/resources/video_resource_updater.h" 10 #include "cc/resources/video_resource_updater.h"
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
192 } 192 }
193 193
194 void CreateTestYUVVideoDrawQuad_FromVideoFrame( 194 void CreateTestYUVVideoDrawQuad_FromVideoFrame(
195 const SharedQuadState* shared_state, 195 const SharedQuadState* shared_state,
196 scoped_refptr<media::VideoFrame> video_frame, 196 scoped_refptr<media::VideoFrame> video_frame,
197 uint8 alpha_value, 197 uint8 alpha_value,
198 const gfx::RectF& tex_coord_rect, 198 const gfx::RectF& tex_coord_rect,
199 RenderPass* render_pass, 199 RenderPass* render_pass,
200 VideoResourceUpdater* video_resource_updater, 200 VideoResourceUpdater* video_resource_updater,
201 const gfx::Rect& rect, 201 const gfx::Rect& rect,
202 const gfx::Rect& visible_rect,
202 ResourceProvider* resource_provider) { 203 ResourceProvider* resource_provider) {
203 const bool with_alpha = (video_frame->format() == media::VideoFrame::YV12A); 204 const bool with_alpha = (video_frame->format() == media::VideoFrame::YV12A);
204 const YUVVideoDrawQuad::ColorSpace color_space = 205 const YUVVideoDrawQuad::ColorSpace color_space =
205 (video_frame->format() == media::VideoFrame::YV12J 206 (video_frame->format() == media::VideoFrame::YV12J
206 ? YUVVideoDrawQuad::JPEG 207 ? YUVVideoDrawQuad::JPEG
207 : YUVVideoDrawQuad::REC_601); 208 : YUVVideoDrawQuad::REC_601);
208 const gfx::Rect opaque_rect(0, 0, 0, 0); 209 const gfx::Rect opaque_rect(0, 0, 0, 0);
209 210
210 if (with_alpha) { 211 if (with_alpha) {
211 memset(video_frame->data(media::VideoFrame::kAPlane), alpha_value, 212 memset(video_frame->data(media::VideoFrame::kAPlane), alpha_value,
(...skipping 29 matching lines...) Expand all
241 ResourceProvider::ResourceId a_resource = 0; 242 ResourceProvider::ResourceId a_resource = 0;
242 if (with_alpha) { 243 if (with_alpha) {
243 a_resource = resource_provider->CreateResourceFromTextureMailbox( 244 a_resource = resource_provider->CreateResourceFromTextureMailbox(
244 resources.mailboxes[media::VideoFrame::kAPlane], 245 resources.mailboxes[media::VideoFrame::kAPlane],
245 SingleReleaseCallbackImpl::Create( 246 SingleReleaseCallbackImpl::Create(
246 resources.release_callbacks[media::VideoFrame::kAPlane])); 247 resources.release_callbacks[media::VideoFrame::kAPlane]));
247 } 248 }
248 249
249 YUVVideoDrawQuad* yuv_quad = 250 YUVVideoDrawQuad* yuv_quad =
250 render_pass->CreateAndAppendDrawQuad<YUVVideoDrawQuad>(); 251 render_pass->CreateAndAppendDrawQuad<YUVVideoDrawQuad>();
251 yuv_quad->SetNew(shared_state, rect, opaque_rect, rect, tex_coord_rect, 252 yuv_quad->SetNew(shared_state, rect, opaque_rect, visible_rect,
252 video_frame->coded_size(), y_resource, u_resource, 253 tex_coord_rect, video_frame->coded_size(), y_resource,
253 v_resource, a_resource, color_space); 254 u_resource, v_resource, a_resource, color_space);
254 } 255 }
255 256
256 void CreateTestYUVVideoDrawQuad_Striped( 257 void CreateTestYUVVideoDrawQuad_Striped(
257 const SharedQuadState* shared_state, 258 const SharedQuadState* shared_state,
258 media::VideoFrame::Format format, 259 media::VideoFrame::Format format,
259 bool is_transparent, 260 bool is_transparent,
260 const gfx::RectF& tex_coord_rect, 261 const gfx::RectF& tex_coord_rect,
261 RenderPass* render_pass, 262 RenderPass* render_pass,
262 VideoResourceUpdater* video_resource_updater, 263 VideoResourceUpdater* video_resource_updater,
263 const gfx::Rect& rect, 264 const gfx::Rect& rect,
265 const gfx::Rect& visible_rect,
264 ResourceProvider* resource_provider) { 266 ResourceProvider* resource_provider) {
265 scoped_refptr<media::VideoFrame> video_frame = media::VideoFrame::CreateFrame( 267 scoped_refptr<media::VideoFrame> video_frame = media::VideoFrame::CreateFrame(
266 format, rect.size(), rect, rect.size(), base::TimeDelta()); 268 format, rect.size(), rect, rect.size(), base::TimeDelta());
267 269
268 // YUV values representing a striped pattern, for validating texture 270 // YUV values representing a striped pattern, for validating texture
269 // coordinates for sampling. 271 // coordinates for sampling.
270 uint8_t y_value = 0; 272 uint8_t y_value = 0;
271 uint8_t u_value = 0; 273 uint8_t u_value = 0;
272 uint8_t v_value = 0; 274 uint8_t v_value = 0;
273 for (int i = 0; i < video_frame->rows(media::VideoFrame::kYPlane); ++i) { 275 for (int i = 0; i < video_frame->rows(media::VideoFrame::kYPlane); ++i) {
(...skipping 11 matching lines...) Expand all
285 video_frame->stride(media::VideoFrame::kVPlane) * i; 287 video_frame->stride(media::VideoFrame::kVPlane) * i;
286 for (int j = 0; j < video_frame->row_bytes(media::VideoFrame::kUPlane); 288 for (int j = 0; j < video_frame->row_bytes(media::VideoFrame::kUPlane);
287 ++j) { 289 ++j) {
288 u_row[j] = (u_value += 3); 290 u_row[j] = (u_value += 3);
289 v_row[j] = (v_value += 5); 291 v_row[j] = (v_value += 5);
290 } 292 }
291 } 293 }
292 uint8 alpha_value = is_transparent ? 0 : 128; 294 uint8 alpha_value = is_transparent ? 0 : 128;
293 CreateTestYUVVideoDrawQuad_FromVideoFrame( 295 CreateTestYUVVideoDrawQuad_FromVideoFrame(
294 shared_state, video_frame, alpha_value, tex_coord_rect, render_pass, 296 shared_state, video_frame, alpha_value, tex_coord_rect, render_pass,
295 video_resource_updater, rect, resource_provider); 297 video_resource_updater, rect, visible_rect, resource_provider);
296 } 298 }
297 299
298 // Creates a video frame of size background_size filled with yuv_background, 300 // Creates a video frame of size background_size filled with yuv_background,
299 // and then draws a foreground rectangle in a different color on top of 301 // and then draws a foreground rectangle in a different color on top of
300 // that. The foreground rectangle must have coordinates that are divisible 302 // that. The foreground rectangle must have coordinates that are divisible
301 // by 2 because YUV is a block format. 303 // by 2 because YUV is a block format.
302 void CreateTestYUVVideoDrawQuad_TwoColor( 304 void CreateTestYUVVideoDrawQuad_TwoColor(
303 const SharedQuadState* shared_state, 305 const SharedQuadState* shared_state,
304 media::VideoFrame::Format format, 306 media::VideoFrame::Format format,
305 bool is_transparent, 307 bool is_transparent,
306 const gfx::RectF& tex_coord_rect, 308 const gfx::RectF& tex_coord_rect,
307 const gfx::Size& background_size, 309 const gfx::Size& background_size,
310 const gfx::Rect& visible_rect,
308 uint8 y_background, 311 uint8 y_background,
309 uint8 u_background, 312 uint8 u_background,
310 uint8 v_background, 313 uint8 v_background,
311 const gfx::Rect& foreground_rect, 314 const gfx::Rect& foreground_rect,
312 uint8 y_foreground, 315 uint8 y_foreground,
313 uint8 u_foreground, 316 uint8 u_foreground,
314 uint8 v_foreground, 317 uint8 v_foreground,
315 RenderPass* render_pass, 318 RenderPass* render_pass,
316 VideoResourceUpdater* video_resource_updater, 319 VideoResourceUpdater* video_resource_updater,
317 ResourceProvider* resource_provider) { 320 ResourceProvider* resource_provider) {
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
349 for (int x = sample_rect.x(); x < sample_rect.right(); ++x) { 352 for (int x = sample_rect.x(); x < sample_rect.right(); ++x) {
350 size_t offset = y * video_frame->stride(planes[i]) + x; 353 size_t offset = y * video_frame->stride(planes[i]) + x;
351 video_frame->data(planes[i])[offset] = yuv_foreground[i]; 354 video_frame->data(planes[i])[offset] = yuv_foreground[i];
352 } 355 }
353 } 356 }
354 } 357 }
355 358
356 uint8 alpha_value = 255; 359 uint8 alpha_value = 255;
357 CreateTestYUVVideoDrawQuad_FromVideoFrame( 360 CreateTestYUVVideoDrawQuad_FromVideoFrame(
358 shared_state, video_frame, alpha_value, tex_coord_rect, render_pass, 361 shared_state, video_frame, alpha_value, tex_coord_rect, render_pass,
359 video_resource_updater, rect, resource_provider); 362 video_resource_updater, rect, visible_rect, resource_provider);
360 } 363 }
361 364
362 void CreateTestYUVVideoDrawQuad_Solid( 365 void CreateTestYUVVideoDrawQuad_Solid(
363 const SharedQuadState* shared_state, 366 const SharedQuadState* shared_state,
364 media::VideoFrame::Format format, 367 media::VideoFrame::Format format,
365 bool is_transparent, 368 bool is_transparent,
366 const gfx::RectF& tex_coord_rect, 369 const gfx::RectF& tex_coord_rect,
367 uint8 y, 370 uint8 y,
368 uint8 u, 371 uint8 u,
369 uint8 v, 372 uint8 v,
370 RenderPass* render_pass, 373 RenderPass* render_pass,
371 VideoResourceUpdater* video_resource_updater, 374 VideoResourceUpdater* video_resource_updater,
372 const gfx::Rect& rect, 375 const gfx::Rect& rect,
376 const gfx::Rect& visible_rect,
373 ResourceProvider* resource_provider) { 377 ResourceProvider* resource_provider) {
374 scoped_refptr<media::VideoFrame> video_frame = media::VideoFrame::CreateFrame( 378 scoped_refptr<media::VideoFrame> video_frame = media::VideoFrame::CreateFrame(
375 format, rect.size(), rect, rect.size(), base::TimeDelta()); 379 format, rect.size(), rect, rect.size(), base::TimeDelta());
376 380
377 // YUV values of a solid, constant, color. Useful for testing that color 381 // YUV values of a solid, constant, color. Useful for testing that color
378 // space/color range are being handled properly. 382 // space/color range are being handled properly.
379 memset(video_frame->data(media::VideoFrame::kYPlane), y, 383 memset(video_frame->data(media::VideoFrame::kYPlane), y,
380 video_frame->stride(media::VideoFrame::kYPlane) * 384 video_frame->stride(media::VideoFrame::kYPlane) *
381 video_frame->rows(media::VideoFrame::kYPlane)); 385 video_frame->rows(media::VideoFrame::kYPlane));
382 memset(video_frame->data(media::VideoFrame::kUPlane), u, 386 memset(video_frame->data(media::VideoFrame::kUPlane), u,
383 video_frame->stride(media::VideoFrame::kUPlane) * 387 video_frame->stride(media::VideoFrame::kUPlane) *
384 video_frame->rows(media::VideoFrame::kUPlane)); 388 video_frame->rows(media::VideoFrame::kUPlane));
385 memset(video_frame->data(media::VideoFrame::kVPlane), v, 389 memset(video_frame->data(media::VideoFrame::kVPlane), v,
386 video_frame->stride(media::VideoFrame::kVPlane) * 390 video_frame->stride(media::VideoFrame::kVPlane) *
387 video_frame->rows(media::VideoFrame::kVPlane)); 391 video_frame->rows(media::VideoFrame::kVPlane));
388 392
389 uint8 alpha_value = is_transparent ? 0 : 128; 393 uint8 alpha_value = is_transparent ? 0 : 128;
390 CreateTestYUVVideoDrawQuad_FromVideoFrame( 394 CreateTestYUVVideoDrawQuad_FromVideoFrame(
391 shared_state, video_frame, alpha_value, tex_coord_rect, render_pass, 395 shared_state, video_frame, alpha_value, tex_coord_rect, render_pass,
392 video_resource_updater, rect, resource_provider); 396 video_resource_updater, rect, visible_rect, resource_provider);
393 } 397 }
394 398
395 typedef ::testing::Types<GLRenderer, 399 typedef ::testing::Types<GLRenderer,
396 SoftwareRenderer, 400 SoftwareRenderer,
397 GLRendererWithExpandedViewport, 401 GLRendererWithExpandedViewport,
398 SoftwareRendererWithExpandedViewport> RendererTypes; 402 SoftwareRendererWithExpandedViewport> RendererTypes;
399 TYPED_TEST_CASE(RendererPixelTest, RendererTypes); 403 TYPED_TEST_CASE(RendererPixelTest, RendererTypes);
400 404
401 template <typename RendererType> 405 template <typename RendererType>
402 class SoftwareRendererPixelTest : public RendererPixelTest<RendererType> {}; 406 class SoftwareRendererPixelTest : public RendererPixelTest<RendererType> {};
(...skipping 411 matching lines...) Expand 10 before | Expand all | Expand 10 after
814 TYPED_TEST(IntersectingQuadGLPixelTest, YUVVideoQuads) { 818 TYPED_TEST(IntersectingQuadGLPixelTest, YUVVideoQuads) {
815 this->SetupQuadStateAndRenderPass(); 819 this->SetupQuadStateAndRenderPass();
816 gfx::Rect inner_rect( 820 gfx::Rect inner_rect(
817 ((this->quad_rect_.x() + (this->quad_rect_.width() / 4)) & ~0xF), 821 ((this->quad_rect_.x() + (this->quad_rect_.width() / 4)) & ~0xF),
818 ((this->quad_rect_.y() + (this->quad_rect_.height() / 4)) & ~0xF), 822 ((this->quad_rect_.y() + (this->quad_rect_.height() / 4)) & ~0xF),
819 (this->quad_rect_.width() / 2) & ~0xF, 823 (this->quad_rect_.width() / 2) & ~0xF,
820 (this->quad_rect_.height() / 2) & ~0xF); 824 (this->quad_rect_.height() / 2) & ~0xF);
821 825
822 CreateTestYUVVideoDrawQuad_TwoColor( 826 CreateTestYUVVideoDrawQuad_TwoColor(
823 this->front_quad_state_, media::VideoFrame::YV12J, false, 827 this->front_quad_state_, media::VideoFrame::YV12J, false,
824 gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f), this->quad_rect_.size(), 0, 128, 128, 828 gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f), this->quad_rect_.size(),
825 inner_rect, 29, 255, 107, this->render_pass_.get(), 829 this->quad_rect_, 0, 128, 128, inner_rect, 29, 255, 107,
826 this->video_resource_updater_.get(), this->resource_provider_.get()); 830 this->render_pass_.get(), this->video_resource_updater_.get(),
831 this->resource_provider_.get());
827 832
828 CreateTestYUVVideoDrawQuad_TwoColor( 833 CreateTestYUVVideoDrawQuad_TwoColor(
829 this->back_quad_state_, media::VideoFrame::YV12J, false, 834 this->back_quad_state_, media::VideoFrame::YV12J, false,
830 gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f), this->quad_rect_.size(), 149, 43, 21, 835 gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f), this->quad_rect_.size(),
831 inner_rect, 0, 128, 128, this->render_pass_.get(), 836 this->quad_rect_, 149, 43, 21, inner_rect, 0, 128, 128,
832 this->video_resource_updater2_.get(), this->resource_provider_.get()); 837 this->render_pass_.get(), this->video_resource_updater2_.get(),
838 this->resource_provider_.get());
833 839
834 SCOPED_TRACE("IntersectingVideoQuads"); 840 SCOPED_TRACE("IntersectingVideoQuads");
835 this->template AppendBackgroundAndRunTest<YUVVideoDrawQuad>( 841 this->template AppendBackgroundAndRunTest<YUVVideoDrawQuad>(
836 FuzzyPixelOffByOneComparator(false)); 842 FuzzyPixelOffByOneComparator(false));
837 } 843 }
838 844
839 // TODO(skaslev): The software renderer does not support non-premultplied alpha. 845 // TODO(skaslev): The software renderer does not support non-premultplied alpha.
840 TEST_F(GLRendererPixelTest, NonPremultipliedTextureWithoutBackground) { 846 TEST_F(GLRendererPixelTest, NonPremultipliedTextureWithoutBackground) {
841 gfx::Rect rect(this->device_viewport_size_); 847 gfx::Rect rect(this->device_viewport_size_);
842 848
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
925 static_cast<float>(green_rect.y()) / background_size.height(), 931 static_cast<float>(green_rect.y()) / background_size.height(),
926 static_cast<float>(green_rect.width()) / background_size.width(), 932 static_cast<float>(green_rect.width()) / background_size.width(),
927 static_cast<float>(green_rect.height()) / background_size.height()); 933 static_cast<float>(green_rect.height()) / background_size.height());
928 934
929 // YUV of (149,43,21) should be green (0,255,0) in RGB. 935 // YUV of (149,43,21) should be green (0,255,0) in RGB.
930 // Create a video frame that has a non-green background rect, with a 936 // Create a video frame that has a non-green background rect, with a
931 // green sub-rectangle that should be the only thing displayed in 937 // green sub-rectangle that should be the only thing displayed in
932 // the final image. Bleeding will appear on all four sides of the video 938 // the final image. Bleeding will appear on all four sides of the video
933 // if the tex coords are not clamped. 939 // if the tex coords are not clamped.
934 CreateTestYUVVideoDrawQuad_TwoColor( 940 CreateTestYUVVideoDrawQuad_TwoColor(
935 shared_state, format, false, tex_coord_rect, background_size, 0, 0, 0, 941 shared_state, format, false, tex_coord_rect, background_size,
936 green_rect, 149, 43, 21, pass.get(), video_resource_updater_.get(), 942 gfx::Rect(background_size), 0, 0, 0, green_rect, 149, 43, 21,
937 resource_provider_.get()); 943 pass.get(), video_resource_updater_.get(), resource_provider_.get());
938 pass_list->push_back(pass.Pass()); 944 pass_list->push_back(pass.Pass());
939 } 945 }
940 946
941 void SetUp() override { 947 void SetUp() override {
942 GLRendererPixelTest::SetUp(); 948 GLRendererPixelTest::SetUp();
943 video_resource_updater_.reset(new VideoResourceUpdater( 949 video_resource_updater_.reset(new VideoResourceUpdater(
944 output_surface_->context_provider(), resource_provider_.get())); 950 output_surface_->context_provider(), resource_provider_.get()));
945 } 951 }
946 952
947 scoped_ptr<VideoResourceUpdater> video_resource_updater_; 953 scoped_ptr<VideoResourceUpdater> video_resource_updater_;
948 }; 954 };
949 955
950 TEST_F(VideoGLRendererPixelTest, SimpleYUVRect) { 956 TEST_F(VideoGLRendererPixelTest, SimpleYUVRect) {
951 gfx::Rect rect(this->device_viewport_size_); 957 gfx::Rect rect(this->device_viewport_size_);
952 958
953 RenderPassId id(1, 1); 959 RenderPassId id(1, 1);
954 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect); 960 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect);
955 961
956 SharedQuadState* shared_state = 962 SharedQuadState* shared_state =
957 CreateTestSharedQuadState(gfx::Transform(), rect, pass.get()); 963 CreateTestSharedQuadState(gfx::Transform(), rect, pass.get());
958 964
959 CreateTestYUVVideoDrawQuad_Striped(shared_state, media::VideoFrame::YV12, 965 CreateTestYUVVideoDrawQuad_Striped(shared_state, media::VideoFrame::YV12,
960 false, gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f), 966 false, gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f),
961 pass.get(), video_resource_updater_.get(), 967 pass.get(), video_resource_updater_.get(),
962 rect, resource_provider_.get()); 968 rect, rect, resource_provider_.get());
963 969
964 RenderPassList pass_list; 970 RenderPassList pass_list;
965 pass_list.push_back(pass.Pass()); 971 pass_list.push_back(pass.Pass());
966 972
967 EXPECT_TRUE( 973 EXPECT_TRUE(
968 this->RunPixelTest(&pass_list, 974 this->RunPixelTest(&pass_list,
969 base::FilePath(FILE_PATH_LITERAL("yuv_stripes.png")), 975 base::FilePath(FILE_PATH_LITERAL("yuv_stripes.png")),
970 FuzzyPixelOffByOneComparator(true))); 976 FuzzyPixelOffByOneComparator(true)));
971 } 977 }
972 978
979 TEST_F(VideoGLRendererPixelTest, ClippedYUVRect) {
980 gfx::Rect viewport(this->device_viewport_size_);
981 gfx::Rect draw_rect(this->device_viewport_size_.width() * 1.5,
982 this->device_viewport_size_.height() * 1.5);
983
984 RenderPassId id(1, 1);
985 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, viewport);
986
987 SharedQuadState* shared_state =
988 CreateTestSharedQuadState(gfx::Transform(), viewport, pass.get());
989
990 CreateTestYUVVideoDrawQuad_Striped(shared_state, media::VideoFrame::YV12,
991 false, gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f),
992 pass.get(), video_resource_updater_.get(),
993 draw_rect, viewport,
994 resource_provider_.get());
995 RenderPassList pass_list;
996 pass_list.push_back(pass.Pass());
997
998 EXPECT_TRUE(this->RunPixelTest(
999 &pass_list, base::FilePath(FILE_PATH_LITERAL("yuv_stripes_clipped.png")),
1000 FuzzyPixelOffByOneComparator(true)));
1001 }
1002
973 TEST_F(VideoGLRendererPixelTest, OffsetYUVRect) { 1003 TEST_F(VideoGLRendererPixelTest, OffsetYUVRect) {
974 gfx::Rect rect(this->device_viewport_size_); 1004 gfx::Rect rect(this->device_viewport_size_);
975 1005
976 RenderPassId id(1, 1); 1006 RenderPassId id(1, 1);
977 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect); 1007 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect);
978 1008
979 SharedQuadState* shared_state = 1009 SharedQuadState* shared_state =
980 CreateTestSharedQuadState(gfx::Transform(), rect, pass.get()); 1010 CreateTestSharedQuadState(gfx::Transform(), rect, pass.get());
981 1011
982 // Intentionally sets frame format to I420 for testing coverage. 1012 // Intentionally sets frame format to I420 for testing coverage.
983 CreateTestYUVVideoDrawQuad_Striped( 1013 CreateTestYUVVideoDrawQuad_Striped(
984 shared_state, media::VideoFrame::I420, false, 1014 shared_state, media::VideoFrame::I420, false,
985 gfx::RectF(0.125f, 0.25f, 0.75f, 0.5f), pass.get(), 1015 gfx::RectF(0.125f, 0.25f, 0.75f, 0.5f), pass.get(),
986 video_resource_updater_.get(), rect, resource_provider_.get()); 1016 video_resource_updater_.get(), rect, rect, resource_provider_.get());
987 1017
988 RenderPassList pass_list; 1018 RenderPassList pass_list;
989 pass_list.push_back(pass.Pass()); 1019 pass_list.push_back(pass.Pass());
990 1020
991 EXPECT_TRUE(this->RunPixelTest( 1021 EXPECT_TRUE(this->RunPixelTest(
992 &pass_list, 1022 &pass_list,
993 base::FilePath(FILE_PATH_LITERAL("yuv_stripes_offset.png")), 1023 base::FilePath(FILE_PATH_LITERAL("yuv_stripes_offset.png")),
994 FuzzyPixelOffByOneComparator(true))); 1024 FuzzyPixelOffByOneComparator(true)));
995 } 1025 }
996 1026
997 TEST_F(VideoGLRendererPixelTest, SimpleYUVRectBlack) { 1027 TEST_F(VideoGLRendererPixelTest, SimpleYUVRectBlack) {
998 gfx::Rect rect(this->device_viewport_size_); 1028 gfx::Rect rect(this->device_viewport_size_);
999 1029
1000 RenderPassId id(1, 1); 1030 RenderPassId id(1, 1);
1001 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect); 1031 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect);
1002 1032
1003 SharedQuadState* shared_state = 1033 SharedQuadState* shared_state =
1004 CreateTestSharedQuadState(gfx::Transform(), rect, pass.get()); 1034 CreateTestSharedQuadState(gfx::Transform(), rect, pass.get());
1005 1035
1006 // In MPEG color range YUV values of (15,128,128) should produce black. 1036 // In MPEG color range YUV values of (15,128,128) should produce black.
1007 CreateTestYUVVideoDrawQuad_Solid( 1037 CreateTestYUVVideoDrawQuad_Solid(
1008 shared_state, media::VideoFrame::YV12, false, 1038 shared_state, media::VideoFrame::YV12, false,
1009 gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f), 15, 128, 128, pass.get(), 1039 gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f), 15, 128, 128, pass.get(),
1010 video_resource_updater_.get(), rect, resource_provider_.get()); 1040 video_resource_updater_.get(), rect, rect, resource_provider_.get());
1011 1041
1012 RenderPassList pass_list; 1042 RenderPassList pass_list;
1013 pass_list.push_back(pass.Pass()); 1043 pass_list.push_back(pass.Pass());
1014 1044
1015 // If we didn't get black out of the YUV values above, then we probably have a 1045 // If we didn't get black out of the YUV values above, then we probably have a
1016 // color range issue. 1046 // color range issue.
1017 EXPECT_TRUE(this->RunPixelTest(&pass_list, 1047 EXPECT_TRUE(this->RunPixelTest(&pass_list,
1018 base::FilePath(FILE_PATH_LITERAL("black.png")), 1048 base::FilePath(FILE_PATH_LITERAL("black.png")),
1019 FuzzyPixelOffByOneComparator(true))); 1049 FuzzyPixelOffByOneComparator(true)));
1020 } 1050 }
1021 1051
1022 TEST_F(VideoGLRendererPixelTest, SimpleYUVJRect) { 1052 TEST_F(VideoGLRendererPixelTest, SimpleYUVJRect) {
1023 gfx::Rect rect(this->device_viewport_size_); 1053 gfx::Rect rect(this->device_viewport_size_);
1024 1054
1025 RenderPassId id(1, 1); 1055 RenderPassId id(1, 1);
1026 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect); 1056 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect);
1027 1057
1028 SharedQuadState* shared_state = 1058 SharedQuadState* shared_state =
1029 CreateTestSharedQuadState(gfx::Transform(), rect, pass.get()); 1059 CreateTestSharedQuadState(gfx::Transform(), rect, pass.get());
1030 1060
1031 // YUV of (149,43,21) should be green (0,255,0) in RGB. 1061 // YUV of (149,43,21) should be green (0,255,0) in RGB.
1032 CreateTestYUVVideoDrawQuad_Solid( 1062 CreateTestYUVVideoDrawQuad_Solid(
1033 shared_state, media::VideoFrame::YV12J, false, 1063 shared_state, media::VideoFrame::YV12J, false,
1034 gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f), 149, 43, 21, pass.get(), 1064 gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f), 149, 43, 21, pass.get(),
1035 video_resource_updater_.get(), rect, resource_provider_.get()); 1065 video_resource_updater_.get(), rect, rect, resource_provider_.get());
1036 1066
1037 RenderPassList pass_list; 1067 RenderPassList pass_list;
1038 pass_list.push_back(pass.Pass()); 1068 pass_list.push_back(pass.Pass());
1039 1069
1040 EXPECT_TRUE(this->RunPixelTest(&pass_list, 1070 EXPECT_TRUE(this->RunPixelTest(&pass_list,
1041 base::FilePath(FILE_PATH_LITERAL("green.png")), 1071 base::FilePath(FILE_PATH_LITERAL("green.png")),
1042 FuzzyPixelOffByOneComparator(true))); 1072 FuzzyPixelOffByOneComparator(true)));
1043 } 1073 }
1044 1074
1045 // Test that a YUV video doesn't bleed outside of its tex coords when the 1075 // Test that a YUV video doesn't bleed outside of its tex coords when the
(...skipping 20 matching lines...) Expand all
1066 RenderPassId id(1, 1); 1096 RenderPassId id(1, 1);
1067 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect); 1097 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect);
1068 1098
1069 SharedQuadState* shared_state = 1099 SharedQuadState* shared_state =
1070 CreateTestSharedQuadState(gfx::Transform(), rect, pass.get()); 1100 CreateTestSharedQuadState(gfx::Transform(), rect, pass.get());
1071 1101
1072 // Dark grey in JPEG color range (in MPEG, this is black). 1102 // Dark grey in JPEG color range (in MPEG, this is black).
1073 CreateTestYUVVideoDrawQuad_Solid( 1103 CreateTestYUVVideoDrawQuad_Solid(
1074 shared_state, media::VideoFrame::YV12J, false, 1104 shared_state, media::VideoFrame::YV12J, false,
1075 gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f), 15, 128, 128, pass.get(), 1105 gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f), 15, 128, 128, pass.get(),
1076 video_resource_updater_.get(), rect, resource_provider_.get()); 1106 video_resource_updater_.get(), rect, rect, resource_provider_.get());
1077 1107
1078 RenderPassList pass_list; 1108 RenderPassList pass_list;
1079 pass_list.push_back(pass.Pass()); 1109 pass_list.push_back(pass.Pass());
1080 1110
1081 EXPECT_TRUE( 1111 EXPECT_TRUE(
1082 this->RunPixelTest(&pass_list, 1112 this->RunPixelTest(&pass_list,
1083 base::FilePath(FILE_PATH_LITERAL("dark_grey.png")), 1113 base::FilePath(FILE_PATH_LITERAL("dark_grey.png")),
1084 FuzzyPixelOffByOneComparator(true))); 1114 FuzzyPixelOffByOneComparator(true)));
1085 } 1115 }
1086 1116
1087 TEST_F(VideoGLRendererPixelTest, SimpleYUVARect) { 1117 TEST_F(VideoGLRendererPixelTest, SimpleYUVARect) {
1088 gfx::Rect rect(this->device_viewport_size_); 1118 gfx::Rect rect(this->device_viewport_size_);
1089 1119
1090 RenderPassId id(1, 1); 1120 RenderPassId id(1, 1);
1091 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect); 1121 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect);
1092 1122
1093 SharedQuadState* shared_state = 1123 SharedQuadState* shared_state =
1094 CreateTestSharedQuadState(gfx::Transform(), rect, pass.get()); 1124 CreateTestSharedQuadState(gfx::Transform(), rect, pass.get());
1095 1125
1096 CreateTestYUVVideoDrawQuad_Striped(shared_state, media::VideoFrame::YV12A, 1126 CreateTestYUVVideoDrawQuad_Striped(shared_state, media::VideoFrame::YV12A,
1097 false, gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f), 1127 false, gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f),
1098 pass.get(), video_resource_updater_.get(), 1128 pass.get(), video_resource_updater_.get(),
1099 rect, resource_provider_.get()); 1129 rect, rect, resource_provider_.get());
1100 1130
1101 SolidColorDrawQuad* color_quad = 1131 SolidColorDrawQuad* color_quad =
1102 pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); 1132 pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
1103 color_quad->SetNew(shared_state, rect, rect, SK_ColorWHITE, false); 1133 color_quad->SetNew(shared_state, rect, rect, SK_ColorWHITE, false);
1104 1134
1105 RenderPassList pass_list; 1135 RenderPassList pass_list;
1106 pass_list.push_back(pass.Pass()); 1136 pass_list.push_back(pass.Pass());
1107 1137
1108 EXPECT_TRUE(this->RunPixelTest( 1138 EXPECT_TRUE(this->RunPixelTest(
1109 &pass_list, 1139 &pass_list,
1110 base::FilePath(FILE_PATH_LITERAL("yuv_stripes_alpha.png")), 1140 base::FilePath(FILE_PATH_LITERAL("yuv_stripes_alpha.png")),
1111 FuzzyPixelOffByOneComparator(true))); 1141 FuzzyPixelOffByOneComparator(true)));
1112 } 1142 }
1113 1143
1114 TEST_F(VideoGLRendererPixelTest, FullyTransparentYUVARect) { 1144 TEST_F(VideoGLRendererPixelTest, FullyTransparentYUVARect) {
1115 gfx::Rect rect(this->device_viewport_size_); 1145 gfx::Rect rect(this->device_viewport_size_);
1116 1146
1117 RenderPassId id(1, 1); 1147 RenderPassId id(1, 1);
1118 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect); 1148 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect);
1119 1149
1120 SharedQuadState* shared_state = 1150 SharedQuadState* shared_state =
1121 CreateTestSharedQuadState(gfx::Transform(), rect, pass.get()); 1151 CreateTestSharedQuadState(gfx::Transform(), rect, pass.get());
1122 1152
1123 CreateTestYUVVideoDrawQuad_Striped(shared_state, media::VideoFrame::YV12A, 1153 CreateTestYUVVideoDrawQuad_Striped(shared_state, media::VideoFrame::YV12A,
1124 true, gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f), 1154 true, gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f),
1125 pass.get(), video_resource_updater_.get(), 1155 pass.get(), video_resource_updater_.get(),
1126 rect, resource_provider_.get()); 1156 rect, rect, resource_provider_.get());
1127 1157
1128 SolidColorDrawQuad* color_quad = 1158 SolidColorDrawQuad* color_quad =
1129 pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); 1159 pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
1130 color_quad->SetNew(shared_state, rect, rect, SK_ColorBLACK, false); 1160 color_quad->SetNew(shared_state, rect, rect, SK_ColorBLACK, false);
1131 1161
1132 RenderPassList pass_list; 1162 RenderPassList pass_list;
1133 pass_list.push_back(pass.Pass()); 1163 pass_list.push_back(pass.Pass());
1134 1164
1135 EXPECT_TRUE(this->RunPixelTest( 1165 EXPECT_TRUE(this->RunPixelTest(
1136 &pass_list, 1166 &pass_list,
(...skipping 1759 matching lines...) Expand 10 before | Expand all | Expand 10 after
2896 ? FILE_PATH_LITERAL("four_blue_green_checkers.png") 2926 ? FILE_PATH_LITERAL("four_blue_green_checkers.png")
2897 : FILE_PATH_LITERAL("checkers_big.png"); 2927 : FILE_PATH_LITERAL("checkers_big.png");
2898 EXPECT_TRUE(this->RunPixelTest(&pass_list, base::FilePath(path), 2928 EXPECT_TRUE(this->RunPixelTest(&pass_list, base::FilePath(path),
2899 ExactPixelComparator(true))); 2929 ExactPixelComparator(true)));
2900 } 2930 }
2901 2931
2902 #endif // !defined(OS_ANDROID) 2932 #endif // !defined(OS_ANDROID)
2903 2933
2904 } // namespace 2934 } // namespace
2905 } // namespace cc 2935 } // namespace cc
OLDNEW
« no previous file with comments | « cc/output/gl_renderer.cc ('k') | cc/test/data/yuv_stripes_clipped.png » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698