Commit bd4fcb98 authored by fbarchard@google.com's avatar fbarchard@google.com

Switch to 128x72 for default testing size when not benchmarking.

BUG=none
TEST=none
Review URL: https://webrtc-codereview.appspot.com/935004

git-svn-id: http://libyuv.googlecode.com/svn/trunk@442 16f28f9a-4ce2-e073-06de-1de4eb20be90
parent 3bb60b37
Name: libyuv Name: libyuv
URL: http://code.google.com/p/libyuv/ URL: http://code.google.com/p/libyuv/
Version: 439 Version: 442
License: BSD License: BSD
License File: LICENSE License File: LICENSE
......
...@@ -11,6 +11,6 @@ ...@@ -11,6 +11,6 @@
#ifndef INCLUDE_LIBYUV_VERSION_H_ // NOLINT #ifndef INCLUDE_LIBYUV_VERSION_H_ // NOLINT
#define INCLUDE_LIBYUV_VERSION_H_ #define INCLUDE_LIBYUV_VERSION_H_
#define LIBYUV_VERSION 439 #define LIBYUV_VERSION 442
#endif // INCLUDE_LIBYUV_VERSION_H_ NOLINT #endif // INCLUDE_LIBYUV_VERSION_H_ NOLINT
...@@ -30,33 +30,9 @@ static uint32 ReferenceHashDjb2(const uint8* src, uint64 count, uint32 seed) { ...@@ -30,33 +30,9 @@ static uint32 ReferenceHashDjb2(const uint8* src, uint64 count, uint32 seed) {
return hash; 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) { TEST_F(libyuvTest, BenchmakDjb2_C) {
const int kMaxTest = benchmark_width_ * benchmark_height_; const int kMaxTest = benchmark_width_ * benchmark_height_;
align_buffer_16(src_a, kMaxTest) align_buffer_16(src_a, kMaxTest)
for (int i = 0; i < kMaxTest; ++i) { for (int i = 0; i < kMaxTest; ++i) {
src_a[i] = i; src_a[i] = i;
} }
...@@ -90,7 +66,6 @@ TEST_F(libyuvTest, BenchmakDjb2_OPT) { ...@@ -90,7 +66,6 @@ TEST_F(libyuvTest, BenchmakDjb2_OPT) {
TEST_F(libyuvTest, BenchmakDjb2_Unaligned_OPT) { TEST_F(libyuvTest, BenchmakDjb2_Unaligned_OPT) {
const int kMaxTest = benchmark_width_ * benchmark_height_; const int kMaxTest = benchmark_width_ * benchmark_height_;
align_buffer_16(src_a, kMaxTest + 1) align_buffer_16(src_a, kMaxTest + 1)
for (int i = 0; i < kMaxTest; ++i) { for (int i = 0; i < kMaxTest; ++i) {
src_a[i + 1] = i; src_a[i + 1] = i;
} }
...@@ -107,6 +82,8 @@ TEST_F(libyuvTest, BenchmarkSumSquareError_C) { ...@@ -107,6 +82,8 @@ TEST_F(libyuvTest, BenchmarkSumSquareError_C) {
const int kMaxWidth = 4096 * 3; const int kMaxWidth = 4096 * 3;
align_buffer_16(src_a, kMaxWidth) align_buffer_16(src_a, kMaxWidth)
align_buffer_16(src_b, kMaxWidth) align_buffer_16(src_b, kMaxWidth)
memset(src_a, 0, kMaxWidth);
memset(src_b, 0, kMaxWidth);
MaskCpuFlags(0); MaskCpuFlags(0);
memcpy(src_a, "test0123test4567", 16); memcpy(src_a, "test0123test4567", 16);
...@@ -118,15 +95,17 @@ TEST_F(libyuvTest, BenchmarkSumSquareError_C) { ...@@ -118,15 +95,17 @@ TEST_F(libyuvTest, BenchmarkSumSquareError_C) {
src_a[i] = i; src_a[i] = i;
src_b[i] = i; src_b[i] = i;
} }
memset(src_a, 0, kMaxWidth);
memset(src_b, 0, kMaxWidth);
int count = benchmark_iterations_ * int count = benchmark_iterations_ *
benchmark_width_ * benchmark_height_ / kMaxWidth; (benchmark_width_ * benchmark_height_ + kMaxWidth - 1) / kMaxWidth;
for (int i = 0; i < count; ++i) { for (int i = 0; i < count; ++i) {
h1 = ComputeSumSquareError(src_a, src_b, kMaxWidth); h1 = ComputeSumSquareError(src_a, src_b, kMaxWidth);
} }
MaskCpuFlags(-1); MaskCpuFlags(-1);
EXPECT_EQ(h1, 0); EXPECT_EQ(0, h1);
free_aligned_buffer_16(src_a) free_aligned_buffer_16(src_a)
free_aligned_buffer_16(src_b) free_aligned_buffer_16(src_b)
...@@ -136,6 +115,8 @@ TEST_F(libyuvTest, BenchmarkSumSquareError_OPT) { ...@@ -136,6 +115,8 @@ TEST_F(libyuvTest, BenchmarkSumSquareError_OPT) {
const int kMaxWidth = 4096 * 3; const int kMaxWidth = 4096 * 3;
align_buffer_16(src_a, kMaxWidth) align_buffer_16(src_a, kMaxWidth)
align_buffer_16(src_b, kMaxWidth) align_buffer_16(src_b, kMaxWidth)
memset(src_a, 0, kMaxWidth);
memset(src_b, 0, kMaxWidth);
memcpy(src_a, "test0123test4567", 16); memcpy(src_a, "test0123test4567", 16);
memcpy(src_b, "tick0123tock4567", 16); memcpy(src_b, "tick0123tock4567", 16);
...@@ -146,14 +127,16 @@ TEST_F(libyuvTest, BenchmarkSumSquareError_OPT) { ...@@ -146,14 +127,16 @@ TEST_F(libyuvTest, BenchmarkSumSquareError_OPT) {
src_a[i] = i; src_a[i] = i;
src_b[i] = i; src_b[i] = i;
} }
memset(src_a, 0, kMaxWidth);
memset(src_b, 0, kMaxWidth);
int count = benchmark_iterations_ * int count = benchmark_iterations_ *
benchmark_width_ * benchmark_height_ / kMaxWidth; (benchmark_width_ * benchmark_height_ + kMaxWidth - 1) / kMaxWidth;
for (int i = 0; i < count; ++i) { for (int i = 0; i < count; ++i) {
h1 = ComputeSumSquareError(src_a, src_b, kMaxWidth); 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_a)
free_aligned_buffer_16(src_b) free_aligned_buffer_16(src_b)
...@@ -163,14 +146,13 @@ TEST_F(libyuvTest, SumSquareError) { ...@@ -163,14 +146,13 @@ TEST_F(libyuvTest, SumSquareError) {
const int kMaxWidth = 4096 * 3; const int kMaxWidth = 4096 * 3;
align_buffer_16(src_a, kMaxWidth) align_buffer_16(src_a, kMaxWidth)
align_buffer_16(src_b, kMaxWidth) align_buffer_16(src_b, kMaxWidth)
memset(src_a, 0, kMaxWidth); memset(src_a, 0, kMaxWidth);
memset(src_b, 0, kMaxWidth); memset(src_b, 0, kMaxWidth);
uint64 err; uint64 err;
err = ComputeSumSquareError(src_a, src_b, kMaxWidth); err = ComputeSumSquareError(src_a, src_b, kMaxWidth);
EXPECT_EQ(err, 0); EXPECT_EQ(0, err);
memset(src_a, 1, kMaxWidth); memset(src_a, 1, kMaxWidth);
err = ComputeSumSquareError(src_a, src_b, kMaxWidth); err = ComputeSumSquareError(src_a, src_b, kMaxWidth);
...@@ -181,7 +163,7 @@ TEST_F(libyuvTest, SumSquareError) { ...@@ -181,7 +163,7 @@ TEST_F(libyuvTest, SumSquareError) {
memset(src_b, 193, kMaxWidth); memset(src_b, 193, kMaxWidth);
err = ComputeSumSquareError(src_a, src_b, kMaxWidth); err = ComputeSumSquareError(src_a, src_b, kMaxWidth);
EXPECT_EQ(err, (kMaxWidth * 3 * 3)); EXPECT_EQ(kMaxWidth * 3 * 3, err);
srandom(time(NULL)); srandom(time(NULL));
...@@ -205,7 +187,6 @@ TEST_F(libyuvTest, SumSquareError) { ...@@ -205,7 +187,6 @@ TEST_F(libyuvTest, SumSquareError) {
TEST_F(libyuvTest, BenchmarkPsnr_C) { TEST_F(libyuvTest, BenchmarkPsnr_C) {
align_buffer_16(src_a, benchmark_width_ * benchmark_height_) align_buffer_16(src_a, benchmark_width_ * benchmark_height_)
align_buffer_16(src_b, benchmark_width_ * benchmark_height_) align_buffer_16(src_b, benchmark_width_ * benchmark_height_)
for (int i = 0; i < benchmark_width_ * benchmark_height_; ++i) { for (int i = 0; i < benchmark_width_ * benchmark_height_; ++i) {
src_a[i] = i; src_a[i] = i;
src_b[i] = i; src_b[i] = i;
...@@ -233,7 +214,6 @@ TEST_F(libyuvTest, BenchmarkPsnr_C) { ...@@ -233,7 +214,6 @@ TEST_F(libyuvTest, BenchmarkPsnr_C) {
TEST_F(libyuvTest, BenchmarkPsnr_OPT) { TEST_F(libyuvTest, BenchmarkPsnr_OPT) {
align_buffer_16(src_a, benchmark_width_ * benchmark_height_) align_buffer_16(src_a, benchmark_width_ * benchmark_height_)
align_buffer_16(src_b, benchmark_width_ * benchmark_height_) align_buffer_16(src_b, benchmark_width_ * benchmark_height_)
for (int i = 0; i < benchmark_width_ * benchmark_height_; ++i) { for (int i = 0; i < benchmark_width_ * benchmark_height_; ++i) {
src_a[i] = i; src_a[i] = i;
src_b[i] = i; src_b[i] = i;
...@@ -264,7 +244,6 @@ TEST_F(libyuvTest, Psnr) { ...@@ -264,7 +244,6 @@ TEST_F(libyuvTest, Psnr) {
const int kSrcStride = 2 * b + kSrcWidth; const int kSrcStride = 2 * b + kSrcWidth;
align_buffer_16(src_a, kSrcPlaneSize) align_buffer_16(src_a, kSrcPlaneSize)
align_buffer_16(src_b, kSrcPlaneSize) align_buffer_16(src_b, kSrcPlaneSize)
memset(src_a, 0, kSrcPlaneSize); memset(src_a, 0, kSrcPlaneSize);
memset(src_b, 0, kSrcPlaneSize); memset(src_b, 0, kSrcPlaneSize);
...@@ -337,7 +316,6 @@ TEST_F(libyuvTest, Psnr) { ...@@ -337,7 +316,6 @@ TEST_F(libyuvTest, Psnr) {
TEST_F(libyuvTest, BenchmarkSsim_C) { TEST_F(libyuvTest, BenchmarkSsim_C) {
align_buffer_16(src_a, benchmark_width_ * benchmark_height_) align_buffer_16(src_a, benchmark_width_ * benchmark_height_)
align_buffer_16(src_b, benchmark_width_ * benchmark_height_) align_buffer_16(src_b, benchmark_width_ * benchmark_height_)
for (int i = 0; i < benchmark_width_ * benchmark_height_; ++i) { for (int i = 0; i < benchmark_width_ * benchmark_height_; ++i) {
src_a[i] = i; src_a[i] = i;
src_b[i] = i; src_b[i] = i;
...@@ -356,7 +334,7 @@ TEST_F(libyuvTest, BenchmarkSsim_C) { ...@@ -356,7 +334,7 @@ TEST_F(libyuvTest, BenchmarkSsim_C) {
MaskCpuFlags(-1); 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_a)
free_aligned_buffer_16(src_b) free_aligned_buffer_16(src_b)
...@@ -365,7 +343,6 @@ TEST_F(libyuvTest, BenchmarkSsim_C) { ...@@ -365,7 +343,6 @@ TEST_F(libyuvTest, BenchmarkSsim_C) {
TEST_F(libyuvTest, BenchmarkSsim_OPT) { TEST_F(libyuvTest, BenchmarkSsim_OPT) {
align_buffer_16(src_a, benchmark_width_ * benchmark_height_) align_buffer_16(src_a, benchmark_width_ * benchmark_height_)
align_buffer_16(src_b, benchmark_width_ * benchmark_height_) align_buffer_16(src_b, benchmark_width_ * benchmark_height_)
for (int i = 0; i < benchmark_width_ * benchmark_height_; ++i) { for (int i = 0; i < benchmark_width_ * benchmark_height_; ++i) {
src_a[i] = i; src_a[i] = i;
src_b[i] = i; src_b[i] = i;
...@@ -380,9 +357,9 @@ TEST_F(libyuvTest, BenchmarkSsim_OPT) { ...@@ -380,9 +357,9 @@ TEST_F(libyuvTest, BenchmarkSsim_OPT) {
benchmark_width_, benchmark_height_); benchmark_width_, benchmark_height_);
opt_time = (get_time() - opt_time) / benchmark_iterations_; 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_a)
free_aligned_buffer_16(src_b) free_aligned_buffer_16(src_b)
...@@ -396,7 +373,6 @@ TEST_F(libyuvTest, Ssim) { ...@@ -396,7 +373,6 @@ TEST_F(libyuvTest, Ssim) {
const int kSrcStride = 2 * b + kSrcWidth; const int kSrcStride = 2 * b + kSrcWidth;
align_buffer_16(src_a, kSrcPlaneSize) align_buffer_16(src_a, kSrcPlaneSize)
align_buffer_16(src_b, kSrcPlaneSize) align_buffer_16(src_b, kSrcPlaneSize)
memset(src_a, 0, kSrcPlaneSize); memset(src_a, 0, kSrcPlaneSize);
memset(src_b, 0, kSrcPlaneSize); memset(src_b, 0, kSrcPlaneSize);
...@@ -421,7 +397,7 @@ TEST_F(libyuvTest, Ssim) { ...@@ -421,7 +397,7 @@ TEST_F(libyuvTest, Ssim) {
src_b + kSrcStride * b + b, kSrcStride, src_b + kSrcStride * b + b, kSrcStride,
kSrcWidth, kSrcHeight); kSrcWidth, kSrcHeight);
EXPECT_GT(err, 0.8); EXPECT_GT(err, 0.0001);
EXPECT_LT(err, 0.9); EXPECT_LT(err, 0.9);
for (int i = 0; i < kSrcPlaneSize; ++i) { for (int i = 0; i < kSrcPlaneSize; ++i) {
...@@ -432,7 +408,7 @@ TEST_F(libyuvTest, Ssim) { ...@@ -432,7 +408,7 @@ TEST_F(libyuvTest, Ssim) {
src_b + kSrcStride * b + b, kSrcStride, src_b + kSrcStride * b + b, kSrcStride,
kSrcWidth, kSrcHeight); kSrcWidth, kSrcHeight);
EXPECT_GT(err, 0.008); EXPECT_GT(err, 0.0);
EXPECT_LT(err, 0.009); EXPECT_LT(err, 0.009);
srandom(time(NULL)); srandom(time(NULL));
......
...@@ -29,551 +29,526 @@ void PrintArray(uint8 *array, int w, int h) { ...@@ -29,551 +29,526 @@ void PrintArray(uint8 *array, int w, int h) {
TEST_F(libyuvTest, Transpose) { TEST_F(libyuvTest, Transpose) {
int iw, ih, ow, oh; int iw, ih, ow, oh;
int err = 0; int err = 0;
iw = benchmark_width_;
ih = benchmark_height_;
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)
for (i = 0; i < iw * ih; ++i) {
input[i] = i;
}
for (iw = 8; iw < rotate_max_w_ && !err; ++iw) { TransposePlane(input, iw, output_1, ow, iw, ih);
for (ih = 8; ih < rotate_max_h_ && !err; ++ih) { TransposePlane(output_1, ow, output_2, oh, ow, oh);
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)
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);
for (i = 0; i < iw * ih; ++i) {
if (input[i] != output_2[i]) {
err++;
}
}
if (err) { for (i = 0; i < iw * ih; ++i) {
printf("input %dx%d \n", iw, ih); if (input[i] != output_2[i]) {
PrintArray(input, iw, ih); err++;
}
}
printf("transpose 1\n"); if (err) {
PrintArray(output_1, ow, oh); printf("input %dx%d \n", iw, ih);
PrintArray(input, iw, ih);
printf("transpose 2\n"); printf("transpose 1\n");
PrintArray(output_2, iw, ih); PrintArray(output_1, ow, oh);
}
free_aligned_buffer_16(input) printf("transpose 2\n");
free_aligned_buffer_16(output_1) PrintArray(output_2, iw, ih);
free_aligned_buffer_16(output_2)
}
} }
free_aligned_buffer_16(input)
free_aligned_buffer_16(output_1)
free_aligned_buffer_16(output_2)
EXPECT_EQ(0, err); EXPECT_EQ(0, err);
} }
TEST_F(libyuvTest, TransposeUV) { TEST_F(libyuvTest, TransposeUV) {
int iw, ih, ow, oh; int iw, ih, ow, oh;
int err = 0; int err = 0;
iw = benchmark_width_;
ih = benchmark_height_;
int i;
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)
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);
for (iw = 16; iw < rotate_max_w_ && !err; iw += 2) { TransposePlane(output_a1, ow, output_a2, oh, ow, oh);
for (ih = 8; ih < rotate_max_h_ && !err; ++ih) { TransposePlane(output_b1, ow, output_b2, oh, ow, oh);
int i;
for (i = 0; i < iw * ih; i += 2) {
ow = ih; if (input[i] != output_a2[i >> 1]) {
oh = iw >> 1; err++;
}
align_buffer_16(input, iw * ih) if (input[i + 1] != output_b2[i >> 1]) {
align_buffer_16(output_a1, ow * oh) err++;
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);
}
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);
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)
} }
} }
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); EXPECT_EQ(0, err);
} }
TEST_F(libyuvTest, RotatePlane90) { TEST_F(libyuvTest, RotatePlane90) {
int iw, ih, ow, oh; int iw, ih, ow, oh;
int err = 0; int err = 0;
iw = benchmark_width_;
ih = benchmark_height_;
int i;
for (iw = 8; iw < rotate_max_w_ && !err; ++iw) { ow = ih;
for (ih = 8; ih < rotate_max_h_ && !err; ++ih) { oh = iw;
int i;
ow = ih; align_buffer_16(input, iw * ih)
oh = iw; 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) for (i = 0; i < iw * ih; ++i) {
align_buffer_16(output_0, iw * ih) input[i] = i;
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;
}
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) { RotatePlane90(input, iw, output_90, ow, iw, ih);
if (input[i] != output_0[i]) { RotatePlane90(output_90, ow, output_180, oh, ow, oh);
err++; RotatePlane90(output_180, oh, output_270, ow, oh, ow);
} RotatePlane90(output_270, ow, output_0, iw, ow, oh);
}
if (err) { for (i = 0; i < iw * ih; ++i) {
printf("input %dx%d \n", iw, ih); if (input[i] != output_0[i]) {
PrintArray(input, iw, ih); err++;
}
}
printf("output 90\n"); if (err) {
PrintArray(output_90, ow, oh); printf("input %dx%d \n", iw, ih);
PrintArray(input, iw, ih);
printf("output 180\n"); printf("output 90\n");
PrintArray(output_180, iw, ih); PrintArray(output_90, ow, oh);
printf("output 270\n"); printf("output 180\n");
PrintArray(output_270, ow, oh); PrintArray(output_180, iw, ih);
printf("output 0\n"); printf("output 270\n");
PrintArray(output_0, iw, ih); PrintArray(output_270, ow, oh);
}
free_aligned_buffer_16(input) printf("output 0\n");
free_aligned_buffer_16(output_0) PrintArray(output_0, iw, ih);
free_aligned_buffer_16(output_90)
free_aligned_buffer_16(output_180)
free_aligned_buffer_16(output_270)
}
} }
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); EXPECT_EQ(0, err);
} }
TEST_F(libyuvTest, RotateUV90) { TEST_F(libyuvTest, RotateUV90) {
int iw, ih, ow, oh; int iw, ih, ow, oh;
int err = 0; int err = 0;
iw = benchmark_width_;
ih = benchmark_height_;
int i;
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)
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);
RotatePlane90(output_90_u, ow, output_180_u, oh, ow, oh);
RotatePlane90(output_90_v, ow, output_180_v, oh, ow, oh);
for (iw = 16; iw < rotate_max_w_ && !err; iw += 2) { RotatePlane180(output_180_u, ow, output_0_u, ow, ow, oh);
for (ih = 8; ih < rotate_max_h_ && !err; ++ih) { RotatePlane180(output_180_v, ow, output_0_v, ow, ow, oh);
int i;
for (i = 0; i < (ow * oh); ++i) {
ow = ih; if (output_0_u[i] != (uint8)i) {
oh = iw >> 1; err++;
}
align_buffer_16(input, iw * ih) if (output_0_v[i] != (uint8)(-i)) {
align_buffer_16(output_0_u, ow * oh) err++;
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);
}
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);
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)
} }
} }
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); EXPECT_EQ(0, err);
} }
TEST_F(libyuvTest, RotateUV180) { TEST_F(libyuvTest, RotateUV180) {
int iw, ih, ow, oh; int iw, ih, ow, oh;
int err = 0; int err = 0;
iw = benchmark_width_;
ih = benchmark_height_;
int i;
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)
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);
RotatePlane90(output_180_u, ow, output_90_u, oh, ow, oh);
RotatePlane90(output_180_v, ow, output_90_v, oh, ow, oh);
for (iw = 16; iw < rotate_max_w_ && !err; iw += 2) { RotatePlane90(output_90_u, oh, output_0_u, ow, oh, ow);
for (ih = 8; ih < rotate_max_h_ && !err; ++ih) { RotatePlane90(output_90_v, oh, output_0_v, ow, oh, ow);
int i;
for (i = 0; i < (ow * oh); ++i) {
ow = iw >> 1; if (output_0_u[i] != (uint8)i) {
oh = ih; err++;
}
align_buffer_16(input, iw * ih) if (output_0_v[i] != (uint8)(-i)) {
align_buffer_16(output_0_u, ow * oh) err++;
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);
}
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_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)
} }
} }
EXPECT_EQ(0, err); if (err) {
} printf("input %dx%d \n", iw, ih);
PrintArray(input, iw, ih);
TEST_F(libyuvTest, RotateUV270) { printf("output 180_u\n");
int iw, ih, ow, oh; PrintArray(output_180_u, oh, ow);
int err = 0;
for (iw = 16; iw < rotate_max_w_ && !err; iw += 2) { printf("output 180_v\n");
for (ih = 8; ih < rotate_max_h_ && !err; ++ih) { PrintArray(output_180_v, oh, ow);
int i;
printf("output 90_u\n");
ow = ih; PrintArray(output_90_u, oh, ow);
oh = iw >> 1;
printf("output 90_v\n");
align_buffer_16(input, iw * ih) PrintArray(output_90_v, oh, ow);
align_buffer_16(output_0_u, ow * oh)
align_buffer_16(output_0_v, ow * oh) printf("output 0_u\n");
align_buffer_16(output_270_u, ow * oh) PrintArray(output_0_u, ow, oh);
align_buffer_16(output_270_v, ow * oh)
align_buffer_16(output_180_u, ow * oh) printf("output 0_v\n");
align_buffer_16(output_180_v, ow * oh) PrintArray(output_0_v, ow, oh);
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);
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);
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)
}
} }
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); EXPECT_EQ(0, err);
} }
TEST_F(libyuvTest, RotatePlane180) { TEST_F(libyuvTest, RotateUV270) {
int iw, ih, ow, oh; int iw, ih, ow, oh;
int err = 0; int err = 0;
iw = benchmark_width_;
ih = benchmark_height_;
int i;
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)
for (i = 0; i < iw * ih; i += 2) {
input[i] = i >> 1;
input[i + 1] = -(i >> 1);
}
for (iw = 8; iw < rotate_max_w_ && !err; ++iw) RotateUV270(input, iw, output_270_u, ow, output_270_v, ow,
for (ih = 8; ih < rotate_max_h_ && !err; ++ih) { iw >> 1, ih);
int i;
ow = iw; RotatePlane270(output_270_u, ow, output_180_u, oh, ow, oh);
oh = ih; RotatePlane270(output_270_v, ow, output_180_v, oh, ow, oh);
align_buffer_16(input, iw * ih) RotatePlane180(output_180_u, ow, output_0_u, ow, ow, oh);
align_buffer_16(output_0, iw * ih) RotatePlane180(output_180_v, ow, output_0_v, ow, ow, oh);
align_buffer_16(output_180, iw * ih)
for (i = 0; i < iw * ih; ++i) { for (i = 0; i < (ow * oh); ++i) {
input[i] = i; if (output_0_u[i] != (uint8)i) {
} err++;
}
if (output_0_v[i] != (uint8)(-i)) {
err++;
}
}
RotatePlane180(input, iw, output_180, ow, iw, ih); if (err) {
RotatePlane180(output_180, ow, output_0, iw, ow, oh); printf("input %dx%d \n", iw, ih);
PrintArray(input, iw, ih);
for (i = 0; i < iw * ih; ++i) { printf("output 270_u\n");
if (input[i] != output_0[i]) { PrintArray(output_270_u, ow, oh);
err++;
}
}
if (err) { printf("output 270_v\n");
printf("input %dx%d \n", iw, ih); PrintArray(output_270_v, ow, oh);
PrintArray(input, iw, ih);
printf("output 180\n"); printf("output 180_u\n");
PrintArray(output_180, iw, ih); PrintArray(output_180_u, oh, ow);
printf("output 0\n"); printf("output 180_v\n");
PrintArray(output_0, iw, ih); PrintArray(output_180_v, oh, ow);
}
free_aligned_buffer_16(input) printf("output 0_u\n");
free_aligned_buffer_16(output_0) PrintArray(output_0_u, oh, ow);
free_aligned_buffer_16(output_180)
} 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); EXPECT_EQ(0, err);
} }
TEST_F(libyuvTest, RotatePlane270) { TEST_F(libyuvTest, RotatePlane180) {
int iw, ih, ow, oh; int iw, ih, ow, oh;
int err = 0; int err = 0;
iw = benchmark_width_;
ih = benchmark_height_;
int i;
for (iw = 8; iw < rotate_max_w_ && !err; ++iw) { ow = iw;
for (ih = 8; ih < rotate_max_h_ && !err; ++ih) { oh = ih;
int i;
ow = ih;
oh = iw;
align_buffer_16(input, iw * ih) align_buffer_16(input, iw * ih)
align_buffer_16(output_0, 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_180, iw * ih)
align_buffer_16(output_270, ow * oh)
for (i = 0; i < iw * ih; ++i) for (i = 0; i < iw * ih; ++i) {
input[i] = i; input[i] = i;
}
RotatePlane270(input, iw, output_270, ow, iw, ih); RotatePlane180(input, iw, output_180, ow, iw, ih);
RotatePlane270(output_270, ow, output_180, oh, ow, oh); RotatePlane180(output_180, ow, output_0, iw, 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) { for (i = 0; i < iw * ih; ++i) {
if (input[i] != output_0[i]) { if (input[i] != output_0[i]) {
err++; err++;
} }
} }
if (err) { if (err) {
printf("input %dx%d \n", iw, ih); printf("input %dx%d \n", iw, ih);
PrintArray(input, iw, ih); PrintArray(input, iw, ih);
printf("output 270\n"); printf("output 180\n");
PrintArray(output_270, ow, oh); PrintArray(output_180, iw, ih);
printf("output 180\n"); printf("output 0\n");
PrintArray(output_180, iw, ih); PrintArray(output_0, iw, ih);
}
printf("output 90\n"); free_aligned_buffer_16(input)
PrintArray(output_90, ow, oh); free_aligned_buffer_16(output_0)
free_aligned_buffer_16(output_180)
printf("output 0\n"); EXPECT_EQ(0, err);
PrintArray(output_0, iw, ih); }
}
free_aligned_buffer_16(input) TEST_F(libyuvTest, RotatePlane270) {
free_aligned_buffer_16(output_0) int iw, ih, ow, oh;
free_aligned_buffer_16(output_90) int err = 0;
free_aligned_buffer_16(output_180) iw = benchmark_width_;
free_aligned_buffer_16(output_270) ih = benchmark_height_;
int i;
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)
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);
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); EXPECT_EQ(0, err);
} }
TEST_F(libyuvTest, RotatePlane90and270) { TEST_F(libyuvTest, RotatePlane90and270) {
int iw, ih, ow, oh; int iw, ih, ow, oh;
int err = 0; int err = 0;
iw = benchmark_width_;
ih = benchmark_height_;
int i;
for (iw = 16; iw < rotate_max_w_ && !err; iw += 4) ow = ih;
for (ih = 16; ih < rotate_max_h_ && !err; ih += 4) { oh = iw;
int i;
ow = ih; align_buffer_16(input, iw * ih)
oh = iw; align_buffer_16(output_0, iw * ih)
align_buffer_16(output_90, ow * oh)
align_buffer_16(input, iw * ih) for (i = 0; i < iw * ih; ++i) {
align_buffer_16(output_0, iw * ih) input[i] = i;
align_buffer_16(output_90, ow * oh) }
for (i = 0; i < iw * ih; ++i) {
input[i] = i;
}
RotatePlane90(input, iw, output_90, ow, iw, ih); RotatePlane90(input, iw, output_90, ow, iw, ih);
RotatePlane270(output_90, ow, output_0, iw, ow, oh); RotatePlane270(output_90, ow, output_0, iw, ow, oh);
for (i = 0; i < iw * ih; ++i) { for (i = 0; i < iw * ih; ++i) {
if (input[i] != output_0[i]) { if (input[i] != output_0[i]) {
err++; err++;
} }
} }
if (err) { if (err) {
printf("intput %dx%d\n", iw, ih); printf("intput %dx%d\n", iw, ih);
PrintArray(input, iw, ih); PrintArray(input, iw, ih);
printf("output \n"); printf("output \n");
PrintArray(output_90, ow, oh); PrintArray(output_90, ow, oh);
printf("output \n"); printf("output \n");
PrintArray(output_0, iw, ih); PrintArray(output_0, iw, ih);
} }
free_aligned_buffer_16(input) free_aligned_buffer_16(input)
free_aligned_buffer_16(output_0) free_aligned_buffer_16(output_0)
free_aligned_buffer_16(output_90) free_aligned_buffer_16(output_90)
}
EXPECT_EQ(0, err); EXPECT_EQ(0, err);
} }
...@@ -581,58 +556,56 @@ TEST_F(libyuvTest, RotatePlane90and270) { ...@@ -581,58 +556,56 @@ TEST_F(libyuvTest, RotatePlane90and270) {
TEST_F(libyuvTest, RotatePlane90Pitch) { TEST_F(libyuvTest, RotatePlane90Pitch) {
int iw, ih; int iw, ih;
int err = 0; int err = 0;
iw = benchmark_width_;
ih = benchmark_height_;
int i;
int ow = ih;
int oh = iw;
for (iw = 16; iw < rotate_max_w_ && !err; iw += 4) align_buffer_16(input, iw * ih)
for (ih = 16; ih < rotate_max_h_ && !err; ih += 4) { align_buffer_16(output_0, iw * ih)
int i; align_buffer_16(output_90, ow * oh)
int ow = ih; for (i = 0; i < iw * ih; ++i) {
int oh = iw; input[i] = i;
}
align_buffer_16(input, iw * ih)
align_buffer_16(output_0, iw * ih) RotatePlane90(input, iw,
align_buffer_16(output_90, ow * oh) output_90 + (ow >> 1), ow,
iw >> 1, ih >> 1);
for (i = 0; i < iw * ih; ++i) { RotatePlane90(input + (iw >> 1), iw,
input[i] = i; output_90 + (ow >> 1) + ow * (oh >> 1), ow,
} iw >> 1, ih >> 1);
RotatePlane90(input + iw * (ih >> 1), iw,
RotatePlane90(input, iw, output_90, ow,
output_90 + (ow >> 1), ow, iw >> 1, ih >> 1);
iw >> 1, ih >> 1); RotatePlane90(input + (iw >> 1) + iw * (ih >> 1), iw,
RotatePlane90(input + (iw >> 1), iw, output_90 + ow * (oh >> 1), ow,
output_90 + (ow >> 1) + ow * (oh >> 1), ow, iw >> 1, ih >> 1);
iw >> 1, ih >> 1);
RotatePlane90(input + iw * (ih >> 1), iw, RotatePlane270(output_90, ih, output_0, iw, ow, oh);
output_90, ow,
iw >> 1, ih >> 1); for (i = 0; i < iw * ih; ++i) {
RotatePlane90(input + (iw >> 1) + iw * (ih >> 1), iw, if (input[i] != output_0[i]) {
output_90 + ow * (oh >> 1), ow, err++;
iw >> 1, ih >> 1);
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)
} }
}
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); EXPECT_EQ(0, err);
} }
...@@ -640,60 +613,57 @@ TEST_F(libyuvTest, RotatePlane90Pitch) { ...@@ -640,60 +613,57 @@ TEST_F(libyuvTest, RotatePlane90Pitch) {
TEST_F(libyuvTest, RotatePlane270Pitch) { TEST_F(libyuvTest, RotatePlane270Pitch) {
int iw, ih, ow, oh; int iw, ih, ow, oh;
int err = 0; int err = 0;
iw = benchmark_width_;
ih = benchmark_height_;
int i;
for (iw = 16; iw < rotate_max_w_ && !err; iw += 4) { ow = ih;
for (ih = 16; ih < rotate_max_h_ && !err; ih += 4) { oh = iw;
int i;
align_buffer_16(input, iw * ih)
ow = ih; align_buffer_16(output_0, iw * ih)
oh = iw; align_buffer_16(output_270, ow * oh)
align_buffer_16(input, iw * ih) for (i = 0; i < iw * ih; ++i) {
align_buffer_16(output_0, iw * ih) input[i] = i;
align_buffer_16(output_270, ow * oh) }
for (i = 0; i < iw * ih; ++i) { RotatePlane270(input, iw,
input[i] = i; output_270 + ow * (oh >> 1), ow,
} iw >> 1, ih >> 1);
RotatePlane270(input + (iw >> 1), iw,
RotatePlane270(input, iw, output_270, ow,
output_270 + ow * (oh >> 1), ow, iw >> 1, ih >> 1);
iw >> 1, ih >> 1); RotatePlane270(input + iw * (ih >> 1), iw,
RotatePlane270(input + (iw >> 1), iw, output_270 + (ow >> 1) + ow * (oh >> 1), ow,
output_270, ow, iw >> 1, ih >> 1);
iw >> 1, ih >> 1); RotatePlane270(input + (iw >> 1) + iw * (ih >> 1), iw,
RotatePlane270(input + iw * (ih >> 1), iw, output_270 + (ow >> 1), ow,
output_270 + (ow >> 1) + ow * (oh >> 1), ow, iw >> 1, ih >> 1);
iw >> 1, ih >> 1);
RotatePlane270(input + (iw >> 1) + iw * (ih >> 1), iw, RotatePlane90(output_270, ih, output_0, iw, ow, oh);
output_270 + (ow >> 1), ow,
iw >> 1, ih >> 1); for (i = 0; i < iw * ih; ++i) {
if (input[i] != output_0[i]) {
RotatePlane90(output_270, ih, output_0, iw, ow, oh); err++;
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)
} }
} }
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); EXPECT_EQ(0, err);
} }
......
...@@ -19,11 +19,17 @@ ...@@ -19,11 +19,17 @@
#define BENCHMARK_ITERATIONS 1 #define BENCHMARK_ITERATIONS 1
libyuvTest::libyuvTest() : rotate_max_w_(128), rotate_max_h_(128), libyuvTest::libyuvTest() : rotate_max_w_(128), rotate_max_h_(128),
benchmark_iterations_(BENCHMARK_ITERATIONS), benchmark_width_(1280), benchmark_iterations_(BENCHMARK_ITERATIONS), benchmark_width_(128),
benchmark_height_(720) { benchmark_height_(72) {
const char* repeat = getenv("LIBYUV_REPEAT"); const char* repeat = getenv("LIBYUV_REPEAT");
if (repeat) { if (repeat) {
benchmark_iterations_ = atoi(repeat); // NOLINT 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"); const char* width = getenv("LIBYUV_WIDTH");
if (width) { if (width) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment