| OLD | NEW |
| 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 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 44 * diff adjustment w/o motion correction adjustment w/ motion correction | 44 * diff adjustment w/o motion correction adjustment w/ motion correction |
| 45 * [-255, -16] -6 -7 | 45 * [-255, -16] -6 -7 |
| 46 * [-15, -8] -4 -5 | 46 * [-15, -8] -4 -5 |
| 47 * [-7, -4] -3 -4 | 47 * [-7, -4] -3 -4 |
| 48 * [-3, 3] diff diff | 48 * [-3, 3] diff diff |
| 49 * [4, 7] 3 4 | 49 * [4, 7] 3 4 |
| 50 * [8, 15] 4 5 | 50 * [8, 15] 4 5 |
| 51 * [16, 255] 6 7 | 51 * [16, 255] 6 7 |
| 52 */ | 52 */ |
| 53 | 53 |
| 54 int vp8_denoiser_filter_c(YV12_BUFFER_CONFIG *mc_running_avg, | 54 int vp8_denoiser_filter_c(unsigned char *mc_running_avg_y, int mc_avg_y_stride, |
| 55 YV12_BUFFER_CONFIG *running_avg, MACROBLOCK *signal, | 55 unsigned char *running_avg_y, int avg_y_stride, |
| 56 unsigned int motion_magnitude, int y_offset, | 56 unsigned char *sig, int sig_stride, |
| 57 int uv_offset) | 57 unsigned int motion_magnitude) |
| 58 { | 58 { |
| 59 unsigned char *sig = signal->thismb; | 59 unsigned char *running_avg_y_start = running_avg_y; |
| 60 int sig_stride = 16; | 60 unsigned char *sig_start = sig; |
| 61 unsigned char *mc_running_avg_y = mc_running_avg->y_buffer + y_offset; | |
| 62 int mc_avg_y_stride = mc_running_avg->y_stride; | |
| 63 unsigned char *running_avg_y = running_avg->y_buffer + y_offset; | |
| 64 int avg_y_stride = running_avg->y_stride; | |
| 65 int r, c, i; | 61 int r, c, i; |
| 66 int sum_diff = 0; | 62 int sum_diff = 0; |
| 67 int adj_val[3] = {3, 4, 6}; | 63 int adj_val[3] = {3, 4, 6}; |
| 68 | 64 |
| 69 /* If motion_magnitude is small, making the denoiser more aggressive by | 65 /* If motion_magnitude is small, making the denoiser more aggressive by |
| 70 * increasing the adjustment for each level. */ | 66 * increasing the adjustment for each level. */ |
| 71 if (motion_magnitude <= MOTION_MAGNITUDE_THRESHOLD) | 67 if (motion_magnitude <= MOTION_MAGNITUDE_THRESHOLD) |
| 72 { | 68 { |
| 73 for (i = 0; i < 3; i++) | 69 for (i = 0; i < 3; i++) |
| 74 adj_val[i] += 1; | 70 adj_val[i] += 1; |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 123 | 119 |
| 124 /* Update pointers for next iteration. */ | 120 /* Update pointers for next iteration. */ |
| 125 sig += sig_stride; | 121 sig += sig_stride; |
| 126 mc_running_avg_y += mc_avg_y_stride; | 122 mc_running_avg_y += mc_avg_y_stride; |
| 127 running_avg_y += avg_y_stride; | 123 running_avg_y += avg_y_stride; |
| 128 } | 124 } |
| 129 | 125 |
| 130 if (abs(sum_diff) > SUM_DIFF_THRESHOLD) | 126 if (abs(sum_diff) > SUM_DIFF_THRESHOLD) |
| 131 return COPY_BLOCK; | 127 return COPY_BLOCK; |
| 132 | 128 |
| 133 vp8_copy_mem16x16(running_avg->y_buffer + y_offset, avg_y_stride, | 129 vp8_copy_mem16x16(running_avg_y_start, avg_y_stride, sig_start, sig_stride); |
| 134 signal->thismb, sig_stride); | |
| 135 return FILTER_BLOCK; | 130 return FILTER_BLOCK; |
| 136 } | 131 } |
| 137 | 132 |
| 138 int vp8_denoiser_allocate(VP8_DENOISER *denoiser, int width, int height) | 133 int vp8_denoiser_allocate(VP8_DENOISER *denoiser, int width, int height) |
| 139 { | 134 { |
| 140 int i; | 135 int i; |
| 141 assert(denoiser); | 136 assert(denoiser); |
| 142 | 137 |
| 143 for (i = 0; i < MAX_REF_FRAMES; i++) | 138 for (i = 0; i < MAX_REF_FRAMES; i++) |
| 144 { | 139 { |
| (...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 278 mv_col = x->best_sse_mv.as_mv.col; | 273 mv_col = x->best_sse_mv.as_mv.col; |
| 279 motion_magnitude2 = mv_row * mv_row + mv_col * mv_col; | 274 motion_magnitude2 = mv_row * mv_row + mv_col * mv_col; |
| 280 if (best_sse > SSE_THRESHOLD || motion_magnitude2 | 275 if (best_sse > SSE_THRESHOLD || motion_magnitude2 |
| 281 > 8 * NOISE_MOTION_THRESHOLD) | 276 > 8 * NOISE_MOTION_THRESHOLD) |
| 282 { | 277 { |
| 283 decision = COPY_BLOCK; | 278 decision = COPY_BLOCK; |
| 284 } | 279 } |
| 285 | 280 |
| 286 if (decision == FILTER_BLOCK) | 281 if (decision == FILTER_BLOCK) |
| 287 { | 282 { |
| 283 unsigned char *mc_running_avg_y = |
| 284 denoiser->yv12_mc_running_avg.y_buffer + recon_yoffset; |
| 285 int mc_avg_y_stride = denoiser->yv12_mc_running_avg.y_stride; |
| 286 unsigned char *running_avg_y = |
| 287 denoiser->yv12_running_avg[INTRA_FRAME].y_buffer + recon_yoffset; |
| 288 int avg_y_stride = denoiser->yv12_running_avg[INTRA_FRAME].y_stride; |
| 289 |
| 288 /* Filter. */ | 290 /* Filter. */ |
| 289 decision = vp8_denoiser_filter(&denoiser->yv12_mc_running_avg, | 291 decision = vp8_denoiser_filter(mc_running_avg_y, mc_avg_y_stride, |
| 290 &denoiser->yv12_running_avg[INTRA_FRAME], | 292 running_avg_y, avg_y_stride, |
| 291 x, | 293 x->thismb, 16, motion_magnitude2); |
| 292 motion_magnitude2, | |
| 293 recon_yoffset, recon_uvoffset); | |
| 294 } | 294 } |
| 295 if (decision == COPY_BLOCK) | 295 if (decision == COPY_BLOCK) |
| 296 { | 296 { |
| 297 /* No filtering of this block; it differs too much from the predictor, | 297 /* No filtering of this block; it differs too much from the predictor, |
| 298 * or the motion vector magnitude is considered too big. | 298 * or the motion vector magnitude is considered too big. |
| 299 */ | 299 */ |
| 300 vp8_copy_mem16x16( | 300 vp8_copy_mem16x16( |
| 301 x->thismb, 16, | 301 x->thismb, 16, |
| 302 denoiser->yv12_running_avg[INTRA_FRAME].y_buffer + recon_yoffset
, | 302 denoiser->yv12_running_avg[INTRA_FRAME].y_buffer + recon_yoffset
, |
| 303 denoiser->yv12_running_avg[INTRA_FRAME].y_stride); | 303 denoiser->yv12_running_avg[INTRA_FRAME].y_stride); |
| 304 } | 304 } |
| 305 } | 305 } |
| OLD | NEW |