From a4205478657d79ac0090d2db2a0103fb55230f7b Mon Sep 17 00:00:00 2001 From: Zhaoliang Ma Date: Fri, 27 Nov 2020 23:23:38 +0800 Subject: [PATCH] modules/video_processing: replace copy memory with libyuv::CopyPlane Bug: None Change-Id: I4c41117028a6602e8d2cb627868d015422ef0b15 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/195487 Reviewed-by: Stefan Holmer Commit-Queue: Zhaoliang Ma Cr-Commit-Position: refs/heads/master@{#32724} --- .../video_processing/test/denoiser_test.cc | 20 --------------- .../video_processing/util/denoiser_filter.h | 5 ---- .../util/denoiser_filter_c.cc | 11 -------- .../video_processing/util/denoiser_filter_c.h | 4 --- .../util/denoiser_filter_neon.cc | 13 ---------- .../util/denoiser_filter_neon.h | 4 --- .../util/denoiser_filter_sse2.cc | 12 --------- .../util/denoiser_filter_sse2.h | 4 --- modules/video_processing/video_denoiser.cc | 25 ++++++------------- 9 files changed, 7 insertions(+), 91 deletions(-) diff --git a/modules/video_processing/test/denoiser_test.cc b/modules/video_processing/test/denoiser_test.cc index 4707eb5950..28ba702b3a 100644 --- a/modules/video_processing/test/denoiser_test.cc +++ b/modules/video_processing/test/denoiser_test.cc @@ -27,26 +27,6 @@ namespace webrtc { -TEST(VideoDenoiserTest, CopyMem) { - std::unique_ptr df_c(DenoiserFilter::Create(false, nullptr)); - std::unique_ptr df_sse_neon( - DenoiserFilter::Create(true, nullptr)); - uint8_t src[16 * 16], dst[16 * 16]; - for (int i = 0; i < 16; ++i) { - for (int j = 0; j < 16; ++j) { - src[i * 16 + j] = i * 16 + j; - } - } - - memset(dst, 0, 16 * 16); - df_c->CopyMem16x16(src, 16, dst, 16); - EXPECT_EQ(0, memcmp(src, dst, 16 * 16)); - - memset(dst, 0, 16 * 16); - df_sse_neon->CopyMem16x16(src, 16, dst, 16); - EXPECT_EQ(0, memcmp(src, dst, 16 * 16)); -} - TEST(VideoDenoiserTest, Variance) { std::unique_ptr df_c(DenoiserFilter::Create(false, nullptr)); std::unique_ptr df_sse_neon( diff --git a/modules/video_processing/util/denoiser_filter.h b/modules/video_processing/util/denoiser_filter.h index 0db50471e0..1d574f4a4f 100644 --- a/modules/video_processing/util/denoiser_filter.h +++ b/modules/video_processing/util/denoiser_filter.h @@ -30,11 +30,6 @@ class DenoiserFilter { CpuType* cpu_type); virtual ~DenoiserFilter() {} - - virtual void CopyMem16x16(const uint8_t* src, - int src_stride, - uint8_t* dst, - int dst_stride) = 0; virtual uint32_t Variance16x8(const uint8_t* a, int a_stride, const uint8_t* b, diff --git a/modules/video_processing/util/denoiser_filter_c.cc b/modules/video_processing/util/denoiser_filter_c.cc index b1831a6775..5411e556e7 100644 --- a/modules/video_processing/util/denoiser_filter_c.cc +++ b/modules/video_processing/util/denoiser_filter_c.cc @@ -15,17 +15,6 @@ namespace webrtc { -void DenoiserFilterC::CopyMem16x16(const uint8_t* src, - int src_stride, - uint8_t* dst, - int dst_stride) { - for (int i = 0; i < 16; i++) { - memcpy(dst, src, 16); - src += src_stride; - dst += dst_stride; - } -} - uint32_t DenoiserFilterC::Variance16x8(const uint8_t* a, int a_stride, const uint8_t* b, diff --git a/modules/video_processing/util/denoiser_filter_c.h b/modules/video_processing/util/denoiser_filter_c.h index f05663e1a2..5633c171f0 100644 --- a/modules/video_processing/util/denoiser_filter_c.h +++ b/modules/video_processing/util/denoiser_filter_c.h @@ -20,10 +20,6 @@ namespace webrtc { class DenoiserFilterC : public DenoiserFilter { public: DenoiserFilterC() {} - void CopyMem16x16(const uint8_t* src, - int src_stride, - uint8_t* dst, - int dst_stride) override; uint32_t Variance16x8(const uint8_t* a, int a_stride, const uint8_t* b, diff --git a/modules/video_processing/util/denoiser_filter_neon.cc b/modules/video_processing/util/denoiser_filter_neon.cc index 4eabe02ea9..e1e6ed4f18 100644 --- a/modules/video_processing/util/denoiser_filter_neon.cc +++ b/modules/video_processing/util/denoiser_filter_neon.cc @@ -64,19 +64,6 @@ static void VarianceNeonW8(const uint8_t* a, static_cast(HorizontalAddS32x4(vaddq_s32(v_sse_lo, v_sse_hi))); } -void DenoiserFilterNEON::CopyMem16x16(const uint8_t* src, - int src_stride, - uint8_t* dst, - int dst_stride) { - uint8x16_t qtmp; - for (int r = 0; r < 16; r++) { - qtmp = vld1q_u8(src); - vst1q_u8(dst, qtmp); - src += src_stride; - dst += dst_stride; - } -} - uint32_t DenoiserFilterNEON::Variance16x8(const uint8_t* a, int a_stride, const uint8_t* b, diff --git a/modules/video_processing/util/denoiser_filter_neon.h b/modules/video_processing/util/denoiser_filter_neon.h index decbd41c0d..4d9f271e5a 100644 --- a/modules/video_processing/util/denoiser_filter_neon.h +++ b/modules/video_processing/util/denoiser_filter_neon.h @@ -18,10 +18,6 @@ namespace webrtc { class DenoiserFilterNEON : public DenoiserFilter { public: DenoiserFilterNEON() {} - void CopyMem16x16(const uint8_t* src, - int src_stride, - uint8_t* dst, - int dst_stride) override; uint32_t Variance16x8(const uint8_t* a, int a_stride, const uint8_t* b, diff --git a/modules/video_processing/util/denoiser_filter_sse2.cc b/modules/video_processing/util/denoiser_filter_sse2.cc index 281169bcc2..5ca5f0cf34 100644 --- a/modules/video_processing/util/denoiser_filter_sse2.cc +++ b/modules/video_processing/util/denoiser_filter_sse2.cc @@ -100,18 +100,6 @@ static uint32_t AbsSumDiff16x1(__m128i acc_diff) { return sum_diff; } -// TODO(jackychen): Optimize this function using SSE2. -void DenoiserFilterSSE2::CopyMem16x16(const uint8_t* src, - int src_stride, - uint8_t* dst, - int dst_stride) { - for (int i = 0; i < 16; i++) { - memcpy(dst, src, 16); - src += src_stride; - dst += dst_stride; - } -} - uint32_t DenoiserFilterSSE2::Variance16x8(const uint8_t* src, int src_stride, const uint8_t* ref, diff --git a/modules/video_processing/util/denoiser_filter_sse2.h b/modules/video_processing/util/denoiser_filter_sse2.h index 6fb7279a2d..8fe4b905ae 100644 --- a/modules/video_processing/util/denoiser_filter_sse2.h +++ b/modules/video_processing/util/denoiser_filter_sse2.h @@ -20,10 +20,6 @@ namespace webrtc { class DenoiserFilterSSE2 : public DenoiserFilter { public: DenoiserFilterSSE2() {} - void CopyMem16x16(const uint8_t* src, - int src_stride, - uint8_t* dst, - int dst_stride) override; uint32_t Variance16x8(const uint8_t* a, int a_stride, const uint8_t* b, diff --git a/modules/video_processing/video_denoiser.cc b/modules/video_processing/video_denoiser.cc index 3a18125146..1d844e61de 100644 --- a/modules/video_processing/video_denoiser.cc +++ b/modules/video_processing/video_denoiser.cc @@ -19,17 +19,6 @@ namespace webrtc { #if DISPLAY || DISPLAYNEON -static void CopyMem8x8(const uint8_t* src, - int src_stride, - uint8_t* dst, - int dst_stride) { - for (int i = 0; i < 8; i++) { - memcpy(dst, src, 8); - src += src_stride; - dst += dst_stride; - } -} - static void ShowRect(const std::unique_ptr& filter, const std::unique_ptr& d_status, const std::unique_ptr& moving_edge_red, @@ -58,16 +47,16 @@ static void ShowRect(const std::unique_ptr& filter, memset(uv_tmp, 200, 8 * 8); if (d_status[mb_index] == 1) { // Paint to red. - CopyMem8x8(mb_src_u, stride_u_src, mb_dst_u, stride_u_dst); - CopyMem8x8(uv_tmp, 8, mb_dst_v, stride_v_dst); + libyuv::CopyPlane(mb_src_u, stride_u_src, mb_dst_u, stride_u_dst, 8, 8); + libyuv::CopyPlane(uv_tmp, 8, mb_dst_v, stride_v_dst, 8, 8); } else if (moving_edge_red[mb_row * mb_cols_ + mb_col] && x_density[mb_col] * y_density[mb_row]) { // Paint to blue. - CopyMem8x8(uv_tmp, 8, mb_dst_u, stride_u_dst); - CopyMem8x8(mb_src_v, stride_v_src, mb_dst_v, stride_v_dst); + libyuv::CopyPlane(uv_tmp, 8, mb_dst_u, stride_u_dst, 8, 8); + libyuv::CopyPlane(mb_src_v, stride_v_src, mb_dst_v, stride_v_dst, 8, 8); } else { - CopyMem8x8(mb_src_u, stride_u_src, mb_dst_u, stride_u_dst); - CopyMem8x8(mb_src_v, stride_v_src, mb_dst_v, stride_v_dst); + libyuv::CopyPlane(mb_src_u, stride_u_src, mb_dst_u, stride_u_dst, 8, 8); + libyuv::CopyPlane(mb_src_v, stride_v_src, mb_dst_v, stride_v_dst, 8, 8); } } } @@ -194,7 +183,7 @@ void VideoDenoiser::CopySrcOnMOB(const uint8_t* y_src, (x_density_[mb_col] * y_density_[mb_row] && moving_object_[mb_row * mb_cols_ + mb_col])) { // Copy y source. - filter_->CopyMem16x16(mb_src, stride_src, mb_dst, stride_dst); + libyuv::CopyPlane(mb_src, stride_src, mb_dst, stride_dst, 16, 16); } } }