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

Side by Side Diff: source/libvpx/vp9/encoder/vp9_temporal_filter.c

Issue 232133009: libvpx: Pull from upstream (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/deps/third_party/libvpx/
Patch Set: Created 6 years, 8 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) 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
(...skipping 23 matching lines...) Expand all
34 uint8_t *u_mb_ptr, 34 uint8_t *u_mb_ptr,
35 uint8_t *v_mb_ptr, 35 uint8_t *v_mb_ptr,
36 int stride, 36 int stride,
37 int uv_block_size, 37 int uv_block_size,
38 int mv_row, 38 int mv_row,
39 int mv_col, 39 int mv_col,
40 uint8_t *pred, 40 uint8_t *pred,
41 struct scale_factors *scale, 41 struct scale_factors *scale,
42 int x, int y) { 42 int x, int y) {
43 const int which_mv = 0; 43 const int which_mv = 0;
44 MV mv = { mv_row, mv_col }; 44 const MV mv = { mv_row, mv_col };
45 const InterpKernel *const kernel =
46 vp9_get_interp_kernel(xd->mi[0]->mbmi.interp_filter);
47
45 enum mv_precision mv_precision_uv; 48 enum mv_precision mv_precision_uv;
46 int uv_stride; 49 int uv_stride;
47 if (uv_block_size == 8) { 50 if (uv_block_size == 8) {
48 uv_stride = (stride + 1) >> 1; 51 uv_stride = (stride + 1) >> 1;
49 mv_precision_uv = MV_PRECISION_Q4; 52 mv_precision_uv = MV_PRECISION_Q4;
50 } else { 53 } else {
51 uv_stride = stride; 54 uv_stride = stride;
52 mv_precision_uv = MV_PRECISION_Q3; 55 mv_precision_uv = MV_PRECISION_Q3;
53 } 56 }
54 57
55 vp9_build_inter_predictor(y_mb_ptr, stride, 58 vp9_build_inter_predictor(y_mb_ptr, stride,
56 &pred[0], 16, 59 &pred[0], 16,
57 &mv, 60 &mv,
58 scale, 61 scale,
59 16, 16, 62 16, 16,
60 which_mv, 63 which_mv,
61 xd->interp_kernel, MV_PRECISION_Q3, x, y); 64 kernel, MV_PRECISION_Q3, x, y);
62 65
63 vp9_build_inter_predictor(u_mb_ptr, uv_stride, 66 vp9_build_inter_predictor(u_mb_ptr, uv_stride,
64 &pred[256], uv_block_size, 67 &pred[256], uv_block_size,
65 &mv, 68 &mv,
66 scale, 69 scale,
67 uv_block_size, uv_block_size, 70 uv_block_size, uv_block_size,
68 which_mv, 71 which_mv,
69 xd->interp_kernel, mv_precision_uv, x, y); 72 kernel, mv_precision_uv, x, y);
70 73
71 vp9_build_inter_predictor(v_mb_ptr, uv_stride, 74 vp9_build_inter_predictor(v_mb_ptr, uv_stride,
72 &pred[512], uv_block_size, 75 &pred[512], uv_block_size,
73 &mv, 76 &mv,
74 scale, 77 scale,
75 uv_block_size, uv_block_size, 78 uv_block_size, uv_block_size,
76 which_mv, 79 which_mv,
77 xd->interp_kernel, mv_precision_uv, x, y); 80 kernel, mv_precision_uv, x, y);
78 } 81 }
79 82
80 void vp9_temporal_filter_apply_c(uint8_t *frame1, 83 void vp9_temporal_filter_apply_c(uint8_t *frame1,
81 unsigned int stride, 84 unsigned int stride,
82 uint8_t *frame2, 85 uint8_t *frame2,
83 unsigned int block_size, 86 unsigned int block_size,
84 int strength, 87 int strength,
85 int filter_weight, 88 int filter_weight,
86 unsigned int *accumulator, 89 unsigned int *accumulator,
87 uint16_t *count) { 90 uint16_t *count) {
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
126 uint8_t *frame_ptr_buf, 129 uint8_t *frame_ptr_buf,
127 int stride) { 130 int stride) {
128 MACROBLOCK *x = &cpi->mb; 131 MACROBLOCK *x = &cpi->mb;
129 MACROBLOCKD* const xd = &x->e_mbd; 132 MACROBLOCKD* const xd = &x->e_mbd;
130 int step_param; 133 int step_param;
131 int sadpb = x->sadperbit16; 134 int sadpb = x->sadperbit16;
132 int bestsme = INT_MAX; 135 int bestsme = INT_MAX;
133 136
134 MV best_ref_mv1 = {0, 0}; 137 MV best_ref_mv1 = {0, 0};
135 MV best_ref_mv1_full; /* full-pixel value of best_ref_mv1 */ 138 MV best_ref_mv1_full; /* full-pixel value of best_ref_mv1 */
136 MV *ref_mv = &x->e_mbd.mi_8x8[0]->bmi[0].as_mv[0].as_mv; 139 MV *ref_mv = &x->e_mbd.mi[0]->bmi[0].as_mv[0].as_mv;
137 140
138 // Save input state 141 // Save input state
139 struct buf_2d src = x->plane[0].src; 142 struct buf_2d src = x->plane[0].src;
140 struct buf_2d pre = xd->plane[0].pre[0]; 143 struct buf_2d pre = xd->plane[0].pre[0];
141 144
142 best_ref_mv1_full.col = best_ref_mv1.col >> 3; 145 best_ref_mv1_full.col = best_ref_mv1.col >> 3;
143 best_ref_mv1_full.row = best_ref_mv1.row >> 3; 146 best_ref_mv1_full.row = best_ref_mv1.row >> 3;
144 147
145 // Setup frame pointers 148 // Setup frame pointers
146 x->plane[0].src.buf = arf_frame_buf; 149 x->plane[0].src.buf = arf_frame_buf;
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
243 #if ALT_REF_MC_ENABLED 246 #if ALT_REF_MC_ENABLED
244 cpi->mb.mv_col_min = -((mb_col * 16) + (17 - 2 * VP9_INTERP_EXTEND)); 247 cpi->mb.mv_col_min = -((mb_col * 16) + (17 - 2 * VP9_INTERP_EXTEND));
245 cpi->mb.mv_col_max = ((cpi->common.mb_cols - 1 - mb_col) * 16) 248 cpi->mb.mv_col_max = ((cpi->common.mb_cols - 1 - mb_col) * 16)
246 + (17 - 2 * VP9_INTERP_EXTEND); 249 + (17 - 2 * VP9_INTERP_EXTEND);
247 #endif 250 #endif
248 251
249 for (frame = 0; frame < frame_count; frame++) { 252 for (frame = 0; frame < frame_count; frame++) {
250 if (cpi->frames[frame] == NULL) 253 if (cpi->frames[frame] == NULL)
251 continue; 254 continue;
252 255
253 mbd->mi_8x8[0]->bmi[0].as_mv[0].as_mv.row = 0; 256 mbd->mi[0]->bmi[0].as_mv[0].as_mv.row = 0;
254 mbd->mi_8x8[0]->bmi[0].as_mv[0].as_mv.col = 0; 257 mbd->mi[0]->bmi[0].as_mv[0].as_mv.col = 0;
255 258
256 if (frame == alt_ref_index) { 259 if (frame == alt_ref_index) {
257 filter_weight = 2; 260 filter_weight = 2;
258 } else { 261 } else {
259 int err = 0; 262 int err = 0;
260 #if ALT_REF_MC_ENABLED 263 #if ALT_REF_MC_ENABLED
261 #define THRESH_LOW 10000 264 #define THRESH_LOW 10000
262 #define THRESH_HIGH 20000 265 #define THRESH_HIGH 20000
263 266
264 // Find best match in this frame by MC 267 // Find best match in this frame by MC
(...skipping 12 matching lines...) Expand all
277 280
278 if (filter_weight != 0) { 281 if (filter_weight != 0) {
279 // Construct the predictors 282 // Construct the predictors
280 temporal_filter_predictors_mb_c 283 temporal_filter_predictors_mb_c
281 (mbd, 284 (mbd,
282 cpi->frames[frame]->y_buffer + mb_y_offset, 285 cpi->frames[frame]->y_buffer + mb_y_offset,
283 cpi->frames[frame]->u_buffer + mb_uv_offset, 286 cpi->frames[frame]->u_buffer + mb_uv_offset,
284 cpi->frames[frame]->v_buffer + mb_uv_offset, 287 cpi->frames[frame]->v_buffer + mb_uv_offset,
285 cpi->frames[frame]->y_stride, 288 cpi->frames[frame]->y_stride,
286 mb_uv_height, 289 mb_uv_height,
287 mbd->mi_8x8[0]->bmi[0].as_mv[0].as_mv.row, 290 mbd->mi[0]->bmi[0].as_mv[0].as_mv.row,
288 mbd->mi_8x8[0]->bmi[0].as_mv[0].as_mv.col, 291 mbd->mi[0]->bmi[0].as_mv[0].as_mv.col,
289 predictor, scale, 292 predictor, scale,
290 mb_col * 16, mb_row * 16); 293 mb_col * 16, mb_row * 16);
291 294
292 // Apply the filter (YUV) 295 // Apply the filter (YUV)
293 vp9_temporal_filter_apply(f->y_buffer + mb_y_offset, f->y_stride, 296 vp9_temporal_filter_apply(f->y_buffer + mb_y_offset, f->y_stride,
294 predictor, 16, strength, filter_weight, 297 predictor, 16, strength, filter_weight,
295 accumulator, count); 298 accumulator, count);
296 299
297 vp9_temporal_filter_apply(f->u_buffer + mb_uv_offset, f->uv_stride, 300 vp9_temporal_filter_apply(f->u_buffer + mb_uv_offset, f->uv_stride,
298 predictor + 256, mb_uv_height, strength, 301 predictor + 256, mb_uv_height, strength,
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after
529 532
530 // Adjust number of frames in filter and strength based on gf boost level. 533 // Adjust number of frames in filter and strength based on gf boost level.
531 if (cpi->active_arnr_frames > (group_boost / 150)) { 534 if (cpi->active_arnr_frames > (group_boost / 150)) {
532 cpi->active_arnr_frames = (group_boost / 150); 535 cpi->active_arnr_frames = (group_boost / 150);
533 cpi->active_arnr_frames += !(cpi->active_arnr_frames & 1); 536 cpi->active_arnr_frames += !(cpi->active_arnr_frames & 1);
534 } 537 }
535 if (cpi->active_arnr_strength > (group_boost / 300)) { 538 if (cpi->active_arnr_strength > (group_boost / 300)) {
536 cpi->active_arnr_strength = (group_boost / 300); 539 cpi->active_arnr_strength = (group_boost / 300);
537 } 540 }
538 } 541 }
OLDNEW
« no previous file with comments | « source/libvpx/vp9/encoder/vp9_svc_layercontext.c ('k') | source/libvpx/vp9/encoder/vp9_tokenize.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698