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

Side by Side Diff: unit_test/color_test.cc

Issue 1405543003: create color test category of unittests to narrow down arm bug (Closed) Base URL: https://chromium.googlesource.com/libyuv/libyuv@master
Patch Set: Created 5 years, 2 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 | « libyuv_test.gyp ('k') | unit_test/scale_color_test.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 /* 1 /*
2 * Copyright 2015 The LibYuv Project Authors. All rights reserved. 2 * Copyright 2015 The LibYuv Project Authors. All rights reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 19 matching lines...) Expand all
30 #define ERROR_J420 4 30 #define ERROR_J420 4
31 #else 31 #else
32 #define ERROR_R 1 32 #define ERROR_R 1
33 #define ERROR_G 1 33 #define ERROR_G 1
34 #define ERROR_B 3 34 #define ERROR_B 3
35 #define ERROR_FULL 5 35 #define ERROR_FULL 5
36 #define ERROR_J420 3 36 #define ERROR_J420 3
37 #endif 37 #endif
38 38
39 #define TESTCS(TESTNAME, YUVTOARGB, ARGBTOYUV, HS1, HS, HN, DIFF) \ 39 #define TESTCS(TESTNAME, YUVTOARGB, ARGBTOYUV, HS1, HS, HN, DIFF) \
40 TEST_F(LibYUVConvertTest, TESTNAME) { \ 40 TEST_F(LibYUVColorTest, TESTNAME) { \
41 const int kPixels = benchmark_width_ * benchmark_height_; \ 41 const int kPixels = benchmark_width_ * benchmark_height_; \
42 const int kHalfPixels = ((benchmark_width_ + 1) / 2) * \ 42 const int kHalfPixels = ((benchmark_width_ + 1) / 2) * \
43 ((benchmark_height_ + HS1) / HS); \ 43 ((benchmark_height_ + HS1) / HS); \
44 align_buffer_64(orig_y, kPixels); \ 44 align_buffer_64(orig_y, kPixels); \
45 align_buffer_64(orig_u, kHalfPixels); \ 45 align_buffer_64(orig_u, kHalfPixels); \
46 align_buffer_64(orig_v, kHalfPixels); \ 46 align_buffer_64(orig_v, kHalfPixels); \
47 align_buffer_64(orig_pixels, kPixels * 4); \ 47 align_buffer_64(orig_pixels, kPixels * 4); \
48 align_buffer_64(temp_y, kPixels); \ 48 align_buffer_64(temp_y, kPixels); \
49 align_buffer_64(temp_u, kHalfPixels); \ 49 align_buffer_64(temp_u, kHalfPixels); \
50 align_buffer_64(temp_v, kHalfPixels); \ 50 align_buffer_64(temp_v, kHalfPixels); \
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after
305 #elif defined(CLAMPMETHOD_MASK) 305 #elif defined(CLAMPMETHOD_MASK)
306 static int RoundToByte(float f) { 306 static int RoundToByte(float f) {
307 int i = ROUND(f); 307 int i = ROUND(f);
308 i = ((-(i) >> 31) & (i)); // clamp to 0. 308 i = ((-(i) >> 31) & (i)); // clamp to 0.
309 return (((255 - (i)) >> 31) | (i)) & 255; // clamp to 255. 309 return (((255 - (i)) >> 31) | (i)) & 255; // clamp to 255.
310 } 310 }
311 #endif 311 #endif
312 312
313 #define RANDOM256(s) ((s & 1) ? ((s >> 1) ^ 0xb8) : (s >> 1)) 313 #define RANDOM256(s) ((s & 1) ? ((s >> 1) ^ 0xb8) : (s >> 1))
314 314
315 TEST_F(LibYUVConvertTest, TestRoundToByte) { 315 TEST_F(LibYUVColorTest, TestRoundToByte) {
316 int allb = 0; 316 int allb = 0;
317 int count = benchmark_width_ * benchmark_height_; 317 int count = benchmark_width_ * benchmark_height_;
318 for (int i = 0; i < benchmark_iterations_; ++i) { 318 for (int i = 0; i < benchmark_iterations_; ++i) {
319 float f = (fastrand() & 255) * 3.14f - 260.f; 319 float f = (fastrand() & 255) * 3.14f - 260.f;
320 for (int j = 0; j < count; ++j) { 320 for (int j = 0; j < count; ++j) {
321 int b = RoundToByte(f); 321 int b = RoundToByte(f);
322 f += 0.91f; 322 f += 0.91f;
323 allb |= b; 323 allb |= b;
324 } 324 }
325 } 325 }
326 EXPECT_GE(allb, 0); 326 EXPECT_GE(allb, 0);
327 EXPECT_LE(allb, 255); 327 EXPECT_LE(allb, 255);
328 } 328 }
329 329
330 static void YUVToRGBReference(int y, int u, int v, int* r, int* g, int* b) { 330 static void YUVToRGBReference(int y, int u, int v, int* r, int* g, int* b) {
331 *r = RoundToByte((y - 16) * 1.164 - (v - 128) * -1.596); 331 *r = RoundToByte((y - 16) * 1.164 - (v - 128) * -1.596);
332 *g = RoundToByte((y - 16) * 1.164 - (u - 128) * 0.391 - (v - 128) * 0.813); 332 *g = RoundToByte((y - 16) * 1.164 - (u - 128) * 0.391 - (v - 128) * 0.813);
333 *b = RoundToByte((y - 16) * 1.164 - (u - 128) * -2.018); 333 *b = RoundToByte((y - 16) * 1.164 - (u - 128) * -2.018);
334 } 334 }
335 335
336 static void YUVJToRGBReference(int y, int u, int v, int* r, int* g, int* b) { 336 static void YUVJToRGBReference(int y, int u, int v, int* r, int* g, int* b) {
337 *r = RoundToByte(y - (v - 128) * -1.40200); 337 *r = RoundToByte(y - (v - 128) * -1.40200);
338 *g = RoundToByte(y - (u - 128) * 0.34414 - (v - 128) * 0.71414); 338 *g = RoundToByte(y - (u - 128) * 0.34414 - (v - 128) * 0.71414);
339 *b = RoundToByte(y - (u - 128) * -1.77200); 339 *b = RoundToByte(y - (u - 128) * -1.77200);
340 } 340 }
341 341
342 TEST_F(LibYUVConvertTest, TestYUV) { 342 TEST_F(LibYUVColorTest, TestYUV) {
343 int r0, g0, b0, r1, g1, b1; 343 int r0, g0, b0, r1, g1, b1;
344 344
345 // cyan (less red) 345 // cyan (less red)
346 YUVToRGBReference(240, 255, 0, &r0, &g0, &b0); 346 YUVToRGBReference(240, 255, 0, &r0, &g0, &b0);
347 EXPECT_EQ(56, r0); 347 EXPECT_EQ(56, r0);
348 EXPECT_EQ(255, g0); 348 EXPECT_EQ(255, g0);
349 EXPECT_EQ(255, b0); 349 EXPECT_EQ(255, b0);
350 350
351 YUVToRGB(240, 255, 0, &r1, &g1, &b1); 351 YUVToRGB(240, 255, 0, &r1, &g1, &b1);
352 EXPECT_EQ(57, r1); 352 EXPECT_EQ(57, r1);
(...skipping 25 matching lines...) Expand all
378 EXPECT_NEAR(b0, b1, ERROR_B); 378 EXPECT_NEAR(b0, b1, ERROR_B);
379 379
380 YUVToRGBReference(i, 0, 255, &r0, &g0, &b0); 380 YUVToRGBReference(i, 0, 255, &r0, &g0, &b0);
381 YUVToRGB(i, 0, 255, &r1, &g1, &b1); 381 YUVToRGB(i, 0, 255, &r1, &g1, &b1);
382 EXPECT_NEAR(r0, r1, ERROR_R); 382 EXPECT_NEAR(r0, r1, ERROR_R);
383 EXPECT_NEAR(g0, g1, ERROR_G); 383 EXPECT_NEAR(g0, g1, ERROR_G);
384 EXPECT_NEAR(b0, b1, ERROR_B); 384 EXPECT_NEAR(b0, b1, ERROR_B);
385 } 385 }
386 } 386 }
387 387
388 TEST_F(LibYUVConvertTest, TestGreyYUV) { 388 TEST_F(LibYUVColorTest, TestGreyYUV) {
389 int r0, g0, b0, r1, g1, b1, r2, g2, b2; 389 int r0, g0, b0, r1, g1, b1, r2, g2, b2;
390 390
391 // black 391 // black
392 YUVToRGBReference(16, 128, 128, &r0, &g0, &b0); 392 YUVToRGBReference(16, 128, 128, &r0, &g0, &b0);
393 EXPECT_EQ(0, r0); 393 EXPECT_EQ(0, r0);
394 EXPECT_EQ(0, g0); 394 EXPECT_EQ(0, g0);
395 EXPECT_EQ(0, b0); 395 EXPECT_EQ(0, b0);
396 396
397 YUVToRGB(16, 128, 128, &r1, &g1, &b1); 397 YUVToRGB(16, 128, 128, &r1, &g1, &b1);
398 EXPECT_EQ(0, r1); 398 EXPECT_EQ(0, r1);
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
457 } 457 }
458 printf("\nblue"); 458 printf("\nblue");
459 for (i = 0; i < 256; ++i) { 459 for (i = 0; i < 256; ++i) {
460 if (rh[i] || gh[i] || bh[i]) { 460 if (rh[i] || gh[i] || bh[i]) {
461 printf("\t%8d", bh[i]); 461 printf("\t%8d", bh[i]);
462 } 462 }
463 } 463 }
464 printf("\n"); 464 printf("\n");
465 } 465 }
466 466
467 TEST_F(LibYUVConvertTest, TestFullYUV) { 467 TEST_F(LibYUVColorTest, TestFullYUV) {
468 int rh[256] = { 0, }, gh[256] = { 0, }, bh[256] = { 0, }; 468 int rh[256] = { 0, }, gh[256] = { 0, }, bh[256] = { 0, };
469 for (int u = 0; u < 256; ++u) { 469 for (int u = 0; u < 256; ++u) {
470 for (int v = 0; v < 256; ++v) { 470 for (int v = 0; v < 256; ++v) {
471 for (int y2 = 0; y2 < 256; ++y2) { 471 for (int y2 = 0; y2 < 256; ++y2) {
472 int r0, g0, b0, r1, g1, b1; 472 int r0, g0, b0, r1, g1, b1;
473 int y = RANDOM256(y2); 473 int y = RANDOM256(y2);
474 YUVToRGBReference(y, u, v, &r0, &g0, &b0); 474 YUVToRGBReference(y, u, v, &r0, &g0, &b0);
475 YUVToRGB(y, u, v, &r1, &g1, &b1); 475 YUVToRGB(y, u, v, &r1, &g1, &b1);
476 EXPECT_NEAR(r0, r1, ERROR_R); 476 EXPECT_NEAR(r0, r1, ERROR_R);
477 EXPECT_NEAR(g0, g1, ERROR_G); 477 EXPECT_NEAR(g0, g1, ERROR_G);
478 EXPECT_NEAR(b0, b1, ERROR_B); 478 EXPECT_NEAR(b0, b1, ERROR_B);
479 ++rh[r1 - r0 + 128]; 479 ++rh[r1 - r0 + 128];
480 ++gh[g1 - g0 + 128]; 480 ++gh[g1 - g0 + 128];
481 ++bh[b1 - b0 + 128]; 481 ++bh[b1 - b0 + 128];
482 } 482 }
483 } 483 }
484 } 484 }
485 PrintHistogram(rh, gh, bh); 485 PrintHistogram(rh, gh, bh);
486 } 486 }
487 487
488 TEST_F(LibYUVConvertTest, TestFullYUVJ) { 488 TEST_F(LibYUVColorTest, TestFullYUVJ) {
489 int rh[256] = { 0, }, gh[256] = { 0, }, bh[256] = { 0, }; 489 int rh[256] = { 0, }, gh[256] = { 0, }, bh[256] = { 0, };
490 for (int u = 0; u < 256; ++u) { 490 for (int u = 0; u < 256; ++u) {
491 for (int v = 0; v < 256; ++v) { 491 for (int v = 0; v < 256; ++v) {
492 for (int y2 = 0; y2 < 256; ++y2) { 492 for (int y2 = 0; y2 < 256; ++y2) {
493 int r0, g0, b0, r1, g1, b1; 493 int r0, g0, b0, r1, g1, b1;
494 int y = RANDOM256(y2); 494 int y = RANDOM256(y2);
495 YUVJToRGBReference(y, u, v, &r0, &g0, &b0); 495 YUVJToRGBReference(y, u, v, &r0, &g0, &b0);
496 YUVJToRGB(y, u, v, &r1, &g1, &b1); 496 YUVJToRGB(y, u, v, &r1, &g1, &b1);
497 EXPECT_NEAR(r0, r1, 1); 497 EXPECT_NEAR(r0, r1, 1);
498 EXPECT_NEAR(g0, g1, 1); 498 EXPECT_NEAR(g0, g1, 1);
499 EXPECT_NEAR(b0, b1, 1); 499 EXPECT_NEAR(b0, b1, 1);
500 ++rh[r1 - r0 + 128]; 500 ++rh[r1 - r0 + 128];
501 ++gh[g1 - g0 + 128]; 501 ++gh[g1 - g0 + 128];
502 ++bh[b1 - b0 + 128]; 502 ++bh[b1 - b0 + 128];
503 } 503 }
504 } 504 }
505 } 505 }
506 PrintHistogram(rh, gh, bh); 506 PrintHistogram(rh, gh, bh);
507 } 507 }
508 508
509 TEST_F(LibYUVConvertTest, TestGreyYUVJ) { 509 TEST_F(LibYUVColorTest, TestGreyYUVJ) {
510 int r0, g0, b0, r1, g1, b1, r2, g2, b2; 510 int r0, g0, b0, r1, g1, b1, r2, g2, b2;
511 511
512 // black 512 // black
513 YUVJToRGBReference(0, 128, 128, &r0, &g0, &b0); 513 YUVJToRGBReference(0, 128, 128, &r0, &g0, &b0);
514 EXPECT_EQ(0, r0); 514 EXPECT_EQ(0, r0);
515 EXPECT_EQ(0, g0); 515 EXPECT_EQ(0, g0);
516 EXPECT_EQ(0, b0); 516 EXPECT_EQ(0, b0);
517 517
518 YUVJToRGB(0, 128, 128, &r1, &g1, &b1); 518 YUVJToRGB(0, 128, 128, &r1, &g1, &b1);
519 EXPECT_EQ(0, r1); 519 EXPECT_EQ(0, r1);
(...skipping 29 matching lines...) Expand all
549 EXPECT_EQ(r0, r1); 549 EXPECT_EQ(r0, r1);
550 EXPECT_EQ(g0, g1); 550 EXPECT_EQ(g0, g1);
551 EXPECT_EQ(b0, b1); 551 EXPECT_EQ(b0, b1);
552 EXPECT_EQ(r0, r2); 552 EXPECT_EQ(r0, r2);
553 EXPECT_EQ(g0, g2); 553 EXPECT_EQ(g0, g2);
554 EXPECT_EQ(b0, b2); 554 EXPECT_EQ(b0, b2);
555 } 555 }
556 } 556 }
557 557
558 } // namespace libyuv 558 } // namespace libyuv
OLDNEW
« no previous file with comments | « libyuv_test.gyp ('k') | unit_test/scale_color_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698