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

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

Issue 11974002: libvpx: Pull from upstream (Closed) Base URL: svn://chrome-svn/chrome/trunk/deps/third_party/libvpx/
Patch Set: Created 7 years, 11 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_mcomp.h ('k') | source/libvpx/vp9/encoder/vp9_modecosts.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
11 11
12 #include "vp9/encoder/vp9_onyx_int.h" 12 #include "vp9/encoder/vp9_onyx_int.h"
13 #include "vp9/encoder/vp9_mcomp.h" 13 #include "vp9/encoder/vp9_mcomp.h"
14 #include "vpx_mem/vpx_mem.h" 14 #include "vpx_mem/vpx_mem.h"
15 #include "vpx_ports/config.h" 15 #include "./vpx_config.h"
16 #include <stdio.h> 16 #include <stdio.h>
17 #include <limits.h> 17 #include <limits.h>
18 #include <math.h> 18 #include <math.h>
19 #include "vp9/common/vp9_findnearmv.h" 19 #include "vp9/common/vp9_findnearmv.h"
20 #include "vp9/common/vp9_common.h"
20 21
21 #ifdef ENTROPY_STATS 22 #ifdef ENTROPY_STATS
22 static int mv_ref_ct [31] [4] [2]; 23 static int mv_ref_ct [31] [4] [2];
23 static int mv_mode_cts [4] [2]; 24 static int mv_mode_cts [4] [2];
24 #endif 25 #endif
25 26
26 void vp9_clamp_mv_min_max(MACROBLOCK *x, int_mv *ref_mv) { 27 void vp9_clamp_mv_min_max(MACROBLOCK *x, int_mv *ref_mv) {
27 int col_min = (ref_mv->as_mv.col >> 3) - MAX_FULL_PEL_VAL + 28 int col_min = (ref_mv->as_mv.col >> 3) - MAX_FULL_PEL_VAL +
28 ((ref_mv->as_mv.col & 7) ? 1 : 0); 29 ((ref_mv->as_mv.col & 7) ? 1 : 0);
29 int row_min = (ref_mv->as_mv.row >> 3) - MAX_FULL_PEL_VAL + 30 int row_min = (ref_mv->as_mv.row >> 3) - MAX_FULL_PEL_VAL +
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after
234 if ((v = MVC(r, c) + thismse) < besterr) { \ 235 if ((v = MVC(r, c) + thismse) < besterr) { \
235 besterr = v; \ 236 besterr = v; \
236 br = r; \ 237 br = r; \
237 bc = c; \ 238 bc = c; \
238 *distortion = thismse; \ 239 *distortion = thismse; \
239 *sse1 = sse; \ 240 *sse1 = sse; \
240 } \ 241 } \
241 }, \ 242 }, \
242 v = INT_MAX;) 243 v = INT_MAX;)
243 244
244 #define MIN(x,y) (((x)<(y))?(x):(y))
245 #define MAX(x,y) (((x)>(y))?(x):(y))
246
247 int vp9_find_best_sub_pixel_step_iteratively(MACROBLOCK *x, BLOCK *b, BLOCKD *d, 245 int vp9_find_best_sub_pixel_step_iteratively(MACROBLOCK *x, BLOCK *b, BLOCKD *d,
248 int_mv *bestmv, int_mv *ref_mv, 246 int_mv *bestmv, int_mv *ref_mv,
249 int error_per_bit, 247 int error_per_bit,
250 const vp9_variance_fn_ptr_t *vfp, 248 const vp9_variance_fn_ptr_t *vfp,
251 int *mvjcost, int *mvcost[2], 249 int *mvjcost, int *mvcost[2],
252 int *distortion, 250 int *distortion,
253 unsigned int *sse1) { 251 unsigned int *sse1) {
254 unsigned char *z = (*(b->base_src) + b->src); 252 uint8_t *z = (*(b->base_src) + b->src);
255 MACROBLOCKD *xd = &x->e_mbd; 253 MACROBLOCKD *xd = &x->e_mbd;
256 254
257 int rr, rc, br, bc, hstep; 255 int rr, rc, br, bc, hstep;
258 int tr, tc; 256 int tr, tc;
259 unsigned int besterr = INT_MAX; 257 unsigned int besterr = INT_MAX;
260 unsigned int left, right, up, down, diag; 258 unsigned int left, right, up, down, diag;
261 unsigned int sse; 259 unsigned int sse;
262 unsigned int whichdir; 260 unsigned int whichdir;
263 unsigned int halfiters = 4; 261 unsigned int halfiters = 4;
264 unsigned int quarteriters = 4; 262 unsigned int quarteriters = 4;
265 unsigned int eighthiters = 4; 263 unsigned int eighthiters = 4;
266 int thismse; 264 int thismse;
267 int maxc, minc, maxr, minr; 265 int maxc, minc, maxr, minr;
268 int y_stride; 266 int y_stride;
269 int offset; 267 int offset;
270 int usehp = xd->allow_high_precision_mv; 268 int usehp = xd->allow_high_precision_mv;
271 269
272 #if !CONFIG_SUPERBLOCKS && (ARCH_X86 || ARCH_X86_64) 270 uint8_t *y = *(d->base_pre) + d->pre +
273 unsigned char *y0 = *(d->base_pre) + d->pre + (bestmv->as_mv.row) * d->pre_str ide + bestmv->as_mv.col; 271 (bestmv->as_mv.row) * d->pre_stride + bestmv->as_mv.col;
274 unsigned char *y;
275 int buf_r1, buf_r2, buf_c1, buf_c2;
276
277 // Clamping to avoid out-of-range data access
278 buf_r1 = ((bestmv->as_mv.row - VP9_INTERP_EXTEND) < x->mv_row_min) ?
279 (bestmv->as_mv.row - x->mv_row_min) : VP9_INTERP_EXTEND - 1;
280 buf_r2 = ((bestmv->as_mv.row + VP9_INTERP_EXTEND) > x->mv_row_max) ?
281 (x->mv_row_max - bestmv->as_mv.row) : VP9_INTERP_EXTEND - 1;
282 buf_c1 = ((bestmv->as_mv.col - VP9_INTERP_EXTEND) < x->mv_col_min) ?
283 (bestmv->as_mv.col - x->mv_col_min) : VP9_INTERP_EXTEND - 1;
284 buf_c2 = ((bestmv->as_mv.col + VP9_INTERP_EXTEND) > x->mv_col_max) ?
285 (x->mv_col_max - bestmv->as_mv.col) : VP9_INTERP_EXTEND - 1;
286 y_stride = 32;
287
288 /* Copy to intermediate buffer before searching. */
289 vfp->copymem(y0 - buf_c1 - d->pre_stride * buf_r1, d->pre_stride, xd->y_buf, y _stride, 16 + buf_r1 + buf_r2);
290 y = xd->y_buf + y_stride * buf_r1 + buf_c1;
291 #else
292 unsigned char *y = *(d->base_pre) + d->pre + (bestmv->as_mv.row) * d->pre_stri de + bestmv->as_mv.col;
293 y_stride = d->pre_stride; 272 y_stride = d->pre_stride;
294 #endif
295 273
296 rr = ref_mv->as_mv.row; 274 rr = ref_mv->as_mv.row;
297 rc = ref_mv->as_mv.col; 275 rc = ref_mv->as_mv.col;
298 br = bestmv->as_mv.row << 3; 276 br = bestmv->as_mv.row << 3;
299 bc = bestmv->as_mv.col << 3; 277 bc = bestmv->as_mv.col << 3;
300 hstep = 4; 278 hstep = 4;
301 minc = MAX(x->mv_col_min << 3, (ref_mv->as_mv.col) - ((1 << MV_MAX_BITS) - 1)) ; 279 minc = MAX(x->mv_col_min << 3, (ref_mv->as_mv.col) - ((1 << MV_MAX_BITS) - 1)) ;
302 maxc = MIN(x->mv_col_max << 3, (ref_mv->as_mv.col) + ((1 << MV_MAX_BITS) - 1)) ; 280 maxc = MIN(x->mv_col_max << 3, (ref_mv->as_mv.col) + ((1 << MV_MAX_BITS) - 1)) ;
303 minr = MAX(x->mv_row_min << 3, (ref_mv->as_mv.row) - ((1 << MV_MAX_BITS) - 1)) ; 281 minr = MAX(x->mv_row_min << 3, (ref_mv->as_mv.row) - ((1 << MV_MAX_BITS) - 1)) ;
304 maxr = MIN(x->mv_row_max << 3, (ref_mv->as_mv.row) + ((1 << MV_MAX_BITS) - 1)) ; 282 maxr = MIN(x->mv_row_max << 3, (ref_mv->as_mv.row) + ((1 << MV_MAX_BITS) - 1)) ;
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
447 int_mv *bestmv, int_mv *ref_mv, 425 int_mv *bestmv, int_mv *ref_mv,
448 int error_per_bit, 426 int error_per_bit,
449 const vp9_variance_fn_ptr_t *vfp, 427 const vp9_variance_fn_ptr_t *vfp,
450 int *mvjcost, int *mvcost[2], int *distortion, 428 int *mvjcost, int *mvcost[2], int *distortion,
451 unsigned int *sse1) { 429 unsigned int *sse1) {
452 int bestmse = INT_MAX; 430 int bestmse = INT_MAX;
453 int_mv startmv; 431 int_mv startmv;
454 int_mv this_mv; 432 int_mv this_mv;
455 int_mv orig_mv; 433 int_mv orig_mv;
456 int yrow_movedback = 0, ycol_movedback = 0; 434 int yrow_movedback = 0, ycol_movedback = 0;
457 unsigned char *z = (*(b->base_src) + b->src); 435 uint8_t *z = (*(b->base_src) + b->src);
458 int left, right, up, down, diag; 436 int left, right, up, down, diag;
459 unsigned int sse; 437 unsigned int sse;
460 int whichdir; 438 int whichdir;
461 int thismse; 439 int thismse;
462 int y_stride; 440 int y_stride;
463 MACROBLOCKD *xd = &x->e_mbd; 441 MACROBLOCKD *xd = &x->e_mbd;
464 int usehp = xd->allow_high_precision_mv; 442 int usehp = xd->allow_high_precision_mv;
465 443
466 #if !CONFIG_SUPERBLOCKS && (ARCH_X86 || ARCH_X86_64) 444 uint8_t *y = *(d->base_pre) + d->pre +
467 unsigned char *y0 = *(d->base_pre) + d->pre + (bestmv->as_mv.row) * d->pre_str ide + bestmv->as_mv.col; 445 (bestmv->as_mv.row) * d->pre_stride + bestmv->as_mv.col;
468 unsigned char *y;
469
470 y_stride = 32;
471 /* Copy 18 rows x 32 cols area to intermediate buffer before searching. */
472 vfp->copymem(y0 - 1 - d->pre_stride, d->pre_stride, xd->y_buf, y_stride, 18);
473 y = xd->y_buf + y_stride + 1;
474 #else
475 unsigned char *y = *(d->base_pre) + d->pre + (bestmv->as_mv.row) * d->pre_stri de + bestmv->as_mv.col;
476 y_stride = d->pre_stride; 446 y_stride = d->pre_stride;
477 #endif
478 447
479 // central mv 448 // central mv
480 bestmv->as_mv.row <<= 3; 449 bestmv->as_mv.row <<= 3;
481 bestmv->as_mv.col <<= 3; 450 bestmv->as_mv.col <<= 3;
482 startmv = *bestmv; 451 startmv = *bestmv;
483 orig_mv = *bestmv; 452 orig_mv = *bestmv;
484 453
485 // calculate central point error 454 // calculate central point error
486 bestmse = vfp->vf(y, y_stride, z, b->src_stride, sse1); 455 bestmse = vfp->vf(y, y_stride, z, b->src_stride, sse1);
487 *distortion = bestmse; 456 *distortion = bestmse;
(...skipping 438 matching lines...) Expand 10 before | Expand all | Expand 10 after
926 int vp9_find_best_half_pixel_step(MACROBLOCK *x, BLOCK *b, BLOCKD *d, 895 int vp9_find_best_half_pixel_step(MACROBLOCK *x, BLOCK *b, BLOCKD *d,
927 int_mv *bestmv, int_mv *ref_mv, 896 int_mv *bestmv, int_mv *ref_mv,
928 int error_per_bit, 897 int error_per_bit,
929 const vp9_variance_fn_ptr_t *vfp, 898 const vp9_variance_fn_ptr_t *vfp,
930 int *mvjcost, int *mvcost[2], 899 int *mvjcost, int *mvcost[2],
931 int *distortion, 900 int *distortion,
932 unsigned int *sse1) { 901 unsigned int *sse1) {
933 int bestmse = INT_MAX; 902 int bestmse = INT_MAX;
934 int_mv startmv; 903 int_mv startmv;
935 int_mv this_mv; 904 int_mv this_mv;
936 unsigned char *z = (*(b->base_src) + b->src); 905 uint8_t *z = (*(b->base_src) + b->src);
937 int left, right, up, down, diag; 906 int left, right, up, down, diag;
938 unsigned int sse; 907 unsigned int sse;
939 int whichdir; 908 int whichdir;
940 int thismse; 909 int thismse;
941 int y_stride; 910 int y_stride;
942 MACROBLOCKD *xd = &x->e_mbd; 911 MACROBLOCKD *xd = &x->e_mbd;
943 912
944 #if !CONFIG_SUPERBLOCKS && (ARCH_X86 || ARCH_X86_64) 913 uint8_t *y = *(d->base_pre) + d->pre +
945 unsigned char *y0 = *(d->base_pre) + d->pre +
946 (bestmv->as_mv.row) * d->pre_stride + bestmv->as_mv.col;
947 unsigned char *y;
948
949 y_stride = 32;
950 /* Copy 18 rows x 32 cols area to intermediate buffer before searching. */
951 vfp->copymem(y0 - 1 - d->pre_stride, d->pre_stride, xd->y_buf, y_stride, 18);
952 y = xd->y_buf + y_stride + 1;
953 #else
954 unsigned char *y = *(d->base_pre) + d->pre +
955 (bestmv->as_mv.row) * d->pre_stride + bestmv->as_mv.col; 914 (bestmv->as_mv.row) * d->pre_stride + bestmv->as_mv.col;
956 y_stride = d->pre_stride; 915 y_stride = d->pre_stride;
957 #endif
958 916
959 // central mv 917 // central mv
960 bestmv->as_mv.row <<= 3; 918 bestmv->as_mv.row <<= 3;
961 bestmv->as_mv.col <<= 3; 919 bestmv->as_mv.col <<= 3;
962 startmv = *bestmv; 920 startmv = *bestmv;
963 921
964 // calculate central point error 922 // calculate central point error
965 bestmse = vfp->vf(y, y_stride, z, b->src_stride, sse1); 923 bestmse = vfp->vf(y, y_stride, z, b->src_stride, sse1);
966 *distortion = bestmse; 924 *distortion = bestmse;
967 bestmse += mv_err_cost(bestmv, ref_mv, mvjcost, mvcost, error_per_bit, 925 bestmse += mv_err_cost(bestmv, ref_mv, mvjcost, mvcost, error_per_bit,
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
1111 int sad_per_bit, 1069 int sad_per_bit,
1112 const vp9_variance_fn_ptr_t *vfp, 1070 const vp9_variance_fn_ptr_t *vfp,
1113 int *mvjsadcost, int *mvsadcost[2], 1071 int *mvjsadcost, int *mvsadcost[2],
1114 int *mvjcost, int *mvcost[2], 1072 int *mvjcost, int *mvcost[2],
1115 int_mv *center_mv 1073 int_mv *center_mv
1116 ) { 1074 ) {
1117 MV hex[6] = { { -1, -2}, {1, -2}, {2, 0}, {1, 2}, { -1, 2}, { -2, 0} }; 1075 MV hex[6] = { { -1, -2}, {1, -2}, {2, 0}, {1, 2}, { -1, 2}, { -2, 0} };
1118 MV neighbors[4] = {{0, -1}, { -1, 0}, {1, 0}, {0, 1}}; 1076 MV neighbors[4] = {{0, -1}, { -1, 0}, {1, 0}, {0, 1}};
1119 int i, j; 1077 int i, j;
1120 1078
1121 unsigned char *what = (*(b->base_src) + b->src); 1079 uint8_t *what = (*(b->base_src) + b->src);
1122 int what_stride = b->src_stride; 1080 int what_stride = b->src_stride;
1123 int in_what_stride = d->pre_stride; 1081 int in_what_stride = d->pre_stride;
1124 int br, bc; 1082 int br, bc;
1125 int_mv this_mv; 1083 int_mv this_mv;
1126 unsigned int bestsad = 0x7fffffff; 1084 unsigned int bestsad = 0x7fffffff;
1127 unsigned int thissad; 1085 unsigned int thissad;
1128 unsigned char *base_offset; 1086 uint8_t *base_offset;
1129 unsigned char *this_offset; 1087 uint8_t *this_offset;
1130 int k = -1; 1088 int k = -1;
1131 int all_in; 1089 int all_in;
1132 int best_site = -1; 1090 int best_site = -1;
1133 1091
1134 int_mv fcenter_mv; 1092 int_mv fcenter_mv;
1135 fcenter_mv.as_mv.row = center_mv->as_mv.row >> 3; 1093 fcenter_mv.as_mv.row = center_mv->as_mv.row >> 3;
1136 fcenter_mv.as_mv.col = center_mv->as_mv.col >> 3; 1094 fcenter_mv.as_mv.col = center_mv->as_mv.col >> 3;
1137 1095
1138 // adjust ref_mv to make sure it is within MV range 1096 // adjust ref_mv to make sure it is within MV range
1139 clamp_mv(ref_mv, x->mv_col_min, x->mv_col_max, x->mv_row_min, x->mv_row_max); 1097 clamp_mv(ref_mv, x->mv_col_min, x->mv_col_max, x->mv_row_min, x->mv_row_max);
1140 br = ref_mv->as_mv.row; 1098 br = ref_mv->as_mv.row;
1141 bc = ref_mv->as_mv.col; 1099 bc = ref_mv->as_mv.col;
1142 1100
1143 // Work out the start point for the search 1101 // Work out the start point for the search
1144 base_offset = (unsigned char *)(*(d->base_pre) + d->pre); 1102 base_offset = (uint8_t *)(*(d->base_pre) + d->pre);
1145 this_offset = base_offset + (br * (d->pre_stride)) + bc; 1103 this_offset = base_offset + (br * (d->pre_stride)) + bc;
1146 this_mv.as_mv.row = br; 1104 this_mv.as_mv.row = br;
1147 this_mv.as_mv.col = bc; 1105 this_mv.as_mv.col = bc;
1148 bestsad = vfp->sdf(what, what_stride, this_offset, 1106 bestsad = vfp->sdf(what, what_stride, this_offset,
1149 in_what_stride, 0x7fffffff) 1107 in_what_stride, 0x7fffffff)
1150 + mvsad_err_cost(&this_mv, &fcenter_mv, mvjsadcost, mvsadcost, 1108 + mvsad_err_cost(&this_mv, &fcenter_mv, mvjsadcost, mvsadcost,
1151 sad_per_bit); 1109 sad_per_bit);
1152 1110
1153 // hex search 1111 // hex search
1154 // j=0 1112 // j=0
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
1257 #undef CHECK_POINT 1215 #undef CHECK_POINT
1258 #undef CHECK_BETTER 1216 #undef CHECK_BETTER
1259 1217
1260 int vp9_diamond_search_sad_c(MACROBLOCK *x, BLOCK *b, BLOCKD *d, 1218 int vp9_diamond_search_sad_c(MACROBLOCK *x, BLOCK *b, BLOCKD *d,
1261 int_mv *ref_mv, int_mv *best_mv, 1219 int_mv *ref_mv, int_mv *best_mv,
1262 int search_param, int sad_per_bit, int *num00, 1220 int search_param, int sad_per_bit, int *num00,
1263 vp9_variance_fn_ptr_t *fn_ptr, int *mvjcost, 1221 vp9_variance_fn_ptr_t *fn_ptr, int *mvjcost,
1264 int *mvcost[2], int_mv *center_mv) { 1222 int *mvcost[2], int_mv *center_mv) {
1265 int i, j, step; 1223 int i, j, step;
1266 1224
1267 unsigned char *what = (*(b->base_src) + b->src); 1225 uint8_t *what = (*(b->base_src) + b->src);
1268 int what_stride = b->src_stride; 1226 int what_stride = b->src_stride;
1269 unsigned char *in_what; 1227 uint8_t *in_what;
1270 int in_what_stride = d->pre_stride; 1228 int in_what_stride = d->pre_stride;
1271 unsigned char *best_address; 1229 uint8_t *best_address;
1272 1230
1273 int tot_steps; 1231 int tot_steps;
1274 int_mv this_mv; 1232 int_mv this_mv;
1275 1233
1276 int bestsad = INT_MAX; 1234 int bestsad = INT_MAX;
1277 int best_site = 0; 1235 int best_site = 0;
1278 int last_site = 0; 1236 int last_site = 0;
1279 1237
1280 int ref_row, ref_col; 1238 int ref_row, ref_col;
1281 int this_row_offset, this_col_offset; 1239 int this_row_offset, this_col_offset;
1282 search_site *ss; 1240 search_site *ss;
1283 1241
1284 unsigned char *check_here; 1242 uint8_t *check_here;
1285 int thissad; 1243 int thissad;
1286 MACROBLOCKD *xd = &x->e_mbd; 1244 MACROBLOCKD *xd = &x->e_mbd;
1287 int_mv fcenter_mv; 1245 int_mv fcenter_mv;
1288 1246
1289 int *mvjsadcost = x->nmvjointsadcost; 1247 int *mvjsadcost = x->nmvjointsadcost;
1290 int *mvsadcost[2] = {x->nmvsadcost[0], x->nmvsadcost[1]}; 1248 int *mvsadcost[2] = {x->nmvsadcost[0], x->nmvsadcost[1]};
1291 1249
1292 fcenter_mv.as_mv.row = center_mv->as_mv.row >> 3; 1250 fcenter_mv.as_mv.row = center_mv->as_mv.row >> 3;
1293 fcenter_mv.as_mv.col = center_mv->as_mv.col >> 3; 1251 fcenter_mv.as_mv.col = center_mv->as_mv.col >> 3;
1294 1252
1295 clamp_mv(ref_mv, x->mv_col_min, x->mv_col_max, x->mv_row_min, x->mv_row_max); 1253 clamp_mv(ref_mv, x->mv_col_min, x->mv_col_max, x->mv_row_min, x->mv_row_max);
1296 ref_row = ref_mv->as_mv.row; 1254 ref_row = ref_mv->as_mv.row;
1297 ref_col = ref_mv->as_mv.col; 1255 ref_col = ref_mv->as_mv.col;
1298 *num00 = 0; 1256 *num00 = 0;
1299 best_mv->as_mv.row = ref_row; 1257 best_mv->as_mv.row = ref_row;
1300 best_mv->as_mv.col = ref_col; 1258 best_mv->as_mv.col = ref_col;
1301 1259
1302 // Work out the start point for the search 1260 // Work out the start point for the search
1303 in_what = (unsigned char *)(*(d->base_pre) + d->pre + (ref_row * (d->pre_strid e)) + ref_col); 1261 in_what = (uint8_t *)(*(d->base_pre) + d->pre +
1262 (ref_row * (d->pre_stride)) + ref_col);
1304 best_address = in_what; 1263 best_address = in_what;
1305 1264
1306 // Check the starting position 1265 // Check the starting position
1307 bestsad = fn_ptr->sdf(what, what_stride, in_what, 1266 bestsad = fn_ptr->sdf(what, what_stride, in_what,
1308 in_what_stride, 0x7fffffff) 1267 in_what_stride, 0x7fffffff)
1309 + mvsad_err_cost(best_mv, &fcenter_mv, mvjsadcost, mvsadcost, 1268 + mvsad_err_cost(best_mv, &fcenter_mv, mvjsadcost, mvsadcost,
1310 sad_per_bit); 1269 sad_per_bit);
1311 1270
1312 // search_param determines the length of the initial step and hence the number of iterations 1271 // search_param determines the length of the initial step and hence the number of iterations
1313 // 0 = initial step (MAX_FIRST_STEP) pel : 1 = (MAX_FIRST_STEP/2) pel, 2 = (MA X_FIRST_STEP/4) pel... etc. 1272 // 0 = initial step (MAX_FIRST_STEP) pel : 1 = (MAX_FIRST_STEP/2) pel, 2 = (MA X_FIRST_STEP/4) pel... etc.
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
1367 xd->allow_high_precision_mv); 1326 xd->allow_high_precision_mv);
1368 } 1327 }
1369 1328
1370 int vp9_diamond_search_sadx4(MACROBLOCK *x, BLOCK *b, BLOCKD *d, 1329 int vp9_diamond_search_sadx4(MACROBLOCK *x, BLOCK *b, BLOCKD *d,
1371 int_mv *ref_mv, int_mv *best_mv, int search_param, 1330 int_mv *ref_mv, int_mv *best_mv, int search_param,
1372 int sad_per_bit, int *num00, 1331 int sad_per_bit, int *num00,
1373 vp9_variance_fn_ptr_t *fn_ptr, 1332 vp9_variance_fn_ptr_t *fn_ptr,
1374 int *mvjcost, int *mvcost[2], int_mv *center_mv) { 1333 int *mvjcost, int *mvcost[2], int_mv *center_mv) {
1375 int i, j, step; 1334 int i, j, step;
1376 1335
1377 unsigned char *what = (*(b->base_src) + b->src); 1336 uint8_t *what = (*(b->base_src) + b->src);
1378 int what_stride = b->src_stride; 1337 int what_stride = b->src_stride;
1379 unsigned char *in_what; 1338 uint8_t *in_what;
1380 int in_what_stride = d->pre_stride; 1339 int in_what_stride = d->pre_stride;
1381 unsigned char *best_address; 1340 uint8_t *best_address;
1382 1341
1383 int tot_steps; 1342 int tot_steps;
1384 int_mv this_mv; 1343 int_mv this_mv;
1385 1344
1386 unsigned int bestsad = INT_MAX; 1345 unsigned int bestsad = INT_MAX;
1387 int best_site = 0; 1346 int best_site = 0;
1388 int last_site = 0; 1347 int last_site = 0;
1389 1348
1390 int ref_row; 1349 int ref_row;
1391 int ref_col; 1350 int ref_col;
1392 int this_row_offset; 1351 int this_row_offset;
1393 int this_col_offset; 1352 int this_col_offset;
1394 search_site *ss; 1353 search_site *ss;
1395 1354
1396 unsigned char *check_here; 1355 uint8_t *check_here;
1397 unsigned int thissad; 1356 unsigned int thissad;
1398 MACROBLOCKD *xd = &x->e_mbd; 1357 MACROBLOCKD *xd = &x->e_mbd;
1399 int_mv fcenter_mv; 1358 int_mv fcenter_mv;
1400 1359
1401 int *mvjsadcost = x->nmvjointsadcost; 1360 int *mvjsadcost = x->nmvjointsadcost;
1402 int *mvsadcost[2] = {x->nmvsadcost[0], x->nmvsadcost[1]}; 1361 int *mvsadcost[2] = {x->nmvsadcost[0], x->nmvsadcost[1]};
1403 1362
1404 fcenter_mv.as_mv.row = center_mv->as_mv.row >> 3; 1363 fcenter_mv.as_mv.row = center_mv->as_mv.row >> 3;
1405 fcenter_mv.as_mv.col = center_mv->as_mv.col >> 3; 1364 fcenter_mv.as_mv.col = center_mv->as_mv.col >> 3;
1406 1365
1407 clamp_mv(ref_mv, x->mv_col_min, x->mv_col_max, x->mv_row_min, x->mv_row_max); 1366 clamp_mv(ref_mv, x->mv_col_min, x->mv_col_max, x->mv_row_min, x->mv_row_max);
1408 ref_row = ref_mv->as_mv.row; 1367 ref_row = ref_mv->as_mv.row;
1409 ref_col = ref_mv->as_mv.col; 1368 ref_col = ref_mv->as_mv.col;
1410 *num00 = 0; 1369 *num00 = 0;
1411 best_mv->as_mv.row = ref_row; 1370 best_mv->as_mv.row = ref_row;
1412 best_mv->as_mv.col = ref_col; 1371 best_mv->as_mv.col = ref_col;
1413 1372
1414 // Work out the start point for the search 1373 // Work out the start point for the search
1415 in_what = (unsigned char *)(*(d->base_pre) + d->pre + (ref_row * (d->pre_strid e)) + ref_col); 1374 in_what = (uint8_t *)(*(d->base_pre) + d->pre +
1375 (ref_row * (d->pre_stride)) + ref_col);
1416 best_address = in_what; 1376 best_address = in_what;
1417 1377
1418 // Check the starting position 1378 // Check the starting position
1419 bestsad = fn_ptr->sdf(what, what_stride, 1379 bestsad = fn_ptr->sdf(what, what_stride,
1420 in_what, in_what_stride, 0x7fffffff) 1380 in_what, in_what_stride, 0x7fffffff)
1421 + mvsad_err_cost(best_mv, &fcenter_mv, mvjsadcost, mvsadcost, 1381 + mvsad_err_cost(best_mv, &fcenter_mv, mvjsadcost, mvsadcost,
1422 sad_per_bit); 1382 sad_per_bit);
1423 1383
1424 // search_param determines the length of the initial step and hence the number of iterations 1384 // search_param determines the length of the initial step and hence the number of iterations
1425 // 0 = initial step (MAX_FIRST_STEP) pel : 1 = (MAX_FIRST_STEP/2) pel, 2 = (MA X_FIRST_STEP/4) pel... etc. 1385 // 0 = initial step (MAX_FIRST_STEP) pel : 1 = (MAX_FIRST_STEP/2) pel, 2 = (MA X_FIRST_STEP/4) pel... etc.
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
1573 } 1533 }
1574 } 1534 }
1575 return bestsme; 1535 return bestsme;
1576 } 1536 }
1577 1537
1578 int vp9_full_search_sad_c(MACROBLOCK *x, BLOCK *b, BLOCKD *d, int_mv *ref_mv, 1538 int vp9_full_search_sad_c(MACROBLOCK *x, BLOCK *b, BLOCKD *d, int_mv *ref_mv,
1579 int sad_per_bit, int distance, 1539 int sad_per_bit, int distance,
1580 vp9_variance_fn_ptr_t *fn_ptr, int *mvjcost, 1540 vp9_variance_fn_ptr_t *fn_ptr, int *mvjcost,
1581 int *mvcost[2], 1541 int *mvcost[2],
1582 int_mv *center_mv) { 1542 int_mv *center_mv) {
1583 unsigned char *what = (*(b->base_src) + b->src); 1543 uint8_t *what = (*(b->base_src) + b->src);
1584 int what_stride = b->src_stride; 1544 int what_stride = b->src_stride;
1585 unsigned char *in_what; 1545 uint8_t *in_what;
1586 int in_what_stride = d->pre_stride; 1546 int in_what_stride = d->pre_stride;
1587 int mv_stride = d->pre_stride; 1547 int mv_stride = d->pre_stride;
1588 unsigned char *bestaddress; 1548 uint8_t *bestaddress;
1589 int_mv *best_mv = &d->bmi.as_mv.first; 1549 int_mv *best_mv = &d->bmi.as_mv.first;
1590 int_mv this_mv; 1550 int_mv this_mv;
1591 int bestsad = INT_MAX; 1551 int bestsad = INT_MAX;
1592 int r, c; 1552 int r, c;
1593 1553
1594 unsigned char *check_here; 1554 uint8_t *check_here;
1595 int thissad; 1555 int thissad;
1596 MACROBLOCKD *xd = &x->e_mbd; 1556 MACROBLOCKD *xd = &x->e_mbd;
1597 1557
1598 int ref_row = ref_mv->as_mv.row; 1558 int ref_row = ref_mv->as_mv.row;
1599 int ref_col = ref_mv->as_mv.col; 1559 int ref_col = ref_mv->as_mv.col;
1600 1560
1601 int row_min = ref_row - distance; 1561 int row_min = ref_row - distance;
1602 int row_max = ref_row + distance; 1562 int row_max = ref_row + distance;
1603 int col_min = ref_col - distance; 1563 int col_min = ref_col - distance;
1604 int col_max = ref_col + distance; 1564 int col_max = ref_col + distance;
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
1668 mv_err_cost(&this_mv, center_mv, mvjcost, mvcost, x->errorperbit, 1628 mv_err_cost(&this_mv, center_mv, mvjcost, mvcost, x->errorperbit,
1669 xd->allow_high_precision_mv); 1629 xd->allow_high_precision_mv);
1670 else 1630 else
1671 return INT_MAX; 1631 return INT_MAX;
1672 } 1632 }
1673 1633
1674 int vp9_full_search_sadx3(MACROBLOCK *x, BLOCK *b, BLOCKD *d, int_mv *ref_mv, 1634 int vp9_full_search_sadx3(MACROBLOCK *x, BLOCK *b, BLOCKD *d, int_mv *ref_mv,
1675 int sad_per_bit, int distance, 1635 int sad_per_bit, int distance,
1676 vp9_variance_fn_ptr_t *fn_ptr, int *mvjcost, 1636 vp9_variance_fn_ptr_t *fn_ptr, int *mvjcost,
1677 int *mvcost[2], int_mv *center_mv) { 1637 int *mvcost[2], int_mv *center_mv) {
1678 unsigned char *what = (*(b->base_src) + b->src); 1638 uint8_t *what = (*(b->base_src) + b->src);
1679 int what_stride = b->src_stride; 1639 int what_stride = b->src_stride;
1680 unsigned char *in_what; 1640 uint8_t *in_what;
1681 int in_what_stride = d->pre_stride; 1641 int in_what_stride = d->pre_stride;
1682 int mv_stride = d->pre_stride; 1642 int mv_stride = d->pre_stride;
1683 unsigned char *bestaddress; 1643 uint8_t *bestaddress;
1684 int_mv *best_mv = &d->bmi.as_mv.first; 1644 int_mv *best_mv = &d->bmi.as_mv.first;
1685 int_mv this_mv; 1645 int_mv this_mv;
1686 unsigned int bestsad = INT_MAX; 1646 unsigned int bestsad = INT_MAX;
1687 int r, c; 1647 int r, c;
1688 1648
1689 unsigned char *check_here; 1649 uint8_t *check_here;
1690 unsigned int thissad; 1650 unsigned int thissad;
1691 MACROBLOCKD *xd = &x->e_mbd; 1651 MACROBLOCKD *xd = &x->e_mbd;
1692 1652
1693 int ref_row = ref_mv->as_mv.row; 1653 int ref_row = ref_mv->as_mv.row;
1694 int ref_col = ref_mv->as_mv.col; 1654 int ref_col = ref_mv->as_mv.col;
1695 1655
1696 int row_min = ref_row - distance; 1656 int row_min = ref_row - distance;
1697 int row_max = ref_row + distance; 1657 int row_max = ref_row + distance;
1698 int col_min = ref_col - distance; 1658 int col_min = ref_col - distance;
1699 int col_max = ref_col + distance; 1659 int col_max = ref_col + distance;
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
1797 xd->allow_high_precision_mv); 1757 xd->allow_high_precision_mv);
1798 else 1758 else
1799 return INT_MAX; 1759 return INT_MAX;
1800 } 1760 }
1801 1761
1802 int vp9_full_search_sadx8(MACROBLOCK *x, BLOCK *b, BLOCKD *d, int_mv *ref_mv, 1762 int vp9_full_search_sadx8(MACROBLOCK *x, BLOCK *b, BLOCKD *d, int_mv *ref_mv,
1803 int sad_per_bit, int distance, 1763 int sad_per_bit, int distance,
1804 vp9_variance_fn_ptr_t *fn_ptr, 1764 vp9_variance_fn_ptr_t *fn_ptr,
1805 int *mvjcost, int *mvcost[2], 1765 int *mvjcost, int *mvcost[2],
1806 int_mv *center_mv) { 1766 int_mv *center_mv) {
1807 unsigned char *what = (*(b->base_src) + b->src); 1767 uint8_t *what = (*(b->base_src) + b->src);
1808 int what_stride = b->src_stride; 1768 int what_stride = b->src_stride;
1809 unsigned char *in_what; 1769 uint8_t *in_what;
1810 int in_what_stride = d->pre_stride; 1770 int in_what_stride = d->pre_stride;
1811 int mv_stride = d->pre_stride; 1771 int mv_stride = d->pre_stride;
1812 unsigned char *bestaddress; 1772 uint8_t *bestaddress;
1813 int_mv *best_mv = &d->bmi.as_mv.first; 1773 int_mv *best_mv = &d->bmi.as_mv.first;
1814 int_mv this_mv; 1774 int_mv this_mv;
1815 unsigned int bestsad = INT_MAX; 1775 unsigned int bestsad = INT_MAX;
1816 int r, c; 1776 int r, c;
1817 1777
1818 unsigned char *check_here; 1778 uint8_t *check_here;
1819 unsigned int thissad; 1779 unsigned int thissad;
1820 MACROBLOCKD *xd = &x->e_mbd; 1780 MACROBLOCKD *xd = &x->e_mbd;
1821 1781
1822 int ref_row = ref_mv->as_mv.row; 1782 int ref_row = ref_mv->as_mv.row;
1823 int ref_col = ref_mv->as_mv.col; 1783 int ref_col = ref_mv->as_mv.col;
1824 1784
1825 int row_min = ref_row - distance; 1785 int row_min = ref_row - distance;
1826 int row_max = ref_row + distance; 1786 int row_max = ref_row + distance;
1827 int col_min = ref_col - distance; 1787 int col_min = ref_col - distance;
1828 int col_max = ref_col + distance; 1788 int col_max = ref_col + distance;
1829 1789
1830 DECLARE_ALIGNED_ARRAY(16, unsigned short, sad_array8, 8); 1790 DECLARE_ALIGNED_ARRAY(16, uint16_t, sad_array8, 8);
1831 unsigned int sad_array[3]; 1791 unsigned int sad_array[3];
1832 int_mv fcenter_mv; 1792 int_mv fcenter_mv;
1833 1793
1834 int *mvjsadcost = x->nmvjointsadcost; 1794 int *mvjsadcost = x->nmvjointsadcost;
1835 int *mvsadcost[2] = {x->nmvsadcost[0], x->nmvsadcost[1]}; 1795 int *mvsadcost[2] = {x->nmvsadcost[0], x->nmvsadcost[1]};
1836 1796
1837 fcenter_mv.as_mv.row = center_mv->as_mv.row >> 3; 1797 fcenter_mv.as_mv.row = center_mv->as_mv.row >> 3;
1838 fcenter_mv.as_mv.col = center_mv->as_mv.col >> 3; 1798 fcenter_mv.as_mv.col = center_mv->as_mv.col >> 3;
1839 1799
1840 // Work out the mid point for the search 1800 // Work out the mid point for the search
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
1952 xd->allow_high_precision_mv); 1912 xd->allow_high_precision_mv);
1953 else 1913 else
1954 return INT_MAX; 1914 return INT_MAX;
1955 } 1915 }
1956 int vp9_refining_search_sad_c(MACROBLOCK *x, BLOCK *b, BLOCKD *d, 1916 int vp9_refining_search_sad_c(MACROBLOCK *x, BLOCK *b, BLOCKD *d,
1957 int_mv *ref_mv, int error_per_bit, 1917 int_mv *ref_mv, int error_per_bit,
1958 int search_range, vp9_variance_fn_ptr_t *fn_ptr, 1918 int search_range, vp9_variance_fn_ptr_t *fn_ptr,
1959 int *mvjcost, int *mvcost[2], int_mv *center_mv) { 1919 int *mvjcost, int *mvcost[2], int_mv *center_mv) {
1960 MV neighbors[4] = {{ -1, 0}, {0, -1}, {0, 1}, {1, 0}}; 1920 MV neighbors[4] = {{ -1, 0}, {0, -1}, {0, 1}, {1, 0}};
1961 int i, j; 1921 int i, j;
1962 short this_row_offset, this_col_offset; 1922 int this_row_offset, this_col_offset;
1963 1923
1964 int what_stride = b->src_stride; 1924 int what_stride = b->src_stride;
1965 int in_what_stride = d->pre_stride; 1925 int in_what_stride = d->pre_stride;
1966 unsigned char *what = (*(b->base_src) + b->src); 1926 uint8_t *what = (*(b->base_src) + b->src);
1967 unsigned char *best_address = (unsigned char *)(*(d->base_pre) + d->pre + 1927 uint8_t *best_address = (uint8_t *)(*(d->base_pre) + d->pre +
1968 (ref_mv->as_mv.row * (d->pre_s tride)) + ref_mv->as_mv.col); 1928 (ref_mv->as_mv.row * (d->pre_stride)) +
1969 unsigned char *check_here; 1929 ref_mv->as_mv.col);
1930 uint8_t *check_here;
1970 unsigned int thissad; 1931 unsigned int thissad;
1971 int_mv this_mv; 1932 int_mv this_mv;
1972 unsigned int bestsad = INT_MAX; 1933 unsigned int bestsad = INT_MAX;
1973 MACROBLOCKD *xd = &x->e_mbd; 1934 MACROBLOCKD *xd = &x->e_mbd;
1974 int_mv fcenter_mv; 1935 int_mv fcenter_mv;
1975 1936
1976 int *mvjsadcost = x->nmvjointsadcost; 1937 int *mvjsadcost = x->nmvjointsadcost;
1977 int *mvsadcost[2] = {x->nmvsadcost[0], x->nmvsadcost[1]}; 1938 int *mvsadcost[2] = {x->nmvsadcost[0], x->nmvsadcost[1]};
1978 1939
1979 fcenter_mv.as_mv.row = center_mv->as_mv.row >> 3; 1940 fcenter_mv.as_mv.row = center_mv->as_mv.row >> 3;
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
2029 else 1990 else
2030 return INT_MAX; 1991 return INT_MAX;
2031 } 1992 }
2032 1993
2033 int vp9_refining_search_sadx4(MACROBLOCK *x, BLOCK *b, BLOCKD *d, 1994 int vp9_refining_search_sadx4(MACROBLOCK *x, BLOCK *b, BLOCKD *d,
2034 int_mv *ref_mv, int error_per_bit, 1995 int_mv *ref_mv, int error_per_bit,
2035 int search_range, vp9_variance_fn_ptr_t *fn_ptr, 1996 int search_range, vp9_variance_fn_ptr_t *fn_ptr,
2036 int *mvjcost, int *mvcost[2], int_mv *center_mv) { 1997 int *mvjcost, int *mvcost[2], int_mv *center_mv) {
2037 MV neighbors[4] = {{ -1, 0}, {0, -1}, {0, 1}, {1, 0}}; 1998 MV neighbors[4] = {{ -1, 0}, {0, -1}, {0, 1}, {1, 0}};
2038 int i, j; 1999 int i, j;
2039 short this_row_offset, this_col_offset; 2000 int this_row_offset, this_col_offset;
2040 2001
2041 int what_stride = b->src_stride; 2002 int what_stride = b->src_stride;
2042 int in_what_stride = d->pre_stride; 2003 int in_what_stride = d->pre_stride;
2043 unsigned char *what = (*(b->base_src) + b->src); 2004 uint8_t *what = (*(b->base_src) + b->src);
2044 unsigned char *best_address = (unsigned char *)(*(d->base_pre) + d->pre + 2005 uint8_t *best_address = (uint8_t *)(*(d->base_pre) + d->pre +
2045 (ref_mv->as_mv.row * (d->pre_s tride)) + ref_mv->as_mv.col); 2006 (ref_mv->as_mv.row * (d->pre_stride)) +
2046 unsigned char *check_here; 2007 ref_mv->as_mv.col);
2008 uint8_t *check_here;
2047 unsigned int thissad; 2009 unsigned int thissad;
2048 int_mv this_mv; 2010 int_mv this_mv;
2049 unsigned int bestsad = INT_MAX; 2011 unsigned int bestsad = INT_MAX;
2050 MACROBLOCKD *xd = &x->e_mbd; 2012 MACROBLOCKD *xd = &x->e_mbd;
2051 int_mv fcenter_mv; 2013 int_mv fcenter_mv;
2052 2014
2053 int *mvjsadcost = x->nmvjointsadcost; 2015 int *mvjsadcost = x->nmvjointsadcost;
2054 int *mvsadcost[2] = {x->nmvsadcost[0], x->nmvsadcost[1]}; 2016 int *mvsadcost[2] = {x->nmvsadcost[0], x->nmvsadcost[1]};
2055 2017
2056 fcenter_mv.as_mv.row = center_mv->as_mv.row >> 3; 2018 fcenter_mv.as_mv.row = center_mv->as_mv.row >> 3;
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
2146 int i, j; 2108 int i, j;
2147 2109
2148 fprintf(f, "#include \"vp9_entropy.h\"\n"); 2110 fprintf(f, "#include \"vp9_entropy.h\"\n");
2149 fprintf(f, "const int vp9_mode_contexts[6][4] ="); 2111 fprintf(f, "const int vp9_mode_contexts[6][4] =");
2150 fprintf(f, "{\n"); 2112 fprintf(f, "{\n");
2151 for (j = 0; j < 6; j++) { 2113 for (j = 0; j < 6; j++) {
2152 fprintf(f, " {/* %d */ ", j); 2114 fprintf(f, " {/* %d */ ", j);
2153 fprintf(f, " "); 2115 fprintf(f, " ");
2154 for (i = 0; i < 4; i++) { 2116 for (i = 0; i < 4; i++) {
2155 int this_prob; 2117 int this_prob;
2156 int count;
2157 2118
2158 // context probs 2119 // context probs
2159 count = mv_ref_ct[j][i][0] + mv_ref_ct[j][i][1]; 2120 this_prob = get_binary_prob(mv_ref_ct[j][i][0], mv_ref_ct[j][i][1]);
2160 if (count)
2161 this_prob = 256 * mv_ref_ct[j][i][0] / count;
2162 else
2163 this_prob = 128;
2164 2121
2165 if (this_prob == 0)
2166 this_prob = 1;
2167 fprintf(f, "%5d, ", this_prob); 2122 fprintf(f, "%5d, ", this_prob);
2168 } 2123 }
2169 fprintf(f, " },\n"); 2124 fprintf(f, " },\n");
2170 } 2125 }
2171 2126
2172 fprintf(f, "};\n"); 2127 fprintf(f, "};\n");
2173 fclose(f); 2128 fclose(f);
2174 } 2129 }
2175 2130
2176 /* MV ref count ENTROPY_STATS stats code */ 2131 /* MV ref count ENTROPY_STATS stats code */
(...skipping 30 matching lines...) Expand all
2207 } else { 2162 } else {
2208 ++mv_ref_ct [ct[3]] [3] [1]; 2163 ++mv_ref_ct [ct[3]] [3] [1];
2209 ++mv_mode_cts[3][1]; 2164 ++mv_mode_cts[3][1];
2210 } 2165 }
2211 } 2166 }
2212 } 2167 }
2213 } 2168 }
2214 } 2169 }
2215 2170
2216 #endif/* END MV ref count ENTROPY_STATS stats code */ 2171 #endif/* END MV ref count ENTROPY_STATS stats code */
OLDNEW
« no previous file with comments | « source/libvpx/vp9/encoder/vp9_mcomp.h ('k') | source/libvpx/vp9/encoder/vp9_modecosts.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698