mirror of
https://chromium.googlesource.com/libyuv/libyuv
synced 2025-12-07 01:06:46 +08:00
Add unittest for H010ToARGB conversion
A sanity check that H010ToARGB is doing the correct math. The normal test only checks the C and ASM match, but they could both be wrong, or the common code could be wrong. This test checks a grey scale ramp matches expected results. Bug: libyuv:751 Test: LibYUVConvertTest.TestH420ToARGB and LibYUVConvertTest.TestH010ToARGB Change-Id: Ie8c2b91ac9993f41675c02d0dde9db72d0612450 Reviewed-on: https://chromium-review.googlesource.com/851474 Reviewed-by: Miguel Casas <mcasas@chromium.org> Reviewed-by: Frank Barchard <fbarchard@chromium.org>
This commit is contained in:
parent
a64658593e
commit
263243aadc
@ -2085,4 +2085,74 @@ TEST_F(LibYUVConvertTest, ARGBToAR30Row_Opt) {
|
|||||||
TESTPLANAR16TOB(H010, 2, 2, AR30, 4, 4, 1, 2, AR30, 4)
|
TESTPLANAR16TOB(H010, 2, 2, AR30, 4, 4, 1, 2, AR30, 4)
|
||||||
TESTPLANAR16TOB(H010, 2, 2, ARGB, 4, 4, 1, 2, ARGB, 4)
|
TESTPLANAR16TOB(H010, 2, 2, ARGB, 4, 4, 1, 2, ARGB, 4)
|
||||||
|
|
||||||
|
static int Clamp(int y) {
|
||||||
|
if (y < 0) {
|
||||||
|
y = 0;
|
||||||
|
}
|
||||||
|
if (y > 255) {
|
||||||
|
y = 255;
|
||||||
|
}
|
||||||
|
return y;
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_F(LibYUVConvertTest, TestH420ToARGB) {
|
||||||
|
const int kSize = 256;
|
||||||
|
align_buffer_page_end(orig_yuv, kSize + kSize / 2 * 2);
|
||||||
|
align_buffer_page_end(argb_pixels, kSize * 4);
|
||||||
|
uint8* orig_y = orig_yuv;
|
||||||
|
uint8* orig_u = orig_y + kSize;
|
||||||
|
uint8* orig_v = orig_u + kSize / 2;
|
||||||
|
|
||||||
|
// Test grey scale
|
||||||
|
for (int i = 0; i < kSize; ++i) {
|
||||||
|
orig_y[i] = i;
|
||||||
|
}
|
||||||
|
for (int i = 0; i < kSize / 2; ++i) {
|
||||||
|
orig_u[i] = 128; // 128 is 0.
|
||||||
|
orig_v[i] = 128;
|
||||||
|
}
|
||||||
|
|
||||||
|
H420ToARGB(orig_y, 0, orig_u, 0, orig_v, 0, argb_pixels, 0, kSize, 1);
|
||||||
|
|
||||||
|
for (int i = 0; i < kSize; ++i) {
|
||||||
|
int expected_y = Clamp(static_cast<int>((i - 16) * 1.164f));
|
||||||
|
EXPECT_NEAR(argb_pixels[i * 4 + 0], expected_y, 1);
|
||||||
|
EXPECT_NEAR(argb_pixels[i * 4 + 1], expected_y, 1);
|
||||||
|
EXPECT_NEAR(argb_pixels[i * 4 + 2], expected_y, 1);
|
||||||
|
EXPECT_EQ(argb_pixels[i * 4 + 3], 255);
|
||||||
|
}
|
||||||
|
free_aligned_buffer_page_end(orig_yuv);
|
||||||
|
free_aligned_buffer_page_end(argb_pixels);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_F(LibYUVConvertTest, TestH010ToARGB) {
|
||||||
|
const int kSize = 1024;
|
||||||
|
align_buffer_page_end(orig_yuv, kSize * 2 + kSize / 2 * 2 * 2);
|
||||||
|
align_buffer_page_end(argb_pixels, kSize * 4);
|
||||||
|
uint16* orig_y = reinterpret_cast<uint16*>(orig_yuv);
|
||||||
|
uint16* orig_u = orig_y + kSize;
|
||||||
|
uint16* orig_v = orig_u + kSize / 2;
|
||||||
|
|
||||||
|
// Test grey scale
|
||||||
|
for (int i = 0; i < kSize; ++i) {
|
||||||
|
orig_y[i] = i;
|
||||||
|
}
|
||||||
|
for (int i = 0; i < kSize / 2; ++i) {
|
||||||
|
orig_u[i] = 512; // 512 is 0.
|
||||||
|
orig_v[i] = 512;
|
||||||
|
}
|
||||||
|
|
||||||
|
H010ToARGB(orig_y, 0, orig_u, 0, orig_v, 0, argb_pixels, 0, kSize, 1);
|
||||||
|
|
||||||
|
for (int i = 0; i < kSize; ++i) {
|
||||||
|
int expected_y = Clamp(static_cast<int>((i - 64) * 1.164f / 4));
|
||||||
|
EXPECT_NEAR(argb_pixels[i * 4 + 0], expected_y, 1);
|
||||||
|
EXPECT_NEAR(argb_pixels[i * 4 + 1], expected_y, 1);
|
||||||
|
EXPECT_NEAR(argb_pixels[i * 4 + 2], expected_y, 1);
|
||||||
|
EXPECT_EQ(argb_pixels[i * 4 + 3], 255);
|
||||||
|
}
|
||||||
|
free_aligned_buffer_page_end(orig_yuv);
|
||||||
|
free_aligned_buffer_page_end(argb_pixels);
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace libyuv
|
} // namespace libyuv
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user