diff --git a/README.chromium b/README.chromium index 4c970d11b..bf118aa13 100644 --- a/README.chromium +++ b/README.chromium @@ -1,6 +1,6 @@ Name: libyuv URL: http://code.google.com/p/libyuv/ -Version: 439 +Version: 442 License: BSD License File: LICENSE diff --git a/include/libyuv/version.h b/include/libyuv/version.h index a56baf3e4..6d0cd8a44 100644 --- a/include/libyuv/version.h +++ b/include/libyuv/version.h @@ -11,6 +11,6 @@ #ifndef INCLUDE_LIBYUV_VERSION_H_ // NOLINT #define INCLUDE_LIBYUV_VERSION_H_ -#define LIBYUV_VERSION 439 +#define LIBYUV_VERSION 442 #endif // INCLUDE_LIBYUV_VERSION_H_ NOLINT diff --git a/unit_test/compare_test.cc b/unit_test/compare_test.cc index 6170926a1..52d76879a 100644 --- a/unit_test/compare_test.cc +++ b/unit_test/compare_test.cc @@ -30,33 +30,9 @@ static uint32 ReferenceHashDjb2(const uint8* src, uint64 count, uint32 seed) { return hash; } -TEST_F(libyuvTest, TestDjb2) { - const int kMaxTest = 2049; - align_buffer_16(src_a, kMaxTest) - - for (int i = 0; i < kMaxTest; ++i) { - src_a[i] = i; - } - for (int i = 0; i < kMaxTest; ++i) { - uint32 h1 = HashDjb2(src_a, kMaxTest, 5381); - uint32 h2 = ReferenceHashDjb2(src_a, kMaxTest, 5381); - EXPECT_EQ(h1, h2); - } - // Hash constant generator using for tables in compare - int h = 1; - for (int i = 0; i <= 16 ; ++i) { - printf("%08x ", h); - h *= 33; - } - printf("\n"); - - free_aligned_buffer_16(src_a) -} - TEST_F(libyuvTest, BenchmakDjb2_C) { const int kMaxTest = benchmark_width_ * benchmark_height_; align_buffer_16(src_a, kMaxTest) - for (int i = 0; i < kMaxTest; ++i) { src_a[i] = i; } @@ -90,7 +66,6 @@ TEST_F(libyuvTest, BenchmakDjb2_OPT) { TEST_F(libyuvTest, BenchmakDjb2_Unaligned_OPT) { const int kMaxTest = benchmark_width_ * benchmark_height_; align_buffer_16(src_a, kMaxTest + 1) - for (int i = 0; i < kMaxTest; ++i) { src_a[i + 1] = i; } @@ -107,6 +82,8 @@ TEST_F(libyuvTest, BenchmarkSumSquareError_C) { const int kMaxWidth = 4096 * 3; align_buffer_16(src_a, kMaxWidth) align_buffer_16(src_b, kMaxWidth) + memset(src_a, 0, kMaxWidth); + memset(src_b, 0, kMaxWidth); MaskCpuFlags(0); memcpy(src_a, "test0123test4567", 16); @@ -118,15 +95,17 @@ TEST_F(libyuvTest, BenchmarkSumSquareError_C) { src_a[i] = i; src_b[i] = i; } + memset(src_a, 0, kMaxWidth); + memset(src_b, 0, kMaxWidth); int count = benchmark_iterations_ * - benchmark_width_ * benchmark_height_ / kMaxWidth; + (benchmark_width_ * benchmark_height_ + kMaxWidth - 1) / kMaxWidth; for (int i = 0; i < count; ++i) { h1 = ComputeSumSquareError(src_a, src_b, kMaxWidth); } MaskCpuFlags(-1); - EXPECT_EQ(h1, 0); + EXPECT_EQ(0, h1); free_aligned_buffer_16(src_a) free_aligned_buffer_16(src_b) @@ -136,6 +115,8 @@ TEST_F(libyuvTest, BenchmarkSumSquareError_OPT) { const int kMaxWidth = 4096 * 3; align_buffer_16(src_a, kMaxWidth) align_buffer_16(src_b, kMaxWidth) + memset(src_a, 0, kMaxWidth); + memset(src_b, 0, kMaxWidth); memcpy(src_a, "test0123test4567", 16); memcpy(src_b, "tick0123tock4567", 16); @@ -146,14 +127,16 @@ TEST_F(libyuvTest, BenchmarkSumSquareError_OPT) { src_a[i] = i; src_b[i] = i; } + memset(src_a, 0, kMaxWidth); + memset(src_b, 0, kMaxWidth); int count = benchmark_iterations_ * - benchmark_width_ * benchmark_height_ / kMaxWidth; + (benchmark_width_ * benchmark_height_ + kMaxWidth - 1) / kMaxWidth; for (int i = 0; i < count; ++i) { h1 = ComputeSumSquareError(src_a, src_b, kMaxWidth); } - EXPECT_EQ(h1, 0); + EXPECT_EQ(0, h1); free_aligned_buffer_16(src_a) free_aligned_buffer_16(src_b) @@ -163,14 +146,13 @@ TEST_F(libyuvTest, SumSquareError) { const int kMaxWidth = 4096 * 3; align_buffer_16(src_a, kMaxWidth) align_buffer_16(src_b, kMaxWidth) - memset(src_a, 0, kMaxWidth); memset(src_b, 0, kMaxWidth); uint64 err; err = ComputeSumSquareError(src_a, src_b, kMaxWidth); - EXPECT_EQ(err, 0); + EXPECT_EQ(0, err); memset(src_a, 1, kMaxWidth); err = ComputeSumSquareError(src_a, src_b, kMaxWidth); @@ -181,7 +163,7 @@ TEST_F(libyuvTest, SumSquareError) { memset(src_b, 193, kMaxWidth); err = ComputeSumSquareError(src_a, src_b, kMaxWidth); - EXPECT_EQ(err, (kMaxWidth * 3 * 3)); + EXPECT_EQ(kMaxWidth * 3 * 3, err); srandom(time(NULL)); @@ -205,7 +187,6 @@ TEST_F(libyuvTest, SumSquareError) { TEST_F(libyuvTest, BenchmarkPsnr_C) { align_buffer_16(src_a, benchmark_width_ * benchmark_height_) align_buffer_16(src_b, benchmark_width_ * benchmark_height_) - for (int i = 0; i < benchmark_width_ * benchmark_height_; ++i) { src_a[i] = i; src_b[i] = i; @@ -233,7 +214,6 @@ TEST_F(libyuvTest, BenchmarkPsnr_C) { TEST_F(libyuvTest, BenchmarkPsnr_OPT) { align_buffer_16(src_a, benchmark_width_ * benchmark_height_) align_buffer_16(src_b, benchmark_width_ * benchmark_height_) - for (int i = 0; i < benchmark_width_ * benchmark_height_; ++i) { src_a[i] = i; src_b[i] = i; @@ -264,7 +244,6 @@ TEST_F(libyuvTest, Psnr) { const int kSrcStride = 2 * b + kSrcWidth; align_buffer_16(src_a, kSrcPlaneSize) align_buffer_16(src_b, kSrcPlaneSize) - memset(src_a, 0, kSrcPlaneSize); memset(src_b, 0, kSrcPlaneSize); @@ -337,7 +316,6 @@ TEST_F(libyuvTest, Psnr) { TEST_F(libyuvTest, BenchmarkSsim_C) { align_buffer_16(src_a, benchmark_width_ * benchmark_height_) align_buffer_16(src_b, benchmark_width_ * benchmark_height_) - for (int i = 0; i < benchmark_width_ * benchmark_height_; ++i) { src_a[i] = i; src_b[i] = i; @@ -356,7 +334,7 @@ TEST_F(libyuvTest, BenchmarkSsim_C) { MaskCpuFlags(-1); - EXPECT_EQ(0, 0); + EXPECT_EQ(0, 0); // Pass if we get this far. free_aligned_buffer_16(src_a) free_aligned_buffer_16(src_b) @@ -365,7 +343,6 @@ TEST_F(libyuvTest, BenchmarkSsim_C) { TEST_F(libyuvTest, BenchmarkSsim_OPT) { align_buffer_16(src_a, benchmark_width_ * benchmark_height_) align_buffer_16(src_b, benchmark_width_ * benchmark_height_) - for (int i = 0; i < benchmark_width_ * benchmark_height_; ++i) { src_a[i] = i; src_b[i] = i; @@ -380,9 +357,9 @@ TEST_F(libyuvTest, BenchmarkSsim_OPT) { benchmark_width_, benchmark_height_); opt_time = (get_time() - opt_time) / benchmark_iterations_; - printf("BenchmarkPsnr_OPT - %8.2f us opt\n", opt_time * 1e6); + printf("BenchmarkSsim_OPT - %8.2f us opt\n", opt_time * 1e6); - EXPECT_EQ(0, 0); + EXPECT_EQ(0, 0); // Pass if we get this far. free_aligned_buffer_16(src_a) free_aligned_buffer_16(src_b) @@ -396,7 +373,6 @@ TEST_F(libyuvTest, Ssim) { const int kSrcStride = 2 * b + kSrcWidth; align_buffer_16(src_a, kSrcPlaneSize) align_buffer_16(src_b, kSrcPlaneSize) - memset(src_a, 0, kSrcPlaneSize); memset(src_b, 0, kSrcPlaneSize); @@ -421,7 +397,7 @@ TEST_F(libyuvTest, Ssim) { src_b + kSrcStride * b + b, kSrcStride, kSrcWidth, kSrcHeight); - EXPECT_GT(err, 0.8); + EXPECT_GT(err, 0.0001); EXPECT_LT(err, 0.9); for (int i = 0; i < kSrcPlaneSize; ++i) { @@ -432,7 +408,7 @@ TEST_F(libyuvTest, Ssim) { src_b + kSrcStride * b + b, kSrcStride, kSrcWidth, kSrcHeight); - EXPECT_GT(err, 0.008); + EXPECT_GT(err, 0.0); EXPECT_LT(err, 0.009); srandom(time(NULL)); diff --git a/unit_test/rotate_test.cc b/unit_test/rotate_test.cc index db586a884..eb54d83dc 100644 --- a/unit_test/rotate_test.cc +++ b/unit_test/rotate_test.cc @@ -29,445 +29,425 @@ void PrintArray(uint8 *array, int w, int h) { TEST_F(libyuvTest, Transpose) { int iw, ih, ow, oh; int err = 0; + iw = benchmark_width_; + ih = benchmark_height_; + int i; + ow = ih; + oh = iw; - for (iw = 8; iw < rotate_max_w_ && !err; ++iw) { - for (ih = 8; ih < rotate_max_h_ && !err; ++ih) { - int i; - ow = ih; - oh = iw; + align_buffer_16(input, iw * ih) + align_buffer_16(output_1, ow * oh) + align_buffer_16(output_2, iw * ih) - align_buffer_16(input, iw * ih) - align_buffer_16(output_1, ow * oh) - align_buffer_16(output_2, iw * ih) + for (i = 0; i < iw * ih; ++i) { + input[i] = i; + } - for (i = 0; i < iw * ih; ++i) { - input[i] = i; - } + TransposePlane(input, iw, output_1, ow, iw, ih); + TransposePlane(output_1, ow, output_2, oh, ow, oh); - TransposePlane(input, iw, output_1, ow, iw, ih); - TransposePlane(output_1, ow, output_2, oh, ow, oh); - - for (i = 0; i < iw * ih; ++i) { - if (input[i] != output_2[i]) { - err++; - } - } - - if (err) { - printf("input %dx%d \n", iw, ih); - PrintArray(input, iw, ih); - - printf("transpose 1\n"); - PrintArray(output_1, ow, oh); - - printf("transpose 2\n"); - PrintArray(output_2, iw, ih); - } - - free_aligned_buffer_16(input) - free_aligned_buffer_16(output_1) - free_aligned_buffer_16(output_2) + for (i = 0; i < iw * ih; ++i) { + if (input[i] != output_2[i]) { + err++; } } + if (err) { + printf("input %dx%d \n", iw, ih); + PrintArray(input, iw, ih); + + printf("transpose 1\n"); + PrintArray(output_1, ow, oh); + + printf("transpose 2\n"); + PrintArray(output_2, iw, ih); + } + + free_aligned_buffer_16(input) + free_aligned_buffer_16(output_1) + free_aligned_buffer_16(output_2) + EXPECT_EQ(0, err); } TEST_F(libyuvTest, TransposeUV) { int iw, ih, ow, oh; int err = 0; + iw = benchmark_width_; + ih = benchmark_height_; + int i; - for (iw = 16; iw < rotate_max_w_ && !err; iw += 2) { - for (ih = 8; ih < rotate_max_h_ && !err; ++ih) { - int i; + ow = ih; + oh = iw >> 1; - ow = ih; - oh = iw >> 1; + align_buffer_16(input, iw * ih) + align_buffer_16(output_a1, ow * oh) + align_buffer_16(output_b1, ow * oh) + align_buffer_16(output_a2, iw * ih) + align_buffer_16(output_b2, iw * ih) - align_buffer_16(input, iw * ih) - align_buffer_16(output_a1, ow * oh) - align_buffer_16(output_b1, ow * oh) - align_buffer_16(output_a2, iw * ih) - align_buffer_16(output_b2, iw * ih) + for (i = 0; i < iw * ih; i += 2) { + input[i] = i >> 1; + input[i + 1] = -(i >> 1); + } - for (i = 0; i < iw * ih; i += 2) { - input[i] = i >> 1; - input[i + 1] = -(i >> 1); - } + TransposeUV(input, iw, output_a1, ow, output_b1, ow, iw >> 1, ih); - TransposeUV(input, iw, output_a1, ow, output_b1, ow, iw >> 1, ih); + TransposePlane(output_a1, ow, output_a2, oh, ow, oh); + TransposePlane(output_b1, ow, output_b2, oh, ow, oh); - TransposePlane(output_a1, ow, output_a2, oh, ow, oh); - TransposePlane(output_b1, ow, output_b2, oh, ow, oh); - - for (i = 0; i < iw * ih; i += 2) { - if (input[i] != output_a2[i >> 1]) { - err++; - } - if (input[i + 1] != output_b2[i >> 1]) { - err++; - } - } - - if (err) { - printf("input %dx%d \n", iw, ih); - PrintArray(input, iw, ih); - - printf("transpose 1\n"); - PrintArray(output_a1, ow, oh); - PrintArray(output_b1, ow, oh); - - printf("transpose 2\n"); - PrintArray(output_a2, oh, ow); - PrintArray(output_b2, oh, ow); - } - - free_aligned_buffer_16(input) - free_aligned_buffer_16(output_a1) - free_aligned_buffer_16(output_b1) - free_aligned_buffer_16(output_a2) - free_aligned_buffer_16(output_b2) + for (i = 0; i < iw * ih; i += 2) { + if (input[i] != output_a2[i >> 1]) { + err++; + } + if (input[i + 1] != output_b2[i >> 1]) { + err++; } } + if (err) { + printf("input %dx%d \n", iw, ih); + PrintArray(input, iw, ih); + + printf("transpose 1\n"); + PrintArray(output_a1, ow, oh); + PrintArray(output_b1, ow, oh); + + printf("transpose 2\n"); + PrintArray(output_a2, oh, ow); + PrintArray(output_b2, oh, ow); + } + + free_aligned_buffer_16(input) + free_aligned_buffer_16(output_a1) + free_aligned_buffer_16(output_b1) + free_aligned_buffer_16(output_a2) + free_aligned_buffer_16(output_b2) + EXPECT_EQ(0, err); } TEST_F(libyuvTest, RotatePlane90) { int iw, ih, ow, oh; int err = 0; + iw = benchmark_width_; + ih = benchmark_height_; + int i; - for (iw = 8; iw < rotate_max_w_ && !err; ++iw) { - for (ih = 8; ih < rotate_max_h_ && !err; ++ih) { - int i; + ow = ih; + oh = iw; - ow = ih; - oh = iw; + align_buffer_16(input, iw * ih) + align_buffer_16(output_0, iw * ih) + align_buffer_16(output_90, ow * oh) + align_buffer_16(output_180, iw * ih) + align_buffer_16(output_270, ow * oh) - align_buffer_16(input, iw * ih) - align_buffer_16(output_0, iw * ih) - align_buffer_16(output_90, ow * oh) - align_buffer_16(output_180, iw * ih) - align_buffer_16(output_270, ow * oh) + for (i = 0; i < iw * ih; ++i) { + input[i] = i; + } - for (i = 0; i < iw * ih; ++i) { - input[i] = i; - } + RotatePlane90(input, iw, output_90, ow, iw, ih); + RotatePlane90(output_90, ow, output_180, oh, ow, oh); + RotatePlane90(output_180, oh, output_270, ow, oh, ow); + RotatePlane90(output_270, ow, output_0, iw, ow, oh); - RotatePlane90(input, iw, output_90, ow, iw, ih); - RotatePlane90(output_90, ow, output_180, oh, ow, oh); - RotatePlane90(output_180, oh, output_270, ow, oh, ow); - RotatePlane90(output_270, ow, output_0, iw, ow, oh); - - for (i = 0; i < iw * ih; ++i) { - if (input[i] != output_0[i]) { - err++; - } - } - - if (err) { - printf("input %dx%d \n", iw, ih); - PrintArray(input, iw, ih); - - printf("output 90\n"); - PrintArray(output_90, ow, oh); - - printf("output 180\n"); - PrintArray(output_180, iw, ih); - - printf("output 270\n"); - PrintArray(output_270, ow, oh); - - printf("output 0\n"); - PrintArray(output_0, iw, ih); - } - - free_aligned_buffer_16(input) - free_aligned_buffer_16(output_0) - free_aligned_buffer_16(output_90) - free_aligned_buffer_16(output_180) - free_aligned_buffer_16(output_270) + for (i = 0; i < iw * ih; ++i) { + if (input[i] != output_0[i]) { + err++; } } + if (err) { + printf("input %dx%d \n", iw, ih); + PrintArray(input, iw, ih); + + printf("output 90\n"); + PrintArray(output_90, ow, oh); + + printf("output 180\n"); + PrintArray(output_180, iw, ih); + + printf("output 270\n"); + PrintArray(output_270, ow, oh); + + printf("output 0\n"); + PrintArray(output_0, iw, ih); + } + + free_aligned_buffer_16(input) + free_aligned_buffer_16(output_0) + free_aligned_buffer_16(output_90) + free_aligned_buffer_16(output_180) + free_aligned_buffer_16(output_270) + EXPECT_EQ(0, err); } TEST_F(libyuvTest, RotateUV90) { int iw, ih, ow, oh; int err = 0; + iw = benchmark_width_; + ih = benchmark_height_; + int i; - for (iw = 16; iw < rotate_max_w_ && !err; iw += 2) { - for (ih = 8; ih < rotate_max_h_ && !err; ++ih) { - int i; + ow = ih; + oh = iw >> 1; - ow = ih; - oh = iw >> 1; + align_buffer_16(input, iw * ih) + align_buffer_16(output_0_u, ow * oh) + align_buffer_16(output_0_v, ow * oh) + align_buffer_16(output_90_u, ow * oh) + align_buffer_16(output_90_v, ow * oh) + align_buffer_16(output_180_u, ow * oh) + align_buffer_16(output_180_v, ow * oh) - align_buffer_16(input, iw * ih) - align_buffer_16(output_0_u, ow * oh) - align_buffer_16(output_0_v, ow * oh) - align_buffer_16(output_90_u, ow * oh) - align_buffer_16(output_90_v, ow * oh) - align_buffer_16(output_180_u, ow * oh) - align_buffer_16(output_180_v, ow * oh) + for (i = 0; i < iw * ih; i += 2) { + input[i] = i >> 1; + input[i + 1] = -(i >> 1); + } - for (i = 0; i < iw * ih; i += 2) { - input[i] = i >> 1; - input[i + 1] = -(i >> 1); - } + RotateUV90(input, iw, output_90_u, ow, output_90_v, ow, iw >> 1, ih); - RotateUV90(input, iw, output_90_u, ow, output_90_v, ow, iw >> 1, ih); + RotatePlane90(output_90_u, ow, output_180_u, oh, ow, oh); + RotatePlane90(output_90_v, ow, output_180_v, oh, ow, oh); - RotatePlane90(output_90_u, ow, output_180_u, oh, ow, oh); - RotatePlane90(output_90_v, ow, output_180_v, oh, ow, oh); + RotatePlane180(output_180_u, ow, output_0_u, ow, ow, oh); + RotatePlane180(output_180_v, ow, output_0_v, ow, ow, oh); - RotatePlane180(output_180_u, ow, output_0_u, ow, ow, oh); - RotatePlane180(output_180_v, ow, output_0_v, ow, ow, oh); - - for (i = 0; i < (ow * oh); ++i) { - if (output_0_u[i] != (uint8)i) { - err++; - } - if (output_0_v[i] != (uint8)(-i)) { - err++; - } - } - - if (err) { - printf("input %dx%d \n", iw, ih); - PrintArray(input, iw, ih); - - printf("output 90_u\n"); - PrintArray(output_90_u, ow, oh); - - printf("output 90_v\n"); - PrintArray(output_90_v, ow, oh); - - printf("output 180_u\n"); - PrintArray(output_180_u, oh, ow); - - printf("output 180_v\n"); - PrintArray(output_180_v, oh, ow); - - printf("output 0_u\n"); - PrintArray(output_0_u, oh, ow); - - printf("output 0_v\n"); - PrintArray(output_0_v, oh, ow); - } - - free_aligned_buffer_16(input) - free_aligned_buffer_16(output_0_u) - free_aligned_buffer_16(output_0_v) - free_aligned_buffer_16(output_90_u) - free_aligned_buffer_16(output_90_v) - free_aligned_buffer_16(output_180_u) - free_aligned_buffer_16(output_180_v) + for (i = 0; i < (ow * oh); ++i) { + if (output_0_u[i] != (uint8)i) { + err++; + } + if (output_0_v[i] != (uint8)(-i)) { + err++; } } + if (err) { + printf("input %dx%d \n", iw, ih); + PrintArray(input, iw, ih); + + printf("output 90_u\n"); + PrintArray(output_90_u, ow, oh); + + printf("output 90_v\n"); + PrintArray(output_90_v, ow, oh); + + printf("output 180_u\n"); + PrintArray(output_180_u, oh, ow); + + printf("output 180_v\n"); + PrintArray(output_180_v, oh, ow); + + printf("output 0_u\n"); + PrintArray(output_0_u, oh, ow); + + printf("output 0_v\n"); + PrintArray(output_0_v, oh, ow); + } + + free_aligned_buffer_16(input) + free_aligned_buffer_16(output_0_u) + free_aligned_buffer_16(output_0_v) + free_aligned_buffer_16(output_90_u) + free_aligned_buffer_16(output_90_v) + free_aligned_buffer_16(output_180_u) + free_aligned_buffer_16(output_180_v) + EXPECT_EQ(0, err); } TEST_F(libyuvTest, RotateUV180) { int iw, ih, ow, oh; int err = 0; + iw = benchmark_width_; + ih = benchmark_height_; + int i; - for (iw = 16; iw < rotate_max_w_ && !err; iw += 2) { - for (ih = 8; ih < rotate_max_h_ && !err; ++ih) { - int i; + ow = iw >> 1; + oh = ih; - ow = iw >> 1; - oh = ih; + align_buffer_16(input, iw * ih) + align_buffer_16(output_0_u, ow * oh) + align_buffer_16(output_0_v, ow * oh) + align_buffer_16(output_90_u, ow * oh) + align_buffer_16(output_90_v, ow * oh) + align_buffer_16(output_180_u, ow * oh) + align_buffer_16(output_180_v, ow * oh) - align_buffer_16(input, iw * ih) - align_buffer_16(output_0_u, ow * oh) - align_buffer_16(output_0_v, ow * oh) - align_buffer_16(output_90_u, ow * oh) - align_buffer_16(output_90_v, ow * oh) - align_buffer_16(output_180_u, ow * oh) - align_buffer_16(output_180_v, ow * oh) + for (i = 0; i < iw * ih; i += 2) { + input[i] = i >> 1; + input[i + 1] = -(i >> 1); + } - for (i = 0; i < iw * ih; i += 2) { - input[i] = i >> 1; - input[i + 1] = -(i >> 1); - } + RotateUV180(input, iw, output_180_u, ow, output_180_v, ow, iw >> 1, ih); - RotateUV180(input, iw, output_180_u, ow, output_180_v, ow, iw >> 1, ih); + RotatePlane90(output_180_u, ow, output_90_u, oh, ow, oh); + RotatePlane90(output_180_v, ow, output_90_v, oh, ow, oh); - RotatePlane90(output_180_u, ow, output_90_u, oh, ow, oh); - RotatePlane90(output_180_v, ow, output_90_v, oh, ow, oh); + RotatePlane90(output_90_u, oh, output_0_u, ow, oh, ow); + RotatePlane90(output_90_v, oh, output_0_v, ow, oh, ow); - RotatePlane90(output_90_u, oh, output_0_u, ow, oh, ow); - RotatePlane90(output_90_v, oh, output_0_v, ow, oh, ow); - - for (i = 0; i < (ow * oh); ++i) { - if (output_0_u[i] != (uint8)i) { - err++; - } - if (output_0_v[i] != (uint8)(-i)) { - err++; - } - } - - if (err) { - printf("input %dx%d \n", iw, ih); - PrintArray(input, iw, ih); - - printf("output 180_u\n"); - PrintArray(output_180_u, oh, ow); - - printf("output 180_v\n"); - PrintArray(output_180_v, oh, ow); - - printf("output 90_u\n"); - PrintArray(output_90_u, oh, ow); - - printf("output 90_v\n"); - PrintArray(output_90_v, oh, ow); - - printf("output 0_u\n"); - PrintArray(output_0_u, ow, oh); - - printf("output 0_v\n"); - PrintArray(output_0_v, ow, oh); - } - - free_aligned_buffer_16(input) - free_aligned_buffer_16(output_0_u) - free_aligned_buffer_16(output_0_v) - free_aligned_buffer_16(output_90_u) - free_aligned_buffer_16(output_90_v) - free_aligned_buffer_16(output_180_u) - free_aligned_buffer_16(output_180_v) + for (i = 0; i < (ow * oh); ++i) { + if (output_0_u[i] != (uint8)i) { + err++; + } + if (output_0_v[i] != (uint8)(-i)) { + err++; } } + if (err) { + printf("input %dx%d \n", iw, ih); + PrintArray(input, iw, ih); + + printf("output 180_u\n"); + PrintArray(output_180_u, oh, ow); + + printf("output 180_v\n"); + PrintArray(output_180_v, oh, ow); + + printf("output 90_u\n"); + PrintArray(output_90_u, oh, ow); + + printf("output 90_v\n"); + PrintArray(output_90_v, oh, ow); + + printf("output 0_u\n"); + PrintArray(output_0_u, ow, oh); + + printf("output 0_v\n"); + PrintArray(output_0_v, ow, oh); + } + + free_aligned_buffer_16(input) + free_aligned_buffer_16(output_0_u) + free_aligned_buffer_16(output_0_v) + free_aligned_buffer_16(output_90_u) + free_aligned_buffer_16(output_90_v) + free_aligned_buffer_16(output_180_u) + free_aligned_buffer_16(output_180_v) + EXPECT_EQ(0, err); } TEST_F(libyuvTest, RotateUV270) { int iw, ih, ow, oh; int err = 0; + iw = benchmark_width_; + ih = benchmark_height_; + int i; - for (iw = 16; iw < rotate_max_w_ && !err; iw += 2) { - for (ih = 8; ih < rotate_max_h_ && !err; ++ih) { - int i; + ow = ih; + oh = iw >> 1; - ow = ih; - oh = iw >> 1; + align_buffer_16(input, iw * ih) + align_buffer_16(output_0_u, ow * oh) + align_buffer_16(output_0_v, ow * oh) + align_buffer_16(output_270_u, ow * oh) + align_buffer_16(output_270_v, ow * oh) + align_buffer_16(output_180_u, ow * oh) + align_buffer_16(output_180_v, ow * oh) - align_buffer_16(input, iw * ih) - align_buffer_16(output_0_u, ow * oh) - align_buffer_16(output_0_v, ow * oh) - align_buffer_16(output_270_u, ow * oh) - align_buffer_16(output_270_v, ow * oh) - align_buffer_16(output_180_u, ow * oh) - align_buffer_16(output_180_v, ow * oh) + for (i = 0; i < iw * ih; i += 2) { + input[i] = i >> 1; + input[i + 1] = -(i >> 1); + } - for (i = 0; i < iw * ih; i += 2) { - input[i] = i >> 1; - input[i + 1] = -(i >> 1); - } + RotateUV270(input, iw, output_270_u, ow, output_270_v, ow, + iw >> 1, ih); - RotateUV270(input, iw, output_270_u, ow, output_270_v, ow, - iw >> 1, ih); + RotatePlane270(output_270_u, ow, output_180_u, oh, ow, oh); + RotatePlane270(output_270_v, ow, output_180_v, oh, ow, oh); - RotatePlane270(output_270_u, ow, output_180_u, oh, ow, oh); - RotatePlane270(output_270_v, ow, output_180_v, oh, ow, oh); + RotatePlane180(output_180_u, ow, output_0_u, ow, ow, oh); + RotatePlane180(output_180_v, ow, output_0_v, ow, ow, oh); - RotatePlane180(output_180_u, ow, output_0_u, ow, ow, oh); - RotatePlane180(output_180_v, ow, output_0_v, ow, ow, oh); - - for (i = 0; i < (ow * oh); ++i) { - if (output_0_u[i] != (uint8)i) { - err++; - } - if (output_0_v[i] != (uint8)(-i)) { - err++; - } - } - - if (err) { - printf("input %dx%d \n", iw, ih); - PrintArray(input, iw, ih); - - printf("output 270_u\n"); - PrintArray(output_270_u, ow, oh); - - printf("output 270_v\n"); - PrintArray(output_270_v, ow, oh); - - printf("output 180_u\n"); - PrintArray(output_180_u, oh, ow); - - printf("output 180_v\n"); - PrintArray(output_180_v, oh, ow); - - printf("output 0_u\n"); - PrintArray(output_0_u, oh, ow); - - printf("output 0_v\n"); - PrintArray(output_0_v, oh, ow); - } - - free_aligned_buffer_16(input) - free_aligned_buffer_16(output_0_u) - free_aligned_buffer_16(output_0_v) - free_aligned_buffer_16(output_270_u) - free_aligned_buffer_16(output_270_v) - free_aligned_buffer_16(output_180_u) - free_aligned_buffer_16(output_180_v) + for (i = 0; i < (ow * oh); ++i) { + if (output_0_u[i] != (uint8)i) { + err++; + } + if (output_0_v[i] != (uint8)(-i)) { + err++; } } + if (err) { + printf("input %dx%d \n", iw, ih); + PrintArray(input, iw, ih); + + printf("output 270_u\n"); + PrintArray(output_270_u, ow, oh); + + printf("output 270_v\n"); + PrintArray(output_270_v, ow, oh); + + printf("output 180_u\n"); + PrintArray(output_180_u, oh, ow); + + printf("output 180_v\n"); + PrintArray(output_180_v, oh, ow); + + printf("output 0_u\n"); + PrintArray(output_0_u, oh, ow); + + printf("output 0_v\n"); + PrintArray(output_0_v, oh, ow); + } + + free_aligned_buffer_16(input) + free_aligned_buffer_16(output_0_u) + free_aligned_buffer_16(output_0_v) + free_aligned_buffer_16(output_270_u) + free_aligned_buffer_16(output_270_v) + free_aligned_buffer_16(output_180_u) + free_aligned_buffer_16(output_180_v) + EXPECT_EQ(0, err); } TEST_F(libyuvTest, RotatePlane180) { int iw, ih, ow, oh; int err = 0; + iw = benchmark_width_; + ih = benchmark_height_; + int i; - for (iw = 8; iw < rotate_max_w_ && !err; ++iw) - for (ih = 8; ih < rotate_max_h_ && !err; ++ih) { - int i; + ow = iw; + oh = ih; - ow = iw; - oh = ih; + align_buffer_16(input, iw * ih) + align_buffer_16(output_0, iw * ih) + align_buffer_16(output_180, iw * ih) - align_buffer_16(input, iw * ih) - align_buffer_16(output_0, iw * ih) - align_buffer_16(output_180, iw * ih) + for (i = 0; i < iw * ih; ++i) { + input[i] = i; + } - for (i = 0; i < iw * ih; ++i) { - input[i] = i; - } + RotatePlane180(input, iw, output_180, ow, iw, ih); + RotatePlane180(output_180, ow, output_0, iw, ow, oh); - RotatePlane180(input, iw, output_180, ow, iw, ih); - RotatePlane180(output_180, ow, output_0, iw, ow, oh); - - for (i = 0; i < iw * ih; ++i) { - if (input[i] != output_0[i]) { - err++; - } - } - - if (err) { - printf("input %dx%d \n", iw, ih); - PrintArray(input, iw, ih); - - printf("output 180\n"); - PrintArray(output_180, iw, ih); - - printf("output 0\n"); - PrintArray(output_0, iw, ih); - } - - free_aligned_buffer_16(input) - free_aligned_buffer_16(output_0) - free_aligned_buffer_16(output_180) + for (i = 0; i < iw * ih; ++i) { + if (input[i] != output_0[i]) { + err++; } + } + + if (err) { + printf("input %dx%d \n", iw, ih); + PrintArray(input, iw, ih); + + printf("output 180\n"); + PrintArray(output_180, iw, ih); + + printf("output 0\n"); + PrintArray(output_0, iw, ih); + } + + free_aligned_buffer_16(input) + free_aligned_buffer_16(output_0) + free_aligned_buffer_16(output_180) EXPECT_EQ(0, err); } @@ -475,105 +455,100 @@ TEST_F(libyuvTest, RotatePlane180) { TEST_F(libyuvTest, RotatePlane270) { int iw, ih, ow, oh; int err = 0; + iw = benchmark_width_; + ih = benchmark_height_; + int i; - for (iw = 8; iw < rotate_max_w_ && !err; ++iw) { - for (ih = 8; ih < rotate_max_h_ && !err; ++ih) { - int i; + ow = ih; + oh = iw; - ow = ih; - oh = iw; + align_buffer_16(input, iw * ih) + align_buffer_16(output_0, iw * ih) + align_buffer_16(output_90, ow * oh) + align_buffer_16(output_180, iw * ih) + align_buffer_16(output_270, ow * oh) - align_buffer_16(input, iw * ih) - align_buffer_16(output_0, iw * ih) - align_buffer_16(output_90, ow * oh) - align_buffer_16(output_180, iw * ih) - align_buffer_16(output_270, ow * oh) + for (i = 0; i < iw * ih; ++i) + input[i] = i; - for (i = 0; i < iw * ih; ++i) - input[i] = i; + RotatePlane270(input, iw, output_270, ow, iw, ih); + RotatePlane270(output_270, ow, output_180, oh, ow, oh); + RotatePlane270(output_180, oh, output_90, ow, oh, ow); + RotatePlane270(output_90, ow, output_0, iw, ow, oh); - RotatePlane270(input, iw, output_270, ow, iw, ih); - RotatePlane270(output_270, ow, output_180, oh, ow, oh); - RotatePlane270(output_180, oh, output_90, ow, oh, ow); - RotatePlane270(output_90, ow, output_0, iw, ow, oh); - - for (i = 0; i < iw * ih; ++i) { - if (input[i] != output_0[i]) { - err++; - } - } - - if (err) { - printf("input %dx%d \n", iw, ih); - PrintArray(input, iw, ih); - - printf("output 270\n"); - PrintArray(output_270, ow, oh); - - printf("output 180\n"); - PrintArray(output_180, iw, ih); - - printf("output 90\n"); - PrintArray(output_90, ow, oh); - - printf("output 0\n"); - PrintArray(output_0, iw, ih); - } - - free_aligned_buffer_16(input) - free_aligned_buffer_16(output_0) - free_aligned_buffer_16(output_90) - free_aligned_buffer_16(output_180) - free_aligned_buffer_16(output_270) + for (i = 0; i < iw * ih; ++i) { + if (input[i] != output_0[i]) { + err++; } } + if (err) { + printf("input %dx%d \n", iw, ih); + PrintArray(input, iw, ih); + + printf("output 270\n"); + PrintArray(output_270, ow, oh); + + printf("output 180\n"); + PrintArray(output_180, iw, ih); + + printf("output 90\n"); + PrintArray(output_90, ow, oh); + + printf("output 0\n"); + PrintArray(output_0, iw, ih); + } + + free_aligned_buffer_16(input) + free_aligned_buffer_16(output_0) + free_aligned_buffer_16(output_90) + free_aligned_buffer_16(output_180) + free_aligned_buffer_16(output_270) + EXPECT_EQ(0, err); } TEST_F(libyuvTest, RotatePlane90and270) { int iw, ih, ow, oh; int err = 0; + iw = benchmark_width_; + ih = benchmark_height_; + int i; - for (iw = 16; iw < rotate_max_w_ && !err; iw += 4) - for (ih = 16; ih < rotate_max_h_ && !err; ih += 4) { - int i; + ow = ih; + oh = iw; - ow = ih; - oh = iw; + align_buffer_16(input, iw * ih) + align_buffer_16(output_0, iw * ih) + align_buffer_16(output_90, ow * oh) - align_buffer_16(input, iw * ih) - align_buffer_16(output_0, iw * ih) - align_buffer_16(output_90, ow * oh) + for (i = 0; i < iw * ih; ++i) { + input[i] = i; + } - for (i = 0; i < iw * ih; ++i) { - input[i] = i; - } + RotatePlane90(input, iw, output_90, ow, iw, ih); + RotatePlane270(output_90, ow, output_0, iw, ow, oh); - RotatePlane90(input, iw, output_90, ow, iw, ih); - RotatePlane270(output_90, ow, output_0, iw, ow, oh); - - for (i = 0; i < iw * ih; ++i) { - if (input[i] != output_0[i]) { - err++; - } - } - - if (err) { - printf("intput %dx%d\n", iw, ih); - PrintArray(input, iw, ih); - - printf("output \n"); - PrintArray(output_90, ow, oh); - - printf("output \n"); - PrintArray(output_0, iw, ih); - } - - free_aligned_buffer_16(input) - free_aligned_buffer_16(output_0) - free_aligned_buffer_16(output_90) + for (i = 0; i < iw * ih; ++i) { + if (input[i] != output_0[i]) { + err++; } + } + + if (err) { + printf("intput %dx%d\n", iw, ih); + PrintArray(input, iw, ih); + + printf("output \n"); + PrintArray(output_90, ow, oh); + + printf("output \n"); + PrintArray(output_0, iw, ih); + } + + free_aligned_buffer_16(input) + free_aligned_buffer_16(output_0) + free_aligned_buffer_16(output_90) EXPECT_EQ(0, err); } @@ -581,58 +556,56 @@ TEST_F(libyuvTest, RotatePlane90and270) { TEST_F(libyuvTest, RotatePlane90Pitch) { int iw, ih; int err = 0; + iw = benchmark_width_; + ih = benchmark_height_; + int i; - for (iw = 16; iw < rotate_max_w_ && !err; iw += 4) - for (ih = 16; ih < rotate_max_h_ && !err; ih += 4) { - int i; + int ow = ih; + int oh = iw; - int ow = ih; - int oh = iw; + align_buffer_16(input, iw * ih) + align_buffer_16(output_0, iw * ih) + align_buffer_16(output_90, ow * oh) - align_buffer_16(input, iw * ih) - align_buffer_16(output_0, iw * ih) - align_buffer_16(output_90, ow * oh) + for (i = 0; i < iw * ih; ++i) { + input[i] = i; + } - for (i = 0; i < iw * ih; ++i) { - input[i] = i; - } + RotatePlane90(input, iw, + output_90 + (ow >> 1), ow, + iw >> 1, ih >> 1); + RotatePlane90(input + (iw >> 1), iw, + output_90 + (ow >> 1) + ow * (oh >> 1), ow, + iw >> 1, ih >> 1); + RotatePlane90(input + iw * (ih >> 1), iw, + output_90, ow, + iw >> 1, ih >> 1); + RotatePlane90(input + (iw >> 1) + iw * (ih >> 1), iw, + output_90 + ow * (oh >> 1), ow, + iw >> 1, ih >> 1); - RotatePlane90(input, iw, - output_90 + (ow >> 1), ow, - iw >> 1, ih >> 1); - RotatePlane90(input + (iw >> 1), iw, - output_90 + (ow >> 1) + ow * (oh >> 1), ow, - iw >> 1, ih >> 1); - RotatePlane90(input + iw * (ih >> 1), iw, - output_90, ow, - iw >> 1, ih >> 1); - RotatePlane90(input + (iw >> 1) + iw * (ih >> 1), iw, - output_90 + ow * (oh >> 1), ow, - iw >> 1, ih >> 1); + RotatePlane270(output_90, ih, output_0, iw, ow, oh); - RotatePlane270(output_90, ih, output_0, iw, ow, oh); - - for (i = 0; i < iw * ih; ++i) { - if (input[i] != output_0[i]) { - err++; - } - } - - if (err) { - printf("intput %dx%d\n", iw, ih); - PrintArray(input, iw, ih); - - printf("output \n"); - PrintArray(output_90, ow, oh); - - printf("output \n"); - PrintArray(output_0, iw, ih); - } - - free_aligned_buffer_16(input) - free_aligned_buffer_16(output_0) - free_aligned_buffer_16(output_90) + for (i = 0; i < iw * ih; ++i) { + if (input[i] != output_0[i]) { + err++; } + } + + if (err) { + printf("intput %dx%d\n", iw, ih); + PrintArray(input, iw, ih); + + printf("output \n"); + PrintArray(output_90, ow, oh); + + printf("output \n"); + PrintArray(output_0, iw, ih); + } + + free_aligned_buffer_16(input) + free_aligned_buffer_16(output_0) + free_aligned_buffer_16(output_90) EXPECT_EQ(0, err); } @@ -640,60 +613,57 @@ TEST_F(libyuvTest, RotatePlane90Pitch) { TEST_F(libyuvTest, RotatePlane270Pitch) { int iw, ih, ow, oh; int err = 0; + iw = benchmark_width_; + ih = benchmark_height_; + int i; - for (iw = 16; iw < rotate_max_w_ && !err; iw += 4) { - for (ih = 16; ih < rotate_max_h_ && !err; ih += 4) { - int i; + ow = ih; + oh = iw; - ow = ih; - oh = iw; + align_buffer_16(input, iw * ih) + align_buffer_16(output_0, iw * ih) + align_buffer_16(output_270, ow * oh) - align_buffer_16(input, iw * ih) - align_buffer_16(output_0, iw * ih) - align_buffer_16(output_270, ow * oh) + for (i = 0; i < iw * ih; ++i) { + input[i] = i; + } - for (i = 0; i < iw * ih; ++i) { - input[i] = i; - } + RotatePlane270(input, iw, + output_270 + ow * (oh >> 1), ow, + iw >> 1, ih >> 1); + RotatePlane270(input + (iw >> 1), iw, + output_270, ow, + iw >> 1, ih >> 1); + RotatePlane270(input + iw * (ih >> 1), iw, + output_270 + (ow >> 1) + ow * (oh >> 1), ow, + iw >> 1, ih >> 1); + RotatePlane270(input + (iw >> 1) + iw * (ih >> 1), iw, + output_270 + (ow >> 1), ow, + iw >> 1, ih >> 1); - RotatePlane270(input, iw, - output_270 + ow * (oh >> 1), ow, - iw >> 1, ih >> 1); - RotatePlane270(input + (iw >> 1), iw, - output_270, ow, - iw >> 1, ih >> 1); - RotatePlane270(input + iw * (ih >> 1), iw, - output_270 + (ow >> 1) + ow * (oh >> 1), ow, - iw >> 1, ih >> 1); - RotatePlane270(input + (iw >> 1) + iw * (ih >> 1), iw, - output_270 + (ow >> 1), ow, - iw >> 1, ih >> 1); + RotatePlane90(output_270, ih, output_0, iw, ow, oh); - RotatePlane90(output_270, ih, output_0, iw, ow, oh); - - for (i = 0; i < iw * ih; ++i) { - if (input[i] != output_0[i]) { - err++; - } - } - - if (err) { - printf("intput %dx%d\n", iw, ih); - PrintArray(input, iw, ih); - - printf("output \n"); - PrintArray(output_270, ow, oh); - - printf("output \n"); - PrintArray(output_0, iw, ih); - } - - free_aligned_buffer_16(input) - free_aligned_buffer_16(output_0) - free_aligned_buffer_16(output_270) + for (i = 0; i < iw * ih; ++i) { + if (input[i] != output_0[i]) { + err++; } } + if (err) { + printf("intput %dx%d\n", iw, ih); + PrintArray(input, iw, ih); + + printf("output \n"); + PrintArray(output_270, ow, oh); + + printf("output \n"); + PrintArray(output_0, iw, ih); + } + + free_aligned_buffer_16(input) + free_aligned_buffer_16(output_0) + free_aligned_buffer_16(output_270) + EXPECT_EQ(0, err); } diff --git a/unit_test/unit_test.cc b/unit_test/unit_test.cc index b3ceb8f0a..b0b06e3ff 100644 --- a/unit_test/unit_test.cc +++ b/unit_test/unit_test.cc @@ -19,11 +19,17 @@ #define BENCHMARK_ITERATIONS 1 libyuvTest::libyuvTest() : rotate_max_w_(128), rotate_max_h_(128), - benchmark_iterations_(BENCHMARK_ITERATIONS), benchmark_width_(1280), - benchmark_height_(720) { + benchmark_iterations_(BENCHMARK_ITERATIONS), benchmark_width_(128), + benchmark_height_(72) { const char* repeat = getenv("LIBYUV_REPEAT"); if (repeat) { benchmark_iterations_ = atoi(repeat); // NOLINT + // For quicker unittests, default is 128 x 72. But when benchmarking, + // default to 720p. Allow size to specify. + if (benchmark_iterations_ > 1) { + benchmark_width_ = 1280; + benchmark_height_ = 720; + } } const char* width = getenv("LIBYUV_WIDTH"); if (width) {