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

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

Issue 168343002: libvpx: Pull from upstream (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/deps/third_party/libvpx/
Patch Set: libvpx: Pull from upstream Created 6 years, 10 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/vp9/encoder/vp9_mbgraph.h ('k') | source/libvpx/vp9/encoder/vp9_mcomp.h » ('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
(...skipping 11 matching lines...) Expand all
22 22
23 23
24 static unsigned int do_16x16_motion_iteration(VP9_COMP *cpi, 24 static unsigned int do_16x16_motion_iteration(VP9_COMP *cpi,
25 const MV *ref_mv, 25 const MV *ref_mv,
26 MV *dst_mv, 26 MV *dst_mv,
27 int mb_row, 27 int mb_row,
28 int mb_col) { 28 int mb_col) {
29 MACROBLOCK *const x = &cpi->mb; 29 MACROBLOCK *const x = &cpi->mb;
30 MACROBLOCKD *const xd = &x->e_mbd; 30 MACROBLOCKD *const xd = &x->e_mbd;
31 vp9_variance_fn_ptr_t v_fn_ptr = cpi->fn_ptr[BLOCK_16X16]; 31 vp9_variance_fn_ptr_t v_fn_ptr = cpi->fn_ptr[BLOCK_16X16];
32 unsigned int best_err;
33 32
34 const int tmp_col_min = x->mv_col_min; 33 const int tmp_col_min = x->mv_col_min;
35 const int tmp_col_max = x->mv_col_max; 34 const int tmp_col_max = x->mv_col_max;
36 const int tmp_row_min = x->mv_row_min; 35 const int tmp_row_min = x->mv_row_min;
37 const int tmp_row_max = x->mv_row_max; 36 const int tmp_row_max = x->mv_row_max;
38 MV ref_full; 37 MV ref_full;
39 38
40 // Further step/diamond searches as necessary 39 // Further step/diamond searches as necessary
41 int step_param = cpi->sf.reduce_first_step_size + 40 int step_param = cpi->sf.reduce_first_step_size +
42 (cpi->speed < 8 ? (cpi->speed > 5 ? 1 : 0) : 2); 41 (cpi->speed < 8 ? (cpi->speed > 5 ? 1 : 0) : 2);
43 step_param = MIN(step_param, (cpi->sf.max_step_search_steps - 2)); 42 step_param = MIN(step_param, (cpi->sf.max_step_search_steps - 2));
44 43
45 vp9_set_mv_search_range(x, ref_mv); 44 vp9_set_mv_search_range(x, ref_mv);
46 45
47 ref_full.col = ref_mv->col >> 3; 46 ref_full.col = ref_mv->col >> 3;
48 ref_full.row = ref_mv->row >> 3; 47 ref_full.row = ref_mv->row >> 3;
49 48
50 /*cpi->sf.search_method == HEX*/ 49 /*cpi->sf.search_method == HEX*/
51 best_err = vp9_hex_search(x, &ref_full, step_param, x->errorperbit, 50 vp9_hex_search(x, &ref_full, step_param, x->errorperbit, 0, &v_fn_ptr, 0,
52 0, &v_fn_ptr, 0, ref_mv, dst_mv); 51 ref_mv, dst_mv);
53 52
54 // Try sub-pixel MC 53 // Try sub-pixel MC
55 // if (bestsme > error_thresh && bestsme < INT_MAX) 54 // if (bestsme > error_thresh && bestsme < INT_MAX)
56 { 55 {
57 int distortion; 56 int distortion;
58 unsigned int sse; 57 unsigned int sse;
59 best_err = cpi->find_fractional_mv_step( 58 cpi->find_fractional_mv_step(
60 x, dst_mv, ref_mv, 59 x, dst_mv, ref_mv, cpi->common.allow_high_precision_mv, x->errorperbit,
61 cpi->common.allow_high_precision_mv, 60 &v_fn_ptr, 0, cpi->sf.subpel_iters_per_step, NULL, NULL, &distortion,
62 x->errorperbit, &v_fn_ptr, 61 &sse);
63 0, cpi->sf.subpel_iters_per_step, NULL, NULL,
64 & distortion, &sse);
65 } 62 }
66 63
67 vp9_set_mbmode_and_mvs(xd, NEWMV, dst_mv); 64 vp9_set_mbmode_and_mvs(xd, NEWMV, dst_mv);
68 vp9_build_inter_predictors_sby(xd, mb_row, mb_col, BLOCK_16X16); 65 vp9_build_inter_predictors_sby(xd, mb_row, mb_col, BLOCK_16X16);
69 best_err = vp9_sad16x16(x->plane[0].src.buf, x->plane[0].src.stride,
70 xd->plane[0].dst.buf, xd->plane[0].dst.stride,
71 INT_MAX);
72 66
73 /* restore UMV window */ 67 /* restore UMV window */
74 x->mv_col_min = tmp_col_min; 68 x->mv_col_min = tmp_col_min;
75 x->mv_col_max = tmp_col_max; 69 x->mv_col_max = tmp_col_max;
76 x->mv_row_min = tmp_row_min; 70 x->mv_row_min = tmp_row_min;
77 x->mv_row_max = tmp_row_max; 71 x->mv_row_max = tmp_row_max;
78 72
79 return best_err; 73 return vp9_sad16x16(x->plane[0].src.buf, x->plane[0].src.stride,
74 xd->plane[0].dst.buf, xd->plane[0].dst.stride,
75 INT_MAX);
80 } 76 }
81 77
82 static int do_16x16_motion_search(VP9_COMP *cpi, const int_mv *ref_mv, 78 static int do_16x16_motion_search(VP9_COMP *cpi, const int_mv *ref_mv,
83 int_mv *dst_mv, int mb_row, int mb_col) { 79 int_mv *dst_mv, int mb_row, int mb_col) {
84 MACROBLOCK *const x = &cpi->mb; 80 MACROBLOCK *const x = &cpi->mb;
85 MACROBLOCKD *const xd = &x->e_mbd; 81 MACROBLOCKD *const xd = &x->e_mbd;
86 unsigned int err, tmp_err; 82 unsigned int err, tmp_err;
87 int_mv tmp_mv; 83 int_mv tmp_mv;
88 84
89 // Try zero MV first 85 // Try zero MV first
(...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after
348 } 344 }
349 } 345 }
350 } 346 }
351 347
352 // arf_not_zz is indexed by MB, but this loop is indexed by MI to avoid out 348 // arf_not_zz is indexed by MB, but this loop is indexed by MI to avoid out
353 // of bound access in segmentation_map 349 // of bound access in segmentation_map
354 for (mi_row = 0; mi_row < cm->mi_rows; mi_row++) { 350 for (mi_row = 0; mi_row < cm->mi_rows; mi_row++) {
355 for (mi_col = 0; mi_col < cm->mi_cols; mi_col++) { 351 for (mi_col = 0; mi_col < cm->mi_cols; mi_col++) {
356 // If any of the blocks in the sequence failed then the MB 352 // If any of the blocks in the sequence failed then the MB
357 // goes in segment 0 353 // goes in segment 0
358 if (arf_not_zz[mi_row/2*cm->mb_cols + mi_col/2]) { 354 if (arf_not_zz[mi_row / 2 * cm->mb_cols + mi_col / 2]) {
359 ncnt[0]++; 355 ncnt[0]++;
360 cpi->segmentation_map[mi_row * cm->mi_cols + mi_col] = 0; 356 cpi->segmentation_map[mi_row * cm->mi_cols + mi_col] = 0;
361 } else { 357 } else {
362 cpi->segmentation_map[mi_row * cm->mi_cols + mi_col] = 1; 358 cpi->segmentation_map[mi_row * cm->mi_cols + mi_col] = 1;
363 ncnt[1]++; 359 ncnt[1]++;
364 } 360 }
365 } 361 }
366 } 362 }
367 363
368 // Only bother with segmentation if over 10% of the MBs in static segment 364 // Only bother with segmentation if over 10% of the MBs in static segment
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
420 assert(q_cur != NULL); 416 assert(q_cur != NULL);
421 417
422 update_mbgraph_frame_stats(cpi, frame_stats, &q_cur->img, 418 update_mbgraph_frame_stats(cpi, frame_stats, &q_cur->img,
423 golden_ref, cpi->Source); 419 golden_ref, cpi->Source);
424 } 420 }
425 421
426 vp9_clear_system_state(); // __asm emms; 422 vp9_clear_system_state(); // __asm emms;
427 423
428 separate_arf_mbs(cpi); 424 separate_arf_mbs(cpi);
429 } 425 }
OLDNEW
« no previous file with comments | « source/libvpx/vp9/encoder/vp9_mbgraph.h ('k') | source/libvpx/vp9/encoder/vp9_mcomp.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698