From dc3a1295becfc4e4215e92f2deebca28243cf5a0 Mon Sep 17 00:00:00 2001 From: Frank Barchard Date: Thu, 25 Aug 2016 10:29:16 -0700 Subject: [PATCH] add mergeuv test Add test for SplitUVPlane and MergeUVPlane Add public methods SplitUVPlanes and MergeUVPlanes based on the optimized assembly functions that already exists. TEST=SplitUVPlane unittest BUG=libyuv:629 R=braveyao@chromium.org Review URL: https://codereview.chromium.org/2279603002 . --- README.chromium | 2 +- include/libyuv/version.h | 2 +- unit_test/planar_test.cc | 95 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 97 insertions(+), 2 deletions(-) diff --git a/README.chromium b/README.chromium index c86ef0c85..252614510 100644 --- a/README.chromium +++ b/README.chromium @@ -1,6 +1,6 @@ Name: libyuv URL: http://code.google.com/p/libyuv/ -Version: 1614 +Version: 1615 License: BSD License File: LICENSE diff --git a/include/libyuv/version.h b/include/libyuv/version.h index d4e89a235..18b481c2d 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 1614 +#define LIBYUV_VERSION 1615 #endif // INCLUDE_LIBYUV_VERSION_H_ NOLINT diff --git a/unit_test/planar_test.cc b/unit_test/planar_test.cc index bc0eebb52..d30d6b2e1 100644 --- a/unit_test/planar_test.cc +++ b/unit_test/planar_test.cc @@ -2358,4 +2358,99 @@ TEST_F(LibYUVPlanarTest, SetPlane_Opt) { EXPECT_EQ(0, max_diff); } +TEST_F(LibYUVPlanarTest, MergeUVPlane_Opt) { + const int kPixels = benchmark_width_ * benchmark_height_; + align_buffer_page_end(src_pixels, kPixels * 2); + align_buffer_page_end(tmp_pixels_u, kPixels); + align_buffer_page_end(tmp_pixels_v, kPixels); + align_buffer_page_end(dst_pixels_opt, kPixels * 2); + align_buffer_page_end(dst_pixels_c, kPixels * 2); + + MemRandomize(src_pixels, kPixels * 2); + MemRandomize(tmp_pixels_u, kPixels); + MemRandomize(tmp_pixels_v, kPixels); + MemRandomize(dst_pixels_opt, kPixels * 2); + MemRandomize(dst_pixels_c, kPixels * 2); + + MaskCpuFlags(disable_cpu_flags_); + SplitUVPlane(src_pixels, benchmark_width_ * 2, + tmp_pixels_u, benchmark_width_, + tmp_pixels_v, benchmark_width_, + benchmark_width_, benchmark_height_); + MergeUVPlane(tmp_pixels_u, benchmark_width_, + tmp_pixels_v, benchmark_width_, + dst_pixels_c, benchmark_width_ * 2, + benchmark_width_, benchmark_height_); + MaskCpuFlags(benchmark_cpu_info_); + + SplitUVPlane(src_pixels, benchmark_width_ * 2, + tmp_pixels_u, benchmark_width_, + tmp_pixels_v, benchmark_width_, + benchmark_width_, benchmark_height_); + + for (int i = 0; i < benchmark_iterations_; ++i) { + MergeUVPlane(tmp_pixels_u, benchmark_width_, + tmp_pixels_v, benchmark_width_, + dst_pixels_opt, benchmark_width_ * 2, + benchmark_width_, benchmark_height_); + } + + for (int i = 0; i < kPixels * 2; ++i) { + EXPECT_EQ(dst_pixels_c[i], dst_pixels_opt[i]); + } + + free_aligned_buffer_page_end(src_pixels); + free_aligned_buffer_page_end(tmp_pixels_u); + free_aligned_buffer_page_end(tmp_pixels_v); + free_aligned_buffer_page_end(dst_pixels_opt); + free_aligned_buffer_page_end(dst_pixels_c); +} + +TEST_F(LibYUVPlanarTest, SplitUVPlane_Opt) { + const int kPixels = benchmark_width_ * benchmark_height_; + align_buffer_page_end(src_pixels, kPixels * 2); + align_buffer_page_end(tmp_pixels_u, kPixels); + align_buffer_page_end(tmp_pixels_v, kPixels); + align_buffer_page_end(dst_pixels_opt, kPixels * 2); + align_buffer_page_end(dst_pixels_c, kPixels * 2); + + MemRandomize(src_pixels, kPixels * 2); + MemRandomize(tmp_pixels_u, kPixels); + MemRandomize(tmp_pixels_v, kPixels); + MemRandomize(dst_pixels_opt, kPixels * 2); + MemRandomize(dst_pixels_c, kPixels * 2); + + MaskCpuFlags(disable_cpu_flags_); + SplitUVPlane(src_pixels, benchmark_width_ * 2, + tmp_pixels_u, benchmark_width_, + tmp_pixels_v, benchmark_width_, + benchmark_width_, benchmark_height_); + MergeUVPlane(tmp_pixels_u, benchmark_width_, + tmp_pixels_v, benchmark_width_, + dst_pixels_c, benchmark_width_ * 2, + benchmark_width_, benchmark_height_); + MaskCpuFlags(benchmark_cpu_info_); + + for (int i = 0; i < benchmark_iterations_; ++i) { + SplitUVPlane(src_pixels, benchmark_width_ * 2, + tmp_pixels_u, benchmark_width_, + tmp_pixels_v, benchmark_width_, + benchmark_width_, benchmark_height_); + } + MergeUVPlane(tmp_pixels_u, benchmark_width_, + tmp_pixels_v, benchmark_width_, + dst_pixels_opt, benchmark_width_ * 2, + benchmark_width_, benchmark_height_); + + for (int i = 0; i < kPixels * 2; ++i) { + EXPECT_EQ(dst_pixels_c[i], dst_pixels_opt[i]); + } + + free_aligned_buffer_page_end(src_pixels); + free_aligned_buffer_page_end(tmp_pixels_u); + free_aligned_buffer_page_end(tmp_pixels_v); + free_aligned_buffer_page_end(dst_pixels_opt); + free_aligned_buffer_page_end(dst_pixels_c); +} + } // namespace libyuv