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

Side by Side Diff: source/libvpx/vp8/encoder/picklpf.c

Issue 554673004: libvpx: Pull from upstream (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/deps/third_party/libvpx/
Patch Set: Created 6 years, 3 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
« no previous file with comments | « source/libvpx/vp8/encoder/pickinter.c ('k') | source/libvpx/vp8/vp8_common.mk » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2010 The WebM project authors. All Rights Reserved. 2 * Copyright (c) 2010 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
11 11
12 #include "./vpx_scale_rtcd.h" 12 #include "./vpx_scale_rtcd.h"
13 #include "vp8/common/onyxc_int.h" 13 #include "vp8/common/onyxc_int.h"
14 #include "onyx_int.h" 14 #include "onyx_int.h"
15 #include "quantize.h" 15 #include "quantize.h"
16 #include "vpx_mem/vpx_mem.h" 16 #include "vpx_mem/vpx_mem.h"
17 #include "vpx_scale/vpx_scale.h" 17 #include "vpx_scale/vpx_scale.h"
18 #include "vp8/common/alloccommon.h" 18 #include "vp8/common/alloccommon.h"
19 #include "vp8/common/loopfilter.h" 19 #include "vp8/common/loopfilter.h"
20 #if ARCH_ARM 20 #if ARCH_ARM
21 #include "vpx_ports/arm.h" 21 #include "vpx_ports/arm.h"
22 #endif 22 #endif
23 23
24 extern int vp8_calc_ss_err(YV12_BUFFER_CONFIG *source, YV12_BUFFER_CONFIG *dest) ; 24 extern int vp8_calc_ss_err(YV12_BUFFER_CONFIG *source, YV12_BUFFER_CONFIG *dest) ;
25 25
26 void vp8_yv12_copy_partial_frame_c(YV12_BUFFER_CONFIG *src_ybc, 26 static void yv12_copy_partial_frame(YV12_BUFFER_CONFIG *src_ybc,
27 YV12_BUFFER_CONFIG *dst_ybc) 27 YV12_BUFFER_CONFIG *dst_ybc)
28 { 28 {
29 unsigned char *src_y, *dst_y; 29 unsigned char *src_y, *dst_y;
30 int yheight; 30 int yheight;
31 int ystride; 31 int ystride;
32 int yoffset; 32 int yoffset;
33 int linestocopy; 33 int linestocopy;
34 34
35 yheight = src_ybc->y_height; 35 yheight = src_ybc->y_height;
36 ystride = src_ybc->y_stride; 36 ystride = src_ybc->y_stride;
37 37
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
166 cm->filter_level = min_filter_level; 166 cm->filter_level = min_filter_level;
167 else if (cm->filter_level > max_filter_level) 167 else if (cm->filter_level > max_filter_level)
168 cm->filter_level = max_filter_level; 168 cm->filter_level = max_filter_level;
169 169
170 filt_val = cm->filter_level; 170 filt_val = cm->filter_level;
171 best_filt_val = filt_val; 171 best_filt_val = filt_val;
172 172
173 /* Get the err using the previous frame's filter value. */ 173 /* Get the err using the previous frame's filter value. */
174 174
175 /* Copy the unfiltered / processed recon buffer to the new buffer */ 175 /* Copy the unfiltered / processed recon buffer to the new buffer */
176 vp8_yv12_copy_partial_frame(saved_frame, cm->frame_to_show); 176 yv12_copy_partial_frame(saved_frame, cm->frame_to_show);
177 vp8_loop_filter_partial_frame(cm, &cpi->mb.e_mbd, filt_val); 177 vp8_loop_filter_partial_frame(cm, &cpi->mb.e_mbd, filt_val);
178 178
179 best_err = calc_partial_ssl_err(sd, cm->frame_to_show); 179 best_err = calc_partial_ssl_err(sd, cm->frame_to_show);
180 180
181 filt_val -= 1 + (filt_val > 10); 181 filt_val -= 1 + (filt_val > 10);
182 182
183 /* Search lower filter levels */ 183 /* Search lower filter levels */
184 while (filt_val >= min_filter_level) 184 while (filt_val >= min_filter_level)
185 { 185 {
186 /* Apply the loop filter */ 186 /* Apply the loop filter */
187 vp8_yv12_copy_partial_frame(saved_frame, cm->frame_to_show); 187 yv12_copy_partial_frame(saved_frame, cm->frame_to_show);
188 vp8_loop_filter_partial_frame(cm, &cpi->mb.e_mbd, filt_val); 188 vp8_loop_filter_partial_frame(cm, &cpi->mb.e_mbd, filt_val);
189 189
190 /* Get the err for filtered frame */ 190 /* Get the err for filtered frame */
191 filt_err = calc_partial_ssl_err(sd, cm->frame_to_show); 191 filt_err = calc_partial_ssl_err(sd, cm->frame_to_show);
192 192
193 /* Update the best case record or exit loop. */ 193 /* Update the best case record or exit loop. */
194 if (filt_err < best_err) 194 if (filt_err < best_err)
195 { 195 {
196 best_err = filt_err; 196 best_err = filt_err;
197 best_filt_val = filt_val; 197 best_filt_val = filt_val;
198 } 198 }
199 else 199 else
200 break; 200 break;
201 201
202 /* Adjust filter level */ 202 /* Adjust filter level */
203 filt_val -= 1 + (filt_val > 10); 203 filt_val -= 1 + (filt_val > 10);
204 } 204 }
205 205
206 /* Search up (note that we have already done filt_val = cm->filter_level) */ 206 /* Search up (note that we have already done filt_val = cm->filter_level) */
207 filt_val = cm->filter_level + 1 + (filt_val > 10); 207 filt_val = cm->filter_level + 1 + (filt_val > 10);
208 208
209 if (best_filt_val == cm->filter_level) 209 if (best_filt_val == cm->filter_level)
210 { 210 {
211 /* Resist raising filter level for very small gains */ 211 /* Resist raising filter level for very small gains */
212 best_err -= (best_err >> 10); 212 best_err -= (best_err >> 10);
213 213
214 while (filt_val < max_filter_level) 214 while (filt_val < max_filter_level)
215 { 215 {
216 /* Apply the loop filter */ 216 /* Apply the loop filter */
217 vp8_yv12_copy_partial_frame(saved_frame, cm->frame_to_show); 217 yv12_copy_partial_frame(saved_frame, cm->frame_to_show);
218 218
219 vp8_loop_filter_partial_frame(cm, &cpi->mb.e_mbd, filt_val); 219 vp8_loop_filter_partial_frame(cm, &cpi->mb.e_mbd, filt_val);
220 220
221 /* Get the err for filtered frame */ 221 /* Get the err for filtered frame */
222 filt_err = calc_partial_ssl_err(sd, cm->frame_to_show); 222 filt_err = calc_partial_ssl_err(sd, cm->frame_to_show);
223 223
224 /* Update the best case record or exit loop. */ 224 /* Update the best case record or exit loop. */
225 if (filt_err < best_err) 225 if (filt_err < best_err)
226 { 226 {
227 /* Do not raise filter level if improvement is < 1 part 227 /* Do not raise filter level if improvement is < 1 part
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
398 filt_direction = (filt_best < filt_mid) ? -1 : 1; 398 filt_direction = (filt_best < filt_mid) ? -1 : 1;
399 filt_mid = filt_best; 399 filt_mid = filt_best;
400 } 400 }
401 } 401 }
402 402
403 cm->filter_level = filt_best; 403 cm->filter_level = filt_best;
404 404
405 /* restore unfiltered frame pointer */ 405 /* restore unfiltered frame pointer */
406 cm->frame_to_show = saved_frame; 406 cm->frame_to_show = saved_frame;
407 } 407 }
OLDNEW
« no previous file with comments | « source/libvpx/vp8/encoder/pickinter.c ('k') | source/libvpx/vp8/vp8_common.mk » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698