From 7a91d21d69573b1cefb709d7a97fb6eed8dcbae6 Mon Sep 17 00:00:00 2001 From: Jim Bankoski Date: Sat, 7 May 2016 12:47:49 -0700 Subject: [PATCH] libvpx: vpx_add_plane_noise make c match assembly This change makes the c match the assembly and removes the todo's associated with getting this to work. Change-Id: Ie32e9ebb584a9d60399662d8bcb71b74fbd19d1e --- test/add_noise_test.cc | 5 +++-- vpx_dsp/postproc.c | 13 +++++-------- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/test/add_noise_test.cc b/test/add_noise_test.cc index 96e3afbee..d25e4f5f5 100644 --- a/test/add_noise_test.cc +++ b/test/add_noise_test.cc @@ -144,8 +144,7 @@ TEST_P(AddNoiseTest, CheckNoiseAdded) { vpx_free(s); } -// TODO(jimbankoski): Make the c work like assembly so we can enable this. -TEST_P(AddNoiseTest, DISABLED_CheckCvsAssembly) { +TEST_P(AddNoiseTest, CheckCvsAssembly) { DECLARE_ALIGNED(16, char, blackclamp[16]); DECLARE_ALIGNED(16, char, whiteclamp[16]); DECLARE_ALIGNED(16, char, bothclamp[16]); @@ -167,8 +166,10 @@ TEST_P(AddNoiseTest, DISABLED_CheckCvsAssembly) { memset(s, 99, image_size); memset(d, 99, image_size); + srand(0); ASM_REGISTER_STATE_CHECK(GetParam()(s, noise, blackclamp, whiteclamp, bothclamp, width, height, width)); + srand(0); ASM_REGISTER_STATE_CHECK(vpx_plane_add_noise_c(d, noise, blackclamp, whiteclamp, bothclamp, width, height, width)); diff --git a/vpx_dsp/postproc.c b/vpx_dsp/postproc.c index c337e6e9b..682b44419 100644 --- a/vpx_dsp/postproc.c +++ b/vpx_dsp/postproc.c @@ -23,21 +23,18 @@ void vpx_plane_add_noise_c(uint8_t *start, char *noise, unsigned int width, unsigned int height, int pitch) { unsigned int i, j; - // TODO(jbb): why does simd code use both but c doesn't, normalize and - // fix.. - (void) bothclamp; for (i = 0; i < height; i++) { uint8_t *pos = start + i * pitch; char *ref = (char *)(noise + (rand() & 0xff)); // NOLINT for (j = 0; j < width; j++) { - if (pos[j] < blackclamp[0]) - pos[j] = blackclamp[0]; + int v = pos[j]; - if (pos[j] > 255 - whiteclamp[0]) - pos[j] = 255 - whiteclamp[0]; + v = clamp(v - blackclamp[0], 0, 255); + v = clamp(v + bothclamp[0], 0, 255); + v = clamp(v - whiteclamp[0], 0, 255); - pos[j] += ref[j]; + pos[j] = v + ref[j]; } } }