Chromium Code Reviews

Unified Diff: unit_test/planar_test.cc

Issue 1491533002: planar blend use signed images (Closed) Base URL: https://chromium.googlesource.com/libyuv/libyuv@master
Patch Set: 16 pixel yuv blender Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
« no previous file with comments | « source/row_win.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: unit_test/planar_test.cc
diff --git a/unit_test/planar_test.cc b/unit_test/planar_test.cc
index 1416408f460ce0f9f04302ca33c59b66a14094fe..fc22fe139091ee65c10a80b9511631061bc34f93 100644
--- a/unit_test/planar_test.cc
+++ b/unit_test/planar_test.cc
@@ -1163,6 +1163,87 @@ TEST_F(LibYUVPlanarTest, ARGBBlend_Opt) {
EXPECT_LE(max_diff, 1);
}
+#ifdef HAS_BLENDPLANEROW_SSSE3
+// TODO(fbarchard): Switch to I420Blend.
+static void TestBlendPlane(int width, int height, int benchmark_iterations,
+ int invert, int off) {
+ int has_ssse3 = TestCpuFlag(kCpuHasSSSE3);
+ width = width * height;
+ height = 1;
+ if (width < 1) {
+ width = 1;
+ }
+ if (width < 256) {
+ width = 256;
+ }
+ const int kBpp = 1;
+ const int kStride = width * kBpp;
+ align_buffer_64(src_argb_a, kStride * height + off);
+ align_buffer_64(src_argb_b, kStride * height + off);
+ align_buffer_64(src_argb_alpha, kStride * height + off);
+ align_buffer_64(dst_argb_c, kStride * height);
+ align_buffer_64(dst_argb_opt, kStride * height);
+
+ if (has_ssse3) {
+ for (int i = 0; i < 255; ++i) {
+ src_argb_a[i] = i;
+ src_argb_b[i] = 255 - i;
+ src_argb_alpha[i] = 255;
+ }
+ memset(dst_argb_opt, 0xfb, kStride * height);
+ BlendPlaneRow_SSSE3(src_argb_a + off,
+ src_argb_b + off,
+ src_argb_alpha + off,
+ dst_argb_opt,
+ width * height);
+ for (int i = 0; i < kStride * height; ++i) {
+ EXPECT_EQ(src_argb_a[i], dst_argb_opt[i]);
+ }
+ }
+ for (int i = 0; i < kStride * height; ++i) {
+ src_argb_a[i + off] = (fastrand() & 0xff);
+ src_argb_b[i + off] = (fastrand() & 0xff);
+ src_argb_alpha[i + off] = (fastrand() & 0xff);
+ }
+ memset(dst_argb_c, 255, kStride * height);
+ memset(dst_argb_opt, 255, kStride * height);
+
+ BlendPlaneRow_C(src_argb_a + off,
+ src_argb_b + off,
+ src_argb_alpha + off,
+ dst_argb_c,
+ width * height);
+ for (int i = 0; i < benchmark_iterations; ++i) {
+ if (has_ssse3) {
+ BlendPlaneRow_SSSE3(src_argb_a + off,
+ src_argb_b + off,
+ src_argb_alpha + off,
+ dst_argb_opt,
+ width * height);
+ } else {
+ BlendPlaneRow_C(src_argb_a + off,
+ src_argb_b + off,
+ src_argb_alpha + off,
+ dst_argb_opt,
+ width * height);
+ }
+ }
+ for (int i = 0; i < kStride * height; ++i) {
+ EXPECT_EQ(dst_argb_c[i], dst_argb_opt[i]);
+ }
+ free_aligned_buffer_64(src_argb_a);
+ free_aligned_buffer_64(src_argb_b);
+ free_aligned_buffer_64(dst_argb_c);
+ free_aligned_buffer_64(dst_argb_opt);
+ return;
+}
+
+TEST_F(LibYUVPlanarTest, BlendPlane_Opt) {
+ TestBlendPlane(benchmark_width_, benchmark_height_, benchmark_iterations_,
+ +1, 0);
+}
+#endif
+
TEST_F(LibYUVPlanarTest, TestAffine) {
SIMD_ALIGNED(uint8 orig_pixels_0[1280][4]);
SIMD_ALIGNED(uint8 interpolate_pixels_C[1280][4]);
« no previous file with comments | « source/row_win.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine