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

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

Issue 290653003: libvpx: Pull from upstream (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/deps/third_party/libvpx/
Patch Set: Created 6 years, 7 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) 2014 The WebM project authors. All Rights Reserved. 2 * Copyright (c) 2014 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 #include <assert.h> 11 #include <assert.h>
12 #include <limits.h> 12 #include <limits.h>
13 #include <math.h> 13 #include <math.h>
14 #include <stdio.h> 14 #include <stdio.h>
15 15
16 #include "./vp9_rtcd.h" 16 #include "./vp9_rtcd.h"
17 17
18 #include "vpx_mem/vpx_mem.h" 18 #include "vpx_mem/vpx_mem.h"
19 19
20 #include "vp9/common/vp9_common.h" 20 #include "vp9/common/vp9_common.h"
21 #include "vp9/common/vp9_mvref_common.h" 21 #include "vp9/common/vp9_mvref_common.h"
22 #include "vp9/common/vp9_reconinter.h" 22 #include "vp9/common/vp9_reconinter.h"
23 #include "vp9/common/vp9_reconintra.h" 23 #include "vp9/common/vp9_reconintra.h"
24 24
25 #include "vp9/encoder/vp9_encoder.h" 25 #include "vp9/encoder/vp9_encoder.h"
26 #include "vp9/encoder/vp9_ratectrl.h" 26 #include "vp9/encoder/vp9_ratectrl.h"
27 #include "vp9/encoder/vp9_rdopt.h" 27 #include "vp9/encoder/vp9_rdopt.h"
28 28
29 static void full_pixel_motion_search(VP9_COMP *cpi, MACROBLOCK *x, 29 static void full_pixel_motion_search(VP9_COMP *cpi, MACROBLOCK *x,
30 const TileInfo *const tile,
31 BLOCK_SIZE bsize, int mi_row, int mi_col, 30 BLOCK_SIZE bsize, int mi_row, int mi_col,
32 int_mv *tmp_mv, int *rate_mv) { 31 int_mv *tmp_mv, int *rate_mv) {
33 MACROBLOCKD *xd = &x->e_mbd; 32 MACROBLOCKD *xd = &x->e_mbd;
34 MB_MODE_INFO *mbmi = &xd->mi[0]->mbmi; 33 MB_MODE_INFO *mbmi = &xd->mi[0]->mbmi;
35 struct buf_2d backup_yv12[MAX_MB_PLANE] = {{0}}; 34 struct buf_2d backup_yv12[MAX_MB_PLANE] = {{0, 0}};
36 int step_param; 35 int step_param;
37 int sadpb = x->sadperbit16; 36 int sadpb = x->sadperbit16;
38 MV mvp_full; 37 MV mvp_full;
39 int ref = mbmi->ref_frame[0]; 38 int ref = mbmi->ref_frame[0];
40 const MV ref_mv = mbmi->ref_mvs[ref][0].as_mv; 39 const MV ref_mv = mbmi->ref_mvs[ref][0].as_mv;
41 int i; 40 int i;
42 41
43 int tmp_col_min = x->mv_col_min; 42 int tmp_col_min = x->mv_col_min;
44 int tmp_col_max = x->mv_col_max; 43 int tmp_col_max = x->mv_col_max;
45 int tmp_row_min = x->mv_row_min; 44 int tmp_row_min = x->mv_row_min;
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
100 } 99 }
101 100
102 // calculate the bit cost on motion vector 101 // calculate the bit cost on motion vector
103 mvp_full.row = tmp_mv->as_mv.row * 8; 102 mvp_full.row = tmp_mv->as_mv.row * 8;
104 mvp_full.col = tmp_mv->as_mv.col * 8; 103 mvp_full.col = tmp_mv->as_mv.col * 8;
105 *rate_mv = vp9_mv_bit_cost(&mvp_full, &ref_mv, 104 *rate_mv = vp9_mv_bit_cost(&mvp_full, &ref_mv,
106 x->nmvjointcost, x->mvcost, MV_COST_WEIGHT); 105 x->nmvjointcost, x->mvcost, MV_COST_WEIGHT);
107 } 106 }
108 107
109 static void sub_pixel_motion_search(VP9_COMP *cpi, MACROBLOCK *x, 108 static void sub_pixel_motion_search(VP9_COMP *cpi, MACROBLOCK *x,
110 const TileInfo *const tile,
111 BLOCK_SIZE bsize, int mi_row, int mi_col, 109 BLOCK_SIZE bsize, int mi_row, int mi_col,
112 MV *tmp_mv) { 110 MV *tmp_mv) {
113 MACROBLOCKD *xd = &x->e_mbd; 111 MACROBLOCKD *xd = &x->e_mbd;
114 MB_MODE_INFO *mbmi = &xd->mi[0]->mbmi; 112 MB_MODE_INFO *mbmi = &xd->mi[0]->mbmi;
115 struct buf_2d backup_yv12[MAX_MB_PLANE] = {{0}}; 113 struct buf_2d backup_yv12[MAX_MB_PLANE] = {{0, 0}};
116 int ref = mbmi->ref_frame[0]; 114 int ref = mbmi->ref_frame[0];
117 MV ref_mv = mbmi->ref_mvs[ref][0].as_mv; 115 MV ref_mv = mbmi->ref_mvs[ref][0].as_mv;
118 int dis; 116 int dis;
119 117
120 const YV12_BUFFER_CONFIG *scaled_ref_frame = vp9_get_scaled_ref_frame(cpi, 118 const YV12_BUFFER_CONFIG *scaled_ref_frame = vp9_get_scaled_ref_frame(cpi,
121 ref); 119 ref);
122 if (scaled_ref_frame) { 120 if (scaled_ref_frame) {
123 int i; 121 int i;
124 // Swap out the reference frame for a version that's been scaled to 122 // Swap out the reference frame for a version that's been scaled to
125 // match the resolution of the current frame, allowing the existing 123 // match the resolution of the current frame, allowing the existing
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
283 if (best_rd < ((int64_t)rd_threshes[mode_idx[this_mode]] * 281 if (best_rd < ((int64_t)rd_threshes[mode_idx[this_mode]] *
284 rd_thresh_freq_fact[this_mode] >> 5) || 282 rd_thresh_freq_fact[this_mode] >> 5) ||
285 rd_threshes[mode_idx[this_mode]] == INT_MAX) 283 rd_threshes[mode_idx[this_mode]] == INT_MAX)
286 continue; 284 continue;
287 285
288 if (this_mode == NEWMV) { 286 if (this_mode == NEWMV) {
289 int rate_mode = 0; 287 int rate_mode = 0;
290 if (this_rd < (int64_t)(1 << num_pels_log2_lookup[bsize])) 288 if (this_rd < (int64_t)(1 << num_pels_log2_lookup[bsize]))
291 continue; 289 continue;
292 290
293 full_pixel_motion_search(cpi, x, tile, bsize, mi_row, mi_col, 291 full_pixel_motion_search(cpi, x, bsize, mi_row, mi_col,
294 &frame_mv[NEWMV][ref_frame], &rate_mv); 292 &frame_mv[NEWMV][ref_frame], &rate_mv);
295 293
296 if (frame_mv[NEWMV][ref_frame].as_int == INVALID_MV) 294 if (frame_mv[NEWMV][ref_frame].as_int == INVALID_MV)
297 continue; 295 continue;
298 296
299 rate_mode = cpi->inter_mode_cost[mbmi->mode_context[ref_frame]] 297 rate_mode = cpi->inter_mode_cost[mbmi->mode_context[ref_frame]]
300 [INTER_OFFSET(this_mode)]; 298 [INTER_OFFSET(this_mode)];
301 if (RDCOST(x->rdmult, x->rddiv, rate_mv + rate_mode, 0) > best_rd) 299 if (RDCOST(x->rdmult, x->rddiv, rate_mv + rate_mode, 0) > best_rd)
302 continue; 300 continue;
303 301
304 sub_pixel_motion_search(cpi, x, tile, bsize, mi_row, mi_col, 302 sub_pixel_motion_search(cpi, x, bsize, mi_row, mi_col,
305 &frame_mv[NEWMV][ref_frame].as_mv); 303 &frame_mv[NEWMV][ref_frame].as_mv);
306 } 304 }
307 305
308 if (this_mode != NEARESTMV) 306 if (this_mode != NEARESTMV)
309 if (frame_mv[this_mode][ref_frame].as_int == 307 if (frame_mv[this_mode][ref_frame].as_int ==
310 frame_mv[NEARESTMV][ref_frame].as_int) 308 frame_mv[NEARESTMV][ref_frame].as_int)
311 continue; 309 continue;
312 310
313 mbmi->mode = this_mode; 311 mbmi->mode = this_mode;
314 mbmi->mv[0].as_int = frame_mv[this_mode][ref_frame].as_int; 312 mbmi->mv[0].as_int = frame_mv[this_mode][ref_frame].as_int;
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
413 mbmi->mode = this_mode; 411 mbmi->mode = this_mode;
414 mbmi->ref_frame[0] = INTRA_FRAME; 412 mbmi->ref_frame[0] = INTRA_FRAME;
415 mbmi->uv_mode = this_mode; 413 mbmi->uv_mode = this_mode;
416 mbmi->mv[0].as_int = INVALID_MV; 414 mbmi->mv[0].as_int = INVALID_MV;
417 } 415 }
418 } 416 }
419 } 417 }
420 418
421 return INT64_MAX; 419 return INT64_MAX;
422 } 420 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698