diff --git a/vp8/encoder/mcomp.c b/vp8/encoder/mcomp.c index 67e4f7ead73eac9015821f3e82cadc7e7ea26505..dc0edfbc1df85626937836d0c77f932951dd7ccd 100644 --- a/vp8/encoder/mcomp.c +++ b/vp8/encoder/mcomp.c @@ -34,17 +34,23 @@ int vp8_mv_bit_cost(int_mv *mv, int_mv *ref, int *mvcost[2], int Weight) static int mv_err_cost(int_mv *mv, int_mv *ref, int *mvcost[2], int error_per_bit) { - return ((mvcost[0][(mv->as_mv.row - ref->as_mv.row) >> 1] + - mvcost[1][(mv->as_mv.col - ref->as_mv.col) >> 1]) - * error_per_bit + 128) >> 8; + // Ignore mv costing if mvcost is NULL + if (mvcost) + return ((mvcost[0][(mv->as_mv.row - ref->as_mv.row) >> 1] + + mvcost[1][(mv->as_mv.col - ref->as_mv.col) >> 1]) + * error_per_bit + 128) >> 8; + return 0; } static int mvsad_err_cost(int_mv *mv, int_mv *ref, int *mvsadcost[2], int error_per_bit) { - /* Calculate sad error cost on full pixel basis. */ - return ((mvsadcost[0][(mv->as_mv.row - ref->as_mv.row)] + - mvsadcost[1][(mv->as_mv.col - ref->as_mv.col)]) - * error_per_bit + 128) >> 8; + // Calculate sad error cost on full pixel basis. + // Ignore mv costing if mvsadcost is NULL + if (mvsadcost) + return ((mvsadcost[0][(mv->as_mv.row - ref->as_mv.row)] + + mvsadcost[1][(mv->as_mv.col - ref->as_mv.col)]) + * error_per_bit + 128) >> 8; + return 0; } void vp8_init_dsmotion_compensation(MACROBLOCK *x, int stride) @@ -176,7 +182,7 @@ void vp8_init3smotion_compensation(MACROBLOCK *x, int stride) * 32 cols area that is enough for 16x16 macroblock. Later, for SPLITMV, we * could reduce the area. */ -#define MVC(r,c) (((mvcost[0][(r)-rr] + mvcost[1][(c) - rc]) * error_per_bit + 128 )>>8 ) // estimated cost of a motion vector (r,c) +#define MVC(r,c) (mvcost ? ((mvcost[0][(r)-rr] + mvcost[1][(c) - rc]) * error_per_bit + 128 )>>8 : 0) // estimated cost of a motion vector (r,c) #define PRE(r,c) (y + (((r)>>2) * y_stride + ((c)>>2) -(offset))) // pointer to predictor base of a motionvector #define SP(x) (((x)&3)<<1) // convert motion vector component to offset for svf calc #define DIST(r,c) vfp->svf( PRE(r,c), y_stride, SP(c),SP(r), z,b->src_stride,&sse) // returns subpixel variance error function. diff --git a/vp8/encoder/temporal_filter.c b/vp8/encoder/temporal_filter.c index 20bdf17896d552ab03a265c975d82d9072dd132b..b82ea47cb31b4727b1154cd45ce68398b91827b8 100644 --- a/vp8/encoder/temporal_filter.c +++ b/vp8/encoder/temporal_filter.c @@ -134,7 +134,6 @@ void vp8_temporal_filter_apply_c } #if ALT_REF_MC_ENABLED -static int dummy_cost[2*mv_max+1]; static int vp8_temporal_filter_find_matching_mb_c ( @@ -156,9 +155,6 @@ static int vp8_temporal_filter_find_matching_mb_c int_mv best_ref_mv1; int_mv best_ref_mv1_full; /* full-pixel value of best_ref_mv1 */ - int *mvcost[2] = { &dummy_cost[mv_max+1], &dummy_cost[mv_max+1] }; - int *mvsadcost[2] = { &dummy_cost[mv_max+1], &dummy_cost[mv_max+1] }; - // Save input state unsigned char **base_src = b->base_src; int src = b->src; @@ -196,12 +192,11 @@ static int vp8_temporal_filter_find_matching_mb_c /*cpi->sf.search_method == HEX*/ // TODO Check that the 16x16 vf & sdf are selected here - bestsme = vp8_hex_search(x, b, d, - &best_ref_mv1_full, &d->bmi.mv, - step_param, - sadpb, - &cpi->fn_ptr[BLOCK_16X16], - mvsadcost, mvcost, &best_ref_mv1); + // Ignore mv costing by sending NULL cost arrays + bestsme = vp8_hex_search(x, b, d, &best_ref_mv1_full, &d->bmi.mv, + step_param, sadpb, + &cpi->fn_ptr[BLOCK_16X16], + NULL, NULL, &best_ref_mv1); #if ALT_REF_SUBPEL_ENABLED // Try sub-pixel MC? @@ -209,10 +204,13 @@ static int vp8_temporal_filter_find_matching_mb_c { int distortion; unsigned int sse; + // Ignore mv costing by sending NULL cost array bestsme = cpi->find_fractional_mv_step(x, b, d, - &d->bmi.mv, &best_ref_mv1, - x->errorperbit, &cpi->fn_ptr[BLOCK_16X16], - mvcost, &distortion, &sse); + &d->bmi.mv, + &best_ref_mv1, + x->errorperbit, + &cpi->fn_ptr[BLOCK_16X16], + NULL, &distortion, &sse); } #endif @@ -304,12 +302,11 @@ static void vp8_temporal_filter_iterate_c // Find best match in this frame by MC err = vp8_temporal_filter_find_matching_mb_c - (cpi, - cpi->frames[alt_ref_index], - cpi->frames[frame], - mb_y_offset, - THRESH_LOW); - + (cpi, + cpi->frames[alt_ref_index], + cpi->frames[frame], + mb_y_offset, + THRESH_LOW); #endif // Assign higher weight to matching MB if it's error // score is lower. If not applying MC default behavior