diff options
author | Frank Barchard <fbarchard@google.com> | 2020-04-17 11:08:04 -0700 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-04-17 19:22:29 +0000 |
commit | 2f48ffd42b8479181c9019710c62ba13ab5697fc (patch) | |
tree | f6bad6543b554c37966ef79bf907f2b5581d5442 /unit_test/planar_test.cc | |
parent | d4c3f45eb672e7bd008cac3347f3e21c955cbf7d (diff) | |
download | libyuv-2f48ffd42b8479181c9019710c62ba13ab5697fc.tar.gz |
HalfMergeUVPlane function and optimized I444ToNV12 and I444ToNV21
Bug: libyuv:858
Change-Id: Ie1f03a9acaff02ee8059cf1e5c2c2e5afcde8592
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/2154608
Commit-Queue: Frank Barchard <fbarchard@chromium.org>
Reviewed-by: richard winterton <rrwinterton@gmail.com>
Diffstat (limited to 'unit_test/planar_test.cc')
-rw-r--r-- | unit_test/planar_test.cc | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/unit_test/planar_test.cc b/unit_test/planar_test.cc index f97ad9a7..31a42535 100644 --- a/unit_test/planar_test.cc +++ b/unit_test/planar_test.cc @@ -21,6 +21,7 @@ #include "libyuv/cpu_id.h" #include "libyuv/planar_functions.h" #include "libyuv/rotate.h" +#include "libyuv/scale.h" #ifdef ENABLE_ROW_TESTS // row.h defines SIMD_ALIGNED, overriding unit_test.h @@ -3479,4 +3480,50 @@ TEST_F(LibYUVPlanarTest, TestGaussPlane_F32) { free_aligned_buffer_page_end(orig_pixels); } +TEST_F(LibYUVPlanarTest, HalfMergeUVPlane_Opt) { + // Round count up to multiple of 16 + int dst_width = (benchmark_width_ + 1) / 2; + int dst_height = (benchmark_height_ + 1) / 2; + align_buffer_page_end(src_pixels_u, benchmark_width_ * benchmark_height_); + align_buffer_page_end(src_pixels_v, benchmark_width_ * benchmark_height_); + align_buffer_page_end(tmp_pixels_u, dst_width * dst_height); + align_buffer_page_end(tmp_pixels_v, dst_width * dst_height); + align_buffer_page_end(dst_pixels_uv_opt, dst_width * 2 * dst_height); + align_buffer_page_end(dst_pixels_uv_c, dst_width * 2 * dst_height); + + MemRandomize(src_pixels_u, benchmark_width_ * benchmark_height_); + MemRandomize(src_pixels_v, benchmark_width_ * benchmark_height_); + MemRandomize(tmp_pixels_u, dst_width * dst_height); + MemRandomize(tmp_pixels_v, dst_width * dst_height); + MemRandomize(dst_pixels_uv_opt, dst_width * 2 * dst_height); + MemRandomize(dst_pixels_uv_c, dst_width * 2 * dst_height); + + ScalePlane(src_pixels_u, benchmark_width_, benchmark_width_, + benchmark_height_, + + tmp_pixels_u, dst_width, dst_width, dst_height, kFilterBilinear); + ScalePlane(src_pixels_v, benchmark_width_, benchmark_width_, + benchmark_height_, tmp_pixels_v, dst_width, dst_width, dst_height, + kFilterBilinear); + MergeUVPlane(tmp_pixels_u, dst_width, tmp_pixels_v, dst_width, + dst_pixels_uv_c, dst_width * 2, dst_width, dst_height); + + for (int i = 0; i < benchmark_iterations_; ++i) { + HalfMergeUVPlane(src_pixels_u, benchmark_width_, src_pixels_v, + benchmark_width_, dst_pixels_uv_opt, dst_width * 2, + benchmark_width_, benchmark_height_); + } + + for (int i = 0; i < dst_width * 2 * dst_height; ++i) { + EXPECT_EQ(dst_pixels_uv_c[i], dst_pixels_uv_opt[i]); + } + + free_aligned_buffer_page_end(src_pixels_u); + free_aligned_buffer_page_end(src_pixels_v); + free_aligned_buffer_page_end(tmp_pixels_u); + free_aligned_buffer_page_end(tmp_pixels_v); + free_aligned_buffer_page_end(dst_pixels_uv_opt); + free_aligned_buffer_page_end(dst_pixels_uv_c); +} + } // namespace libyuv |