Merge remote branch 'internal/upstream' into HEAD
This commit is contained in:
commit
1f8e42e7b8
@ -667,6 +667,7 @@ void vp8_set_speed_features(VP8_COMP *cpi)
|
||||
|
||||
sf->first_step = 0;
|
||||
sf->max_step_search_steps = MAX_MVSEARCH_STEPS;
|
||||
sf->improved_mv_pred = 1;
|
||||
|
||||
cpi->do_full[0] = 0;
|
||||
cpi->do_full[1] = 0;
|
||||
@ -709,34 +710,6 @@ void vp8_set_speed_features(VP8_COMP *cpi)
|
||||
|
||||
sf->first_step = 0;
|
||||
sf->max_step_search_steps = MAX_MVSEARCH_STEPS;
|
||||
|
||||
if (!(cpi->ref_frame_flags & VP8_LAST_FLAG))
|
||||
{
|
||||
sf->thresh_mult[THR_NEWMV ] = INT_MAX;
|
||||
sf->thresh_mult[THR_NEARESTMV] = INT_MAX;
|
||||
sf->thresh_mult[THR_ZEROMV ] = INT_MAX;
|
||||
sf->thresh_mult[THR_NEARMV ] = INT_MAX;
|
||||
sf->thresh_mult[THR_SPLITMV ] = INT_MAX;
|
||||
}
|
||||
|
||||
if (!(cpi->ref_frame_flags & VP8_GOLD_FLAG))
|
||||
{
|
||||
sf->thresh_mult[THR_NEARESTG ] = INT_MAX;
|
||||
sf->thresh_mult[THR_ZEROG ] = INT_MAX;
|
||||
sf->thresh_mult[THR_NEARG ] = INT_MAX;
|
||||
sf->thresh_mult[THR_NEWG ] = INT_MAX;
|
||||
sf->thresh_mult[THR_SPLITG ] = INT_MAX;
|
||||
}
|
||||
|
||||
if (!(cpi->ref_frame_flags & VP8_ALT_FLAG))
|
||||
{
|
||||
sf->thresh_mult[THR_NEARESTA ] = INT_MAX;
|
||||
sf->thresh_mult[THR_ZEROA ] = INT_MAX;
|
||||
sf->thresh_mult[THR_NEARA ] = INT_MAX;
|
||||
sf->thresh_mult[THR_NEWA ] = INT_MAX;
|
||||
sf->thresh_mult[THR_SPLITA ] = INT_MAX;
|
||||
}
|
||||
|
||||
break;
|
||||
case 1:
|
||||
case 3:
|
||||
@ -794,41 +767,22 @@ void vp8_set_speed_features(VP8_COMP *cpi)
|
||||
sf->full_freq[0] = 15;
|
||||
sf->full_freq[1] = 31;
|
||||
|
||||
sf->first_step = 0;
|
||||
sf->max_step_search_steps = MAX_MVSEARCH_STEPS;
|
||||
|
||||
if (!(cpi->ref_frame_flags & VP8_LAST_FLAG))
|
||||
{
|
||||
sf->thresh_mult[THR_NEWMV ] = INT_MAX;
|
||||
sf->thresh_mult[THR_NEARESTMV] = INT_MAX;
|
||||
sf->thresh_mult[THR_ZEROMV ] = INT_MAX;
|
||||
sf->thresh_mult[THR_NEARMV ] = INT_MAX;
|
||||
sf->thresh_mult[THR_SPLITMV ] = INT_MAX;
|
||||
}
|
||||
|
||||
if (!(cpi->ref_frame_flags & VP8_GOLD_FLAG))
|
||||
{
|
||||
sf->thresh_mult[THR_NEARESTG ] = INT_MAX;
|
||||
sf->thresh_mult[THR_ZEROG ] = INT_MAX;
|
||||
sf->thresh_mult[THR_NEARG ] = INT_MAX;
|
||||
sf->thresh_mult[THR_NEWG ] = INT_MAX;
|
||||
sf->thresh_mult[THR_SPLITG ] = INT_MAX;
|
||||
}
|
||||
|
||||
if (!(cpi->ref_frame_flags & VP8_ALT_FLAG))
|
||||
{
|
||||
sf->thresh_mult[THR_NEARESTA ] = INT_MAX;
|
||||
sf->thresh_mult[THR_ZEROA ] = INT_MAX;
|
||||
sf->thresh_mult[THR_NEARA ] = INT_MAX;
|
||||
sf->thresh_mult[THR_NEWA ] = INT_MAX;
|
||||
sf->thresh_mult[THR_SPLITA ] = INT_MAX;
|
||||
}
|
||||
|
||||
if (Speed > 0)
|
||||
{
|
||||
// Disable coefficient optimization above speed 0
|
||||
/* Disable coefficient optimization above speed 0 */
|
||||
sf->optimize_coefficients = 0;
|
||||
sf->use_fastquant_for_pick = 1;
|
||||
sf->no_skip_block4x4_search = 0;
|
||||
|
||||
sf->first_step = 1;
|
||||
|
||||
cpi->mode_check_freq[THR_SPLITG] = 2;
|
||||
cpi->mode_check_freq[THR_SPLITA] = 2;
|
||||
cpi->mode_check_freq[THR_SPLITMV] = 0;
|
||||
}
|
||||
|
||||
if (Speed > 1)
|
||||
{
|
||||
cpi->mode_check_freq[THR_SPLITG] = 4;
|
||||
cpi->mode_check_freq[THR_SPLITA] = 4;
|
||||
cpi->mode_check_freq[THR_SPLITMV] = 2;
|
||||
@ -861,18 +815,10 @@ void vp8_set_speed_features(VP8_COMP *cpi)
|
||||
sf->thresh_mult[THR_NEWA ] = 2000;
|
||||
sf->thresh_mult[THR_SPLITA ] = 20000;
|
||||
}
|
||||
|
||||
sf->use_fastquant_for_pick = 1;
|
||||
|
||||
sf->first_step = 1;
|
||||
sf->max_step_search_steps = MAX_MVSEARCH_STEPS;
|
||||
sf->no_skip_block4x4_search = 0;
|
||||
}
|
||||
|
||||
if (Speed > 1)
|
||||
if (Speed > 2)
|
||||
{
|
||||
sf->use_fastquant_for_pick = 0;
|
||||
|
||||
cpi->mode_check_freq[THR_SPLITG] = 15;
|
||||
cpi->mode_check_freq[THR_SPLITA] = 15;
|
||||
cpi->mode_check_freq[THR_SPLITMV] = 7;
|
||||
@ -906,8 +852,6 @@ void vp8_set_speed_features(VP8_COMP *cpi)
|
||||
sf->thresh_mult[THR_SPLITA ] = 50000;
|
||||
}
|
||||
|
||||
sf->first_step = 1;
|
||||
|
||||
sf->improved_quant = 0;
|
||||
sf->improved_dct = 0;
|
||||
|
||||
@ -917,38 +861,14 @@ void vp8_set_speed_features(VP8_COMP *cpi)
|
||||
|
||||
sf->full_freq[0] = 31;
|
||||
sf->full_freq[1] = 63;
|
||||
|
||||
}
|
||||
|
||||
if (Speed > 2)
|
||||
{
|
||||
sf->auto_filter = 0; // Faster selection of loop filter
|
||||
cpi->mode_check_freq[THR_V_PRED] = 2;
|
||||
cpi->mode_check_freq[THR_H_PRED] = 2;
|
||||
cpi->mode_check_freq[THR_B_PRED] = 2;
|
||||
|
||||
if (cpi->ref_frame_flags & VP8_GOLD_FLAG)
|
||||
{
|
||||
cpi->mode_check_freq[THR_NEARG] = 2;
|
||||
cpi->mode_check_freq[THR_NEWG] = 4;
|
||||
}
|
||||
|
||||
if (cpi->ref_frame_flags & VP8_ALT_FLAG)
|
||||
{
|
||||
cpi->mode_check_freq[THR_NEARA] = 2;
|
||||
cpi->mode_check_freq[THR_NEWA] = 4;
|
||||
}
|
||||
|
||||
sf->thresh_mult[THR_SPLITA ] = INT_MAX;
|
||||
sf->thresh_mult[THR_SPLITG ] = INT_MAX;
|
||||
sf->thresh_mult[THR_SPLITMV ] = INT_MAX;
|
||||
|
||||
sf->full_freq[0] = 63;
|
||||
sf->full_freq[1] = 127;
|
||||
}
|
||||
|
||||
if (Speed > 3)
|
||||
{
|
||||
sf->thresh_mult[THR_SPLITA ] = INT_MAX;
|
||||
sf->thresh_mult[THR_SPLITG ] = INT_MAX;
|
||||
sf->thresh_mult[THR_SPLITMV ] = INT_MAX;
|
||||
|
||||
cpi->mode_check_freq[THR_V_PRED] = 0;
|
||||
cpi->mode_check_freq[THR_H_PRED] = 0;
|
||||
cpi->mode_check_freq[THR_B_PRED] = 0;
|
||||
@ -960,13 +880,16 @@ void vp8_set_speed_features(VP8_COMP *cpi)
|
||||
sf->auto_filter = 1;
|
||||
sf->recode_loop = 0; // recode loop off
|
||||
sf->RD = 0; // Turn rd off
|
||||
sf->full_freq[0] = INT_MAX;
|
||||
sf->full_freq[1] = INT_MAX;
|
||||
|
||||
sf->full_freq[0] = 63;
|
||||
sf->full_freq[1] = 127;
|
||||
}
|
||||
|
||||
if (Speed > 4)
|
||||
{
|
||||
sf->auto_filter = 0; // Faster selection of loop filter
|
||||
sf->full_freq[0] = INT_MAX;
|
||||
sf->full_freq[1] = INT_MAX;
|
||||
|
||||
cpi->mode_check_freq[THR_V_PRED] = 2;
|
||||
cpi->mode_check_freq[THR_H_PRED] = 2;
|
||||
@ -1032,33 +955,6 @@ void vp8_set_speed_features(VP8_COMP *cpi)
|
||||
sf->full_freq[1] = 31;
|
||||
sf->search_method = NSTEP;
|
||||
|
||||
if (!(cpi->ref_frame_flags & VP8_LAST_FLAG))
|
||||
{
|
||||
sf->thresh_mult[THR_NEWMV ] = INT_MAX;
|
||||
sf->thresh_mult[THR_NEARESTMV] = INT_MAX;
|
||||
sf->thresh_mult[THR_ZEROMV ] = INT_MAX;
|
||||
sf->thresh_mult[THR_NEARMV ] = INT_MAX;
|
||||
sf->thresh_mult[THR_SPLITMV ] = INT_MAX;
|
||||
}
|
||||
|
||||
if (!(cpi->ref_frame_flags & VP8_GOLD_FLAG))
|
||||
{
|
||||
sf->thresh_mult[THR_NEARESTG ] = INT_MAX;
|
||||
sf->thresh_mult[THR_ZEROG ] = INT_MAX;
|
||||
sf->thresh_mult[THR_NEARG ] = INT_MAX;
|
||||
sf->thresh_mult[THR_NEWG ] = INT_MAX;
|
||||
sf->thresh_mult[THR_SPLITG ] = INT_MAX;
|
||||
}
|
||||
|
||||
if (!(cpi->ref_frame_flags & VP8_ALT_FLAG))
|
||||
{
|
||||
sf->thresh_mult[THR_NEARESTA ] = INT_MAX;
|
||||
sf->thresh_mult[THR_ZEROA ] = INT_MAX;
|
||||
sf->thresh_mult[THR_NEARA ] = INT_MAX;
|
||||
sf->thresh_mult[THR_NEWA ] = INT_MAX;
|
||||
sf->thresh_mult[THR_SPLITA ] = INT_MAX;
|
||||
}
|
||||
|
||||
if (Speed > 0)
|
||||
{
|
||||
cpi->mode_check_freq[THR_SPLITG] = 4;
|
||||
@ -1294,6 +1190,7 @@ void vp8_set_speed_features(VP8_COMP *cpi)
|
||||
sf->thresh_mult[THR_V_PRED] = INT_MAX;
|
||||
sf->thresh_mult[THR_H_PRED] = INT_MAX;
|
||||
|
||||
sf->improved_mv_pred = 0;
|
||||
}
|
||||
|
||||
if (Speed > 8)
|
||||
@ -1339,7 +1236,36 @@ void vp8_set_speed_features(VP8_COMP *cpi)
|
||||
|
||||
vpx_memset(cpi->error_bins, 0, sizeof(cpi->error_bins));
|
||||
|
||||
};
|
||||
}; /* switch */
|
||||
|
||||
/* disable frame modes if flags not set */
|
||||
if (!(cpi->ref_frame_flags & VP8_LAST_FLAG))
|
||||
{
|
||||
sf->thresh_mult[THR_NEWMV ] = INT_MAX;
|
||||
sf->thresh_mult[THR_NEARESTMV] = INT_MAX;
|
||||
sf->thresh_mult[THR_ZEROMV ] = INT_MAX;
|
||||
sf->thresh_mult[THR_NEARMV ] = INT_MAX;
|
||||
sf->thresh_mult[THR_SPLITMV ] = INT_MAX;
|
||||
}
|
||||
|
||||
if (!(cpi->ref_frame_flags & VP8_GOLD_FLAG))
|
||||
{
|
||||
sf->thresh_mult[THR_NEARESTG ] = INT_MAX;
|
||||
sf->thresh_mult[THR_ZEROG ] = INT_MAX;
|
||||
sf->thresh_mult[THR_NEARG ] = INT_MAX;
|
||||
sf->thresh_mult[THR_NEWG ] = INT_MAX;
|
||||
sf->thresh_mult[THR_SPLITG ] = INT_MAX;
|
||||
}
|
||||
|
||||
if (!(cpi->ref_frame_flags & VP8_ALT_FLAG))
|
||||
{
|
||||
sf->thresh_mult[THR_NEARESTA ] = INT_MAX;
|
||||
sf->thresh_mult[THR_ZEROA ] = INT_MAX;
|
||||
sf->thresh_mult[THR_NEARA ] = INT_MAX;
|
||||
sf->thresh_mult[THR_NEWA ] = INT_MAX;
|
||||
sf->thresh_mult[THR_SPLITA ] = INT_MAX;
|
||||
}
|
||||
|
||||
|
||||
// Slow quant, dct and trellis not worthwhile for first pass
|
||||
// so make sure they are always turned off.
|
||||
|
@ -185,6 +185,7 @@ typedef struct
|
||||
|
||||
int use_fastquant_for_pick;
|
||||
int no_skip_block4x4_search;
|
||||
int improved_mv_pred;
|
||||
|
||||
} SPEED_FEATURES;
|
||||
|
||||
|
@ -608,7 +608,7 @@ int vp8_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset, int rec
|
||||
continue;
|
||||
}
|
||||
|
||||
if(x->e_mbd.mode_info_context->mbmi.mode == NEWMV)
|
||||
if(cpi->sf.improved_mv_pred && x->e_mbd.mode_info_context->mbmi.mode == NEWMV)
|
||||
{
|
||||
if(!saddone)
|
||||
{
|
||||
@ -685,37 +685,50 @@ int vp8_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset, int rec
|
||||
int n = 0;
|
||||
int sadpb = x->sadperbit16;
|
||||
|
||||
int col_min = (best_ref_mv.col - MAX_FULL_PEL_VAL) >>3;
|
||||
int col_max = (best_ref_mv.col + MAX_FULL_PEL_VAL) >>3;
|
||||
int row_min = (best_ref_mv.row - MAX_FULL_PEL_VAL) >>3;
|
||||
int row_max = (best_ref_mv.row + MAX_FULL_PEL_VAL) >>3;
|
||||
int col_min;
|
||||
int col_max;
|
||||
int row_min;
|
||||
int row_max;
|
||||
|
||||
int tmp_col_min = x->mv_col_min;
|
||||
int tmp_col_max = x->mv_col_max;
|
||||
int tmp_row_min = x->mv_row_min;
|
||||
int tmp_row_max = x->mv_row_max;
|
||||
|
||||
// Get intersection of UMV window and valid MV window to reduce # of checks in diamond search.
|
||||
if (x->mv_col_min < col_min )
|
||||
x->mv_col_min = col_min;
|
||||
if (x->mv_col_max > col_max )
|
||||
x->mv_col_max = col_max;
|
||||
if (x->mv_row_min < row_min )
|
||||
x->mv_row_min = row_min;
|
||||
if (x->mv_row_max > row_max )
|
||||
x->mv_row_max = row_max;
|
||||
int speed_adjust = (cpi->Speed > 5) ? ((cpi->Speed >= 8)? 3 : 2) : 1;
|
||||
|
||||
// Further step/diamond searches as necessary
|
||||
step_param = cpi->sf.first_step + speed_adjust;
|
||||
|
||||
if(cpi->sf.improved_mv_pred)
|
||||
{
|
||||
int speed_adjust = (cpi->Speed > 5) ? ((cpi->Speed >= 8)? 3 : 2) : 1;
|
||||
step_param = cpi->sf.first_step + speed_adjust;
|
||||
sr += speed_adjust;
|
||||
//adjust search range according to sr from mv prediction
|
||||
if(sr > step_param)
|
||||
step_param = sr;
|
||||
further_steps = (cpi->Speed >= 8)? 0: (cpi->sf.max_step_search_steps - 1 - step_param);
|
||||
|
||||
col_min = (best_ref_mv.col - MAX_FULL_PEL_VAL) >>3;
|
||||
col_max = (best_ref_mv.col + MAX_FULL_PEL_VAL) >>3;
|
||||
row_min = (best_ref_mv.row - MAX_FULL_PEL_VAL) >>3;
|
||||
row_max = (best_ref_mv.row + MAX_FULL_PEL_VAL) >>3;
|
||||
|
||||
// Get intersection of UMV window and valid MV window to reduce # of checks in diamond search.
|
||||
if (x->mv_col_min < col_min )
|
||||
x->mv_col_min = col_min;
|
||||
if (x->mv_col_max > col_max )
|
||||
x->mv_col_max = col_max;
|
||||
if (x->mv_row_min < row_min )
|
||||
x->mv_row_min = row_min;
|
||||
if (x->mv_row_max > row_max )
|
||||
x->mv_row_max = row_max;
|
||||
}else
|
||||
{
|
||||
mvp.row = best_ref_mv.row;
|
||||
mvp.col = best_ref_mv.col;
|
||||
}
|
||||
|
||||
further_steps = (cpi->Speed >= 8)? 0: (cpi->sf.max_step_search_steps - 1 - step_param);
|
||||
|
||||
if (cpi->sf.search_method == HEX)
|
||||
{
|
||||
bestsme = vp8_hex_search(x, b, d, &mvp, &d->bmi.mv.as_mv, step_param, sadpb/*x->errorperbit*/, &num00, &cpi->fn_ptr[BLOCK_16X16], x->mvsadcost, x->mvcost, &best_ref_mv);
|
||||
@ -760,10 +773,13 @@ int vp8_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset, int rec
|
||||
}
|
||||
}
|
||||
|
||||
x->mv_col_min = tmp_col_min;
|
||||
x->mv_col_max = tmp_col_max;
|
||||
x->mv_row_min = tmp_row_min;
|
||||
x->mv_row_max = tmp_row_max;
|
||||
if(cpi->sf.improved_mv_pred)
|
||||
{
|
||||
x->mv_col_min = tmp_col_min;
|
||||
x->mv_col_max = tmp_col_max;
|
||||
x->mv_row_min = tmp_row_min;
|
||||
x->mv_row_max = tmp_row_max;
|
||||
}
|
||||
|
||||
if (bestsme < INT_MAX)
|
||||
cpi->find_fractional_mv_step(x, b, d, &d->bmi.mv.as_mv, &best_ref_mv, x->errorperbit, &cpi->fn_ptr[BLOCK_16X16], cpi->mb.mvcost);
|
||||
|
Loading…
x
Reference in New Issue
Block a user