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 <stefan@webrtc.org> Commit-Queue: Zhaoliang Ma <zhaoliang.ma@intel.com> Cr-Commit-Position: refs/heads/master@{#32724}
This commit is contained in:
parent
b3f1e0fdb4
commit
a420547865
@ -27,26 +27,6 @@
|
||||
|
||||
namespace webrtc {
|
||||
|
||||
TEST(VideoDenoiserTest, CopyMem) {
|
||||
std::unique_ptr<DenoiserFilter> df_c(DenoiserFilter::Create(false, nullptr));
|
||||
std::unique_ptr<DenoiserFilter> 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<DenoiserFilter> df_c(DenoiserFilter::Create(false, nullptr));
|
||||
std::unique_ptr<DenoiserFilter> df_sse_neon(
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -64,19 +64,6 @@ static void VarianceNeonW8(const uint8_t* a,
|
||||
static_cast<uint32_t>(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,
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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<DenoiserFilter>& filter,
|
||||
const std::unique_ptr<uint8_t[]>& d_status,
|
||||
const std::unique_ptr<uint8_t[]>& moving_edge_red,
|
||||
@ -58,16 +47,16 @@ static void ShowRect(const std::unique_ptr<DenoiserFilter>& 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user