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