mirror of
https://chromium.googlesource.com/libyuv/libyuv
synced 2025-12-07 17:26:49 +08:00
Scale Test3x, Test4x use larger size to avoid div benchmarking bottleneck
Bug: None Change-Id: I7876e944a43c2a927e2b7e4d501da7d2cd7323fa Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/3180372 Reviewed-by: richard winterton <rrwinterton@gmail.com> Commit-Queue: Frank Barchard <fbarchard@chromium.org>
This commit is contained in:
parent
b92a60320f
commit
a836585cb6
@ -490,11 +490,11 @@ TEST_F(LibYUVScaleTest, YUVToRGBScaleDown) {
|
||||
}
|
||||
|
||||
TEST_F(LibYUVScaleTest, ARGBTest3x) {
|
||||
const int kSrcStride = 48 * 4;
|
||||
const int kDstStride = 16 * 4;
|
||||
const int kSrcStride = 480 * 4;
|
||||
const int kDstStride = 160 * 4;
|
||||
const int kSize = kSrcStride * 3;
|
||||
align_buffer_page_end(orig_pixels, kSize);
|
||||
for (int i = 0; i < 48 * 3; ++i) {
|
||||
for (int i = 0; i < 480 * 3; ++i) {
|
||||
orig_pixels[i * 4 + 0] = i;
|
||||
orig_pixels[i * 4 + 1] = 255 - i;
|
||||
orig_pixels[i * 4 + 2] = i + 1;
|
||||
@ -502,36 +502,36 @@ TEST_F(LibYUVScaleTest, ARGBTest3x) {
|
||||
}
|
||||
align_buffer_page_end(dest_pixels, kDstStride);
|
||||
|
||||
int iterations16 =
|
||||
benchmark_width_ * benchmark_height_ / (16 * 1) * benchmark_iterations_;
|
||||
for (int i = 0; i < iterations16; ++i) {
|
||||
ARGBScale(orig_pixels, kSrcStride, 48, 3, dest_pixels, kDstStride, 16, 1,
|
||||
int iterations160 =
|
||||
(benchmark_width_ * benchmark_height_ + (160 - 1)) / 160 * benchmark_iterations_;
|
||||
for (int i = 0; i < iterations160; ++i) {
|
||||
ARGBScale(orig_pixels, kSrcStride, 480, 3, dest_pixels, kDstStride, 160, 1,
|
||||
kFilterBilinear);
|
||||
}
|
||||
|
||||
EXPECT_EQ(49, dest_pixels[0]);
|
||||
EXPECT_EQ(255 - 49, dest_pixels[1]);
|
||||
EXPECT_EQ(50, dest_pixels[2]);
|
||||
EXPECT_EQ(59, dest_pixels[3]);
|
||||
EXPECT_EQ(225, dest_pixels[0]);
|
||||
EXPECT_EQ(255 - 225, dest_pixels[1]);
|
||||
EXPECT_EQ(226, dest_pixels[2]);
|
||||
EXPECT_EQ(235, dest_pixels[3]);
|
||||
|
||||
ARGBScale(orig_pixels, kSrcStride, 48, 3, dest_pixels, kDstStride, 16, 1,
|
||||
ARGBScale(orig_pixels, kSrcStride, 480, 3, dest_pixels, kDstStride, 160, 1,
|
||||
kFilterNone);
|
||||
|
||||
EXPECT_EQ(49, dest_pixels[0]);
|
||||
EXPECT_EQ(255 - 49, dest_pixels[1]);
|
||||
EXPECT_EQ(50, dest_pixels[2]);
|
||||
EXPECT_EQ(59, dest_pixels[3]);
|
||||
EXPECT_EQ(225, dest_pixels[0]);
|
||||
EXPECT_EQ(255 - 225, dest_pixels[1]);
|
||||
EXPECT_EQ(226, dest_pixels[2]);
|
||||
EXPECT_EQ(235, dest_pixels[3]);
|
||||
|
||||
free_aligned_buffer_page_end(dest_pixels);
|
||||
free_aligned_buffer_page_end(orig_pixels);
|
||||
}
|
||||
|
||||
TEST_F(LibYUVScaleTest, ARGBTest4x) {
|
||||
const int kSrcStride = 64 * 4;
|
||||
const int kDstStride = 16 * 4;
|
||||
const int kSrcStride = 640 * 4;
|
||||
const int kDstStride = 160 * 4;
|
||||
const int kSize = kSrcStride * 4;
|
||||
align_buffer_page_end(orig_pixels, kSize);
|
||||
for (int i = 0; i < 64 * 4; ++i) {
|
||||
for (int i = 0; i < 640 * 4; ++i) {
|
||||
orig_pixels[i * 4 + 0] = i;
|
||||
orig_pixels[i * 4 + 1] = 255 - i;
|
||||
orig_pixels[i * 4 + 2] = i + 1;
|
||||
@ -539,26 +539,25 @@ TEST_F(LibYUVScaleTest, ARGBTest4x) {
|
||||
}
|
||||
align_buffer_page_end(dest_pixels, kDstStride);
|
||||
|
||||
int iterations16 =
|
||||
benchmark_width_ * benchmark_height_ / (16 * 1) * benchmark_iterations_;
|
||||
for (int i = 0; i < iterations16; ++i) {
|
||||
ARGBScale(orig_pixels, kSrcStride, 64, 4, dest_pixels, kDstStride, 16, 1,
|
||||
int iterations160 =
|
||||
(benchmark_width_ * benchmark_height_ + (160 - 1)) / 160 * benchmark_iterations_;
|
||||
for (int i = 0; i < iterations160; ++i) {
|
||||
ARGBScale(orig_pixels, kSrcStride, 640, 4, dest_pixels, kDstStride, 160, 1,
|
||||
kFilterBilinear);
|
||||
}
|
||||
|
||||
EXPECT_NEAR((65 + 66 + 129 + 130 + 2) / 4, dest_pixels[0], 4);
|
||||
EXPECT_NEAR((255 - 65 + 255 - 66 + 255 - 129 + 255 - 130 + 2) / 4,
|
||||
dest_pixels[1], 4);
|
||||
EXPECT_NEAR((1 * 4 + 65 + 66 + 129 + 130 + 2) / 4, dest_pixels[2], 4);
|
||||
EXPECT_NEAR((10 * 4 + 65 + 66 + 129 + 130 + 2) / 4, dest_pixels[3], 4);
|
||||
EXPECT_NEAR(66, dest_pixels[0], 4);
|
||||
EXPECT_NEAR(255 - 66, dest_pixels[1], 4);
|
||||
EXPECT_NEAR(67, dest_pixels[2], 4);
|
||||
EXPECT_NEAR(76, dest_pixels[3], 4);
|
||||
|
||||
ARGBScale(orig_pixels, kSrcStride, 64, 4, dest_pixels, kDstStride, 16, 1,
|
||||
ARGBScale(orig_pixels, kSrcStride, 640, 4, dest_pixels, kDstStride, 160, 1,
|
||||
kFilterNone);
|
||||
|
||||
EXPECT_EQ(130, dest_pixels[0]);
|
||||
EXPECT_EQ(255 - 130, dest_pixels[1]);
|
||||
EXPECT_EQ(130 + 1, dest_pixels[2]);
|
||||
EXPECT_EQ(130 + 10, dest_pixels[3]);
|
||||
EXPECT_EQ(2, dest_pixels[0]);
|
||||
EXPECT_EQ(255 - 2, dest_pixels[1]);
|
||||
EXPECT_EQ(3, dest_pixels[2]);
|
||||
EXPECT_EQ(12, dest_pixels[3]);
|
||||
|
||||
free_aligned_buffer_page_end(dest_pixels);
|
||||
free_aligned_buffer_page_end(orig_pixels);
|
||||
|
||||
@ -1385,56 +1385,56 @@ TEST_FACTOR(3, 1, 3, 0)
|
||||
#undef DX
|
||||
|
||||
TEST_F(LibYUVScaleTest, PlaneTest3x) {
|
||||
const int kSrcStride = 48;
|
||||
const int kDstStride = 16;
|
||||
const int kSrcStride = 480;
|
||||
const int kDstStride = 160;
|
||||
const int kSize = kSrcStride * 3;
|
||||
align_buffer_page_end(orig_pixels, kSize);
|
||||
for (int i = 0; i < 48 * 3; ++i) {
|
||||
for (int i = 0; i < 480 * 3; ++i) {
|
||||
orig_pixels[i] = i;
|
||||
}
|
||||
align_buffer_page_end(dest_pixels, kDstStride);
|
||||
|
||||
int iterations16 =
|
||||
benchmark_width_ * benchmark_height_ / (16 * 1) * benchmark_iterations_;
|
||||
for (int i = 0; i < iterations16; ++i) {
|
||||
ScalePlane(orig_pixels, kSrcStride, 48, 3, dest_pixels, kDstStride, 16, 1,
|
||||
int iterations160 =
|
||||
(benchmark_width_ * benchmark_height_ + (160 - 1)) / 160 * benchmark_iterations_;
|
||||
for (int i = 0; i < iterations160; ++i) {
|
||||
ScalePlane(orig_pixels, kSrcStride, 480, 3, dest_pixels, kDstStride, 160, 1,
|
||||
kFilterBilinear);
|
||||
}
|
||||
|
||||
EXPECT_EQ(49, dest_pixels[0]);
|
||||
EXPECT_EQ(225, dest_pixels[0]);
|
||||
|
||||
ScalePlane(orig_pixels, kSrcStride, 48, 3, dest_pixels, kDstStride, 16, 1,
|
||||
ScalePlane(orig_pixels, kSrcStride, 480, 3, dest_pixels, kDstStride, 160, 1,
|
||||
kFilterNone);
|
||||
|
||||
EXPECT_EQ(49, dest_pixels[0]);
|
||||
EXPECT_EQ(225, dest_pixels[0]);
|
||||
|
||||
free_aligned_buffer_page_end(dest_pixels);
|
||||
free_aligned_buffer_page_end(orig_pixels);
|
||||
}
|
||||
|
||||
TEST_F(LibYUVScaleTest, PlaneTest4x) {
|
||||
const int kSrcStride = 64;
|
||||
const int kDstStride = 16;
|
||||
const int kSrcStride = 640;
|
||||
const int kDstStride = 160;
|
||||
const int kSize = kSrcStride * 4;
|
||||
align_buffer_page_end(orig_pixels, kSize);
|
||||
for (int i = 0; i < 64 * 4; ++i) {
|
||||
for (int i = 0; i < 640 * 4; ++i) {
|
||||
orig_pixels[i] = i;
|
||||
}
|
||||
align_buffer_page_end(dest_pixels, kDstStride);
|
||||
|
||||
int iterations16 =
|
||||
benchmark_width_ * benchmark_height_ / (16 * 1) * benchmark_iterations_;
|
||||
for (int i = 0; i < iterations16; ++i) {
|
||||
ScalePlane(orig_pixels, kSrcStride, 64, 4, dest_pixels, kDstStride, 16, 1,
|
||||
int iterations160 =
|
||||
(benchmark_width_ * benchmark_height_ + (160 - 1)) / 160 * benchmark_iterations_;
|
||||
for (int i = 0; i < iterations160; ++i) {
|
||||
ScalePlane(orig_pixels, kSrcStride, 640, 4, dest_pixels, kDstStride, 160, 1,
|
||||
kFilterBilinear);
|
||||
}
|
||||
|
||||
EXPECT_EQ((65 + 66 + 129 + 130 + 2) / 4, dest_pixels[0]);
|
||||
EXPECT_EQ(66, dest_pixels[0]);
|
||||
|
||||
ScalePlane(orig_pixels, kSrcStride, 64, 4, dest_pixels, kDstStride, 16, 1,
|
||||
ScalePlane(orig_pixels, kSrcStride, 640, 4, dest_pixels, kDstStride, 160, 1,
|
||||
kFilterNone);
|
||||
|
||||
EXPECT_EQ(130, dest_pixels[0]); // expect the 3rd pixel of the 3rd row
|
||||
EXPECT_EQ(2, dest_pixels[0]); // expect the 3rd pixel of the 3rd row
|
||||
|
||||
free_aligned_buffer_page_end(dest_pixels);
|
||||
free_aligned_buffer_page_end(orig_pixels);
|
||||
|
||||
@ -193,63 +193,62 @@ TEST_SCALESWAPXY1(UVScale, Bilinear, 0)
|
||||
#undef TEST_SCALESWAPXY1
|
||||
|
||||
TEST_F(LibYUVScaleTest, UVTest3x) {
|
||||
const int kSrcStride = 48 * 2;
|
||||
const int kDstStride = 16 * 2;
|
||||
const int kSrcStride = 480 * 2;
|
||||
const int kDstStride = 160 * 2;
|
||||
const int kSize = kSrcStride * 3;
|
||||
align_buffer_page_end(orig_pixels, kSize);
|
||||
for (int i = 0; i < 48 * 3; ++i) {
|
||||
for (int i = 0; i < 480 * 3; ++i) {
|
||||
orig_pixels[i * 2 + 0] = i;
|
||||
orig_pixels[i * 2 + 1] = 255 - i;
|
||||
}
|
||||
align_buffer_page_end(dest_pixels, kDstStride);
|
||||
|
||||
int iterations16 =
|
||||
benchmark_width_ * benchmark_height_ / (16 * 1) * benchmark_iterations_;
|
||||
for (int i = 0; i < iterations16; ++i) {
|
||||
UVScale(orig_pixels, kSrcStride, 48, 3, dest_pixels, kDstStride, 16, 1,
|
||||
int iterations160 =
|
||||
(benchmark_width_ * benchmark_height_ + (160 - 1)) / 160 * benchmark_iterations_;
|
||||
for (int i = 0; i < iterations160; ++i) {
|
||||
UVScale(orig_pixels, kSrcStride, 480, 3, dest_pixels, kDstStride, 160, 1,
|
||||
kFilterBilinear);
|
||||
}
|
||||
|
||||
EXPECT_EQ(49, dest_pixels[0]);
|
||||
EXPECT_EQ(255 - 49, dest_pixels[1]);
|
||||
EXPECT_EQ(225, dest_pixels[0]);
|
||||
EXPECT_EQ(255 - 225, dest_pixels[1]);
|
||||
|
||||
UVScale(orig_pixels, kSrcStride, 48, 3, dest_pixels, kDstStride, 16, 1,
|
||||
UVScale(orig_pixels, kSrcStride, 480, 3, dest_pixels, kDstStride, 160, 1,
|
||||
kFilterNone);
|
||||
|
||||
EXPECT_EQ(49, dest_pixels[0]);
|
||||
EXPECT_EQ(255 - 49, dest_pixels[1]);
|
||||
EXPECT_EQ(225, dest_pixels[0]);
|
||||
EXPECT_EQ(255 - 225, dest_pixels[1]);
|
||||
|
||||
free_aligned_buffer_page_end(dest_pixels);
|
||||
free_aligned_buffer_page_end(orig_pixels);
|
||||
}
|
||||
|
||||
TEST_F(LibYUVScaleTest, UVTest4x) {
|
||||
const int kSrcStride = 64 * 2;
|
||||
const int kDstStride = 16 * 2;
|
||||
const int kSrcStride = 640 * 2;
|
||||
const int kDstStride = 160 * 2;
|
||||
const int kSize = kSrcStride * 4;
|
||||
align_buffer_page_end(orig_pixels, kSize);
|
||||
for (int i = 0; i < 64 * 4; ++i) {
|
||||
for (int i = 0; i < 640 * 4; ++i) {
|
||||
orig_pixels[i * 2 + 0] = i;
|
||||
orig_pixels[i * 2 + 1] = 255 - i;
|
||||
}
|
||||
align_buffer_page_end(dest_pixels, kDstStride);
|
||||
|
||||
int iterations16 =
|
||||
benchmark_width_ * benchmark_height_ / (16 * 1) * benchmark_iterations_;
|
||||
for (int i = 0; i < iterations16; ++i) {
|
||||
UVScale(orig_pixels, kSrcStride, 64, 4, dest_pixels, kDstStride, 16, 1,
|
||||
int iterations160 =
|
||||
(benchmark_width_ * benchmark_height_ + (160 - 1)) / 160 * benchmark_iterations_;
|
||||
for (int i = 0; i < iterations160; ++i) {
|
||||
UVScale(orig_pixels, kSrcStride, 640, 4, dest_pixels, kDstStride, 160, 1,
|
||||
kFilterBilinear);
|
||||
}
|
||||
|
||||
EXPECT_EQ((65 + 66 + 129 + 130 + 2) / 4, dest_pixels[0]);
|
||||
EXPECT_EQ((255 - 65 + 255 - 66 + 255 - 129 + 255 - 130 + 2) / 4,
|
||||
dest_pixels[1]);
|
||||
EXPECT_EQ(66, dest_pixels[0]);
|
||||
EXPECT_EQ(190, dest_pixels[1]);
|
||||
|
||||
UVScale(orig_pixels, kSrcStride, 64, 4, dest_pixels, kDstStride, 16, 1,
|
||||
kFilterNone);
|
||||
|
||||
EXPECT_EQ(130, dest_pixels[0]); // expect the 3rd pixel of the 3rd row
|
||||
EXPECT_EQ(255 - 130, dest_pixels[1]);
|
||||
EXPECT_EQ(2, dest_pixels[0]); // expect the 3rd pixel of the 3rd row
|
||||
EXPECT_EQ(255 - 2, dest_pixels[1]);
|
||||
|
||||
free_aligned_buffer_page_end(dest_pixels);
|
||||
free_aligned_buffer_page_end(orig_pixels);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user