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 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
133 vp8_copy_mem16x16(running_avg->y_buffer + y_offset, avg_y_stride, | 133 vp8_copy_mem16x16(running_avg->y_buffer + y_offset, avg_y_stride, |
134 signal->thismb, sig_stride); | 134 signal->thismb, sig_stride); |
135 return FILTER_BLOCK; | 135 return FILTER_BLOCK; |
136 } | 136 } |
137 | 137 |
138 int vp8_denoiser_allocate(VP8_DENOISER *denoiser, int width, int height) | 138 int vp8_denoiser_allocate(VP8_DENOISER *denoiser, int width, int height) |
139 { | 139 { |
140 int i; | 140 int i; |
141 assert(denoiser); | 141 assert(denoiser); |
142 | 142 |
143 /* don't need one for intra start at 1 */ | 143 for (i = 0; i < MAX_REF_FRAMES; i++) |
144 for (i = 1; i < MAX_REF_FRAMES; i++) | |
145 { | 144 { |
146 denoiser->yv12_running_avg[i].flags = 0; | 145 denoiser->yv12_running_avg[i].flags = 0; |
147 | 146 |
148 if (vp8_yv12_alloc_frame_buffer(&(denoiser->yv12_running_avg[i]), width, | 147 if (vp8_yv12_alloc_frame_buffer(&(denoiser->yv12_running_avg[i]), width, |
149 height, VP8BORDERINPIXELS) | 148 height, VP8BORDERINPIXELS) |
150 < 0) | 149 < 0) |
151 { | 150 { |
152 vp8_denoiser_free(denoiser); | 151 vp8_denoiser_free(denoiser); |
153 return 1; | 152 return 1; |
154 } | 153 } |
(...skipping 13 matching lines...) Expand all Loading... |
168 vpx_memset(denoiser->yv12_mc_running_avg.buffer_alloc, 0, | 167 vpx_memset(denoiser->yv12_mc_running_avg.buffer_alloc, 0, |
169 denoiser->yv12_mc_running_avg.frame_size); | 168 denoiser->yv12_mc_running_avg.frame_size); |
170 return 0; | 169 return 0; |
171 } | 170 } |
172 | 171 |
173 void vp8_denoiser_free(VP8_DENOISER *denoiser) | 172 void vp8_denoiser_free(VP8_DENOISER *denoiser) |
174 { | 173 { |
175 int i; | 174 int i; |
176 assert(denoiser); | 175 assert(denoiser); |
177 | 176 |
178 /* we don't have one for intra ref frame */ | 177 for (i = 0; i < MAX_REF_FRAMES ; i++) |
179 for (i = 1; i < MAX_REF_FRAMES ; i++) | |
180 { | 178 { |
181 vp8_yv12_de_alloc_frame_buffer(&denoiser->yv12_running_avg[i]); | 179 vp8_yv12_de_alloc_frame_buffer(&denoiser->yv12_running_avg[i]); |
182 } | 180 } |
183 vp8_yv12_de_alloc_frame_buffer(&denoiser->yv12_mc_running_avg); | 181 vp8_yv12_de_alloc_frame_buffer(&denoiser->yv12_mc_running_avg); |
184 } | 182 } |
185 | 183 |
186 | 184 |
187 void vp8_denoiser_denoise_mb(VP8_DENOISER *denoiser, | 185 void vp8_denoiser_denoise_mb(VP8_DENOISER *denoiser, |
188 MACROBLOCK *x, | 186 MACROBLOCK *x, |
189 unsigned int best_sse, | 187 unsigned int best_sse, |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
284 if (best_sse > SSE_THRESHOLD || motion_magnitude2 | 282 if (best_sse > SSE_THRESHOLD || motion_magnitude2 |
285 > 8 * NOISE_MOTION_THRESHOLD) | 283 > 8 * NOISE_MOTION_THRESHOLD) |
286 { | 284 { |
287 decision = COPY_BLOCK; | 285 decision = COPY_BLOCK; |
288 } | 286 } |
289 | 287 |
290 if (decision == FILTER_BLOCK) | 288 if (decision == FILTER_BLOCK) |
291 { | 289 { |
292 /* Filter. */ | 290 /* Filter. */ |
293 decision = vp8_denoiser_filter(&denoiser->yv12_mc_running_avg, | 291 decision = vp8_denoiser_filter(&denoiser->yv12_mc_running_avg, |
294 &denoiser->yv12_running_avg[LAST_FRAME], | 292 &denoiser->yv12_running_avg[INTRA_FRAME], |
295 x, | 293 x, |
296 motion_magnitude2, | 294 motion_magnitude2, |
297 recon_yoffset, recon_uvoffset); | 295 recon_yoffset, recon_uvoffset); |
298 } | 296 } |
299 if (decision == COPY_BLOCK) | 297 if (decision == COPY_BLOCK) |
300 { | 298 { |
301 /* No filtering of this block; it differs too much from the predictor, | 299 /* No filtering of this block; it differs too much from the predictor, |
302 * or the motion vector magnitude is considered too big. | 300 * or the motion vector magnitude is considered too big. |
303 */ | 301 */ |
304 vp8_copy_mem16x16( | 302 vp8_copy_mem16x16( |
305 x->thismb, 16, | 303 x->thismb, 16, |
306 denoiser->yv12_running_avg[LAST_FRAME].y_buffer + recon_yoffset, | 304 denoiser->yv12_running_avg[INTRA_FRAME].y_buffer + recon_yoffset
, |
307 denoiser->yv12_running_avg[LAST_FRAME].y_stride); | 305 denoiser->yv12_running_avg[INTRA_FRAME].y_stride); |
308 } | 306 } |
309 } | 307 } |
OLD | NEW |