Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(442)

Side by Side Diff: source/libvpx/vp8/encoder/arm/neon/denoising_neon.c

Issue 290653003: libvpx: Pull from upstream (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/deps/third_party/libvpx/
Patch Set: Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2012 The WebM project authors. All Rights Reserved. 2 * Copyright (c) 2012 The WebM project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 27 matching lines...) Expand all
38 * motion correction motion correction 38 * motion correction motion correction
39 * [-255, -16] 3 -6 -7 39 * [-255, -16] 3 -6 -7
40 * [-15, -8] 2 -4 -5 40 * [-15, -8] 2 -4 -5
41 * [-7, -4] 1 -3 -4 41 * [-7, -4] 1 -3 -4
42 * [-3, 3] 0 diff diff 42 * [-3, 3] 0 diff diff
43 * [4, 7] 1 3 4 43 * [4, 7] 1 3 4
44 * [8, 15] 2 4 5 44 * [8, 15] 2 4 5
45 * [16, 255] 3 6 7 45 * [16, 255] 3 6 7
46 */ 46 */
47 47
48 int vp8_denoiser_filter_neon(YV12_BUFFER_CONFIG *mc_running_avg, 48 int vp8_denoiser_filter_neon(unsigned char *mc_running_avg_y,
49 YV12_BUFFER_CONFIG *running_avg, 49 int mc_running_avg_y_stride,
50 MACROBLOCK *signal, unsigned int motion_magnitude, 50 unsigned char *running_avg_y,
51 int y_offset, int uv_offset) { 51 int running_avg_y_stride,
52 unsigned char *sig, int sig_stride,
53 unsigned int motion_magnitude) {
52 /* If motion_magnitude is small, making the denoiser more aggressive by 54 /* If motion_magnitude is small, making the denoiser more aggressive by
53 * increasing the adjustment for each level, level1 adjustment is 55 * increasing the adjustment for each level, level1 adjustment is
54 * increased, the deltas stay the same. 56 * increased, the deltas stay the same.
55 */ 57 */
56 const uint8x16_t v_level1_adjustment = vdupq_n_u8( 58 const uint8x16_t v_level1_adjustment = vdupq_n_u8(
57 (motion_magnitude <= MOTION_MAGNITUDE_THRESHOLD) ? 4 : 3); 59 (motion_magnitude <= MOTION_MAGNITUDE_THRESHOLD) ? 4 : 3);
58 const uint8x16_t v_delta_level_1_and_2 = vdupq_n_u8(1); 60 const uint8x16_t v_delta_level_1_and_2 = vdupq_n_u8(1);
59 const uint8x16_t v_delta_level_2_and_3 = vdupq_n_u8(2); 61 const uint8x16_t v_delta_level_2_and_3 = vdupq_n_u8(2);
60 const uint8x16_t v_level1_threshold = vdupq_n_u8(4); 62 const uint8x16_t v_level1_threshold = vdupq_n_u8(4);
61 const uint8x16_t v_level2_threshold = vdupq_n_u8(8); 63 const uint8x16_t v_level2_threshold = vdupq_n_u8(8);
62 const uint8x16_t v_level3_threshold = vdupq_n_u8(16); 64 const uint8x16_t v_level3_threshold = vdupq_n_u8(16);
63
64 /* Local variables for array pointers and strides. */
65 unsigned char *sig = signal->thismb;
66 int sig_stride = 16;
67 unsigned char *mc_running_avg_y = mc_running_avg->y_buffer + y_offset;
68 int mc_running_avg_y_stride = mc_running_avg->y_stride;
69 unsigned char *running_avg_y = running_avg->y_buffer + y_offset;
70 int running_avg_y_stride = running_avg->y_stride;
71 int64x2_t v_sum_diff_total = vdupq_n_s64(0); 65 int64x2_t v_sum_diff_total = vdupq_n_s64(0);
72 66
73 /* Go over lines. */ 67 /* Go over lines. */
74 int i; 68 int i;
75 for (i = 0; i < 16; ++i) { 69 for (i = 0; i < 16; ++i) {
76 /* Load inputs. */ 70 /* Load inputs. */
77 const uint8x16_t v_sig = vld1q_u8(sig); 71 const uint8x16_t v_sig = vld1q_u8(sig);
78 const uint8x16_t v_mc_running_avg_y = vld1q_u8(mc_running_avg_y); 72 const uint8x16_t v_mc_running_avg_y = vld1q_u8(mc_running_avg_y);
79 73
80 /* Calculate absolute difference and sign masks. */ 74 /* Calculate absolute difference and sign masks. */
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
157 } 151 }
158 152
159 /* Tell above level that block was filtered. */ 153 /* Tell above level that block was filtered. */
160 running_avg_y -= running_avg_y_stride * 16; 154 running_avg_y -= running_avg_y_stride * 16;
161 sig -= sig_stride * 16; 155 sig -= sig_stride * 16;
162 156
163 vp8_copy_mem16x16(running_avg_y, running_avg_y_stride, sig, sig_stride); 157 vp8_copy_mem16x16(running_avg_y, running_avg_y_stride, sig, sig_stride);
164 158
165 return FILTER_BLOCK; 159 return FILTER_BLOCK;
166 } 160 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698