aboutsummaryrefslogtreecommitdiff
path: root/unit_test/planar_test.cc
diff options
context:
space:
mode:
authorFrank Barchard <fbarchard@google.com>2020-04-17 11:08:04 -0700
committerCommit Bot <commit-bot@chromium.org>2020-04-17 19:22:29 +0000
commit2f48ffd42b8479181c9019710c62ba13ab5697fc (patch)
treef6bad6543b554c37966ef79bf907f2b5581d5442 /unit_test/planar_test.cc
parentd4c3f45eb672e7bd008cac3347f3e21c955cbf7d (diff)
downloadlibyuv-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.cc47
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