vp9 svc: SVC encoder speed up.
Bias towards base_mv and skip 1/4 pixel motion search when using base mv. 2~3% speed up for 2 spatial layers, 3~5% speed up for 3 spatial layers. PSNR loss: (2 layers) 0.07dB for gips_stationary, 0.04dB for gips_motion; (3 layers) 0.07dB for gips_stationary, 0.06dB for gips_motion. Change-Id: I773acbda080c301cabe8cd259f842bcc5b8bc999
This commit is contained in:
parent
1c07abca18
commit
8be7e572a7
@ -203,9 +203,12 @@ static int combined_motion_search(VP9_COMP *cpi, MACROBLOCK *x,
|
||||
!(RDCOST(x->rdmult, x->rddiv, (*rate_mv + rate_mode), 0) > best_rd_sofar);
|
||||
|
||||
if (rv) {
|
||||
const int subpel_force_stop = use_base_mv && cpi->sf.base_mv_aggressive
|
||||
? 2
|
||||
: cpi->sf.mv.subpel_force_stop;
|
||||
cpi->find_fractional_mv_step(
|
||||
x, &tmp_mv->as_mv, &ref_mv, cpi->common.allow_high_precision_mv,
|
||||
x->errorperbit, &cpi->fn_ptr[bsize], cpi->sf.mv.subpel_force_stop,
|
||||
x->errorperbit, &cpi->fn_ptr[bsize], subpel_force_stop,
|
||||
cpi->sf.mv.subpel_iters_per_step, cond_cost_list(cpi, cost_list),
|
||||
x->nmvjointcost, x->mvcost, &dis, &x->pred_sse[ref], NULL, 0, 0);
|
||||
*rate_mv = vp9_mv_bit_cost(&tmp_mv->as_mv, &ref_mv, x->nmvjointcost,
|
||||
@ -1602,10 +1605,10 @@ void vp9_pick_inter_mode(VP9_COMP *cpi, MACROBLOCK *x, TileDataEnc *tile_data,
|
||||
x->nmvjointcost, x->mvcost, &dis, &x->pred_sse[ref_frame], NULL, 0,
|
||||
0);
|
||||
} else if (svc->use_base_mv && svc->spatial_layer_id) {
|
||||
if (frame_mv[NEWMV][ref_frame].as_int != INVALID_MV &&
|
||||
frame_mv[NEWMV][ref_frame].as_int != 0) {
|
||||
if (frame_mv[NEWMV][ref_frame].as_int != INVALID_MV) {
|
||||
const int pre_stride = xd->plane[0].pre[0].stride;
|
||||
int base_mv_sad = INT_MAX;
|
||||
const float base_mv_bias = sf->base_mv_aggressive ? 1.5 : 1.0;
|
||||
const uint8_t *const pre_buf =
|
||||
xd->plane[0].pre[0].buf +
|
||||
(frame_mv[NEWMV][ref_frame].as_mv.row >> 3) * pre_stride +
|
||||
@ -1613,9 +1616,7 @@ void vp9_pick_inter_mode(VP9_COMP *cpi, MACROBLOCK *x, TileDataEnc *tile_data,
|
||||
base_mv_sad = cpi->fn_ptr[bsize].sdf(
|
||||
x->plane[0].src.buf, x->plane[0].src.stride, pre_buf, pre_stride);
|
||||
|
||||
// TODO(wonkap): make the decision to use base layer mv on RD;
|
||||
// not just SAD.
|
||||
if (base_mv_sad < x->pred_mv_sad[ref_frame]) {
|
||||
if (base_mv_sad < base_mv_bias * x->pred_mv_sad[ref_frame]) {
|
||||
// Base layer mv is good.
|
||||
if (!combined_motion_search(cpi, x, bsize, mi_row, mi_col,
|
||||
&frame_mv[NEWMV][ref_frame], &rate_mv,
|
||||
|
@ -445,6 +445,7 @@ static void set_rt_speed_feature(VP9_COMP *cpi, SPEED_FEATURES *sf, int speed,
|
||||
// Enable short circuit for low temporal variance.
|
||||
sf->short_circuit_low_temp_var = 1;
|
||||
}
|
||||
if (cpi->use_svc) sf->base_mv_aggressive = 1;
|
||||
}
|
||||
|
||||
if (speed >= 7) {
|
||||
@ -457,6 +458,7 @@ static void set_rt_speed_feature(VP9_COMP *cpi, SPEED_FEATURES *sf, int speed,
|
||||
sf->mv.fullpel_search_step_param = 6;
|
||||
}
|
||||
}
|
||||
|
||||
if (speed >= 8) {
|
||||
sf->adaptive_rd_thresh = 4;
|
||||
sf->mv.subpel_force_stop = (content == VP9E_CONTENT_SCREEN) ? 3 : 2;
|
||||
@ -587,6 +589,7 @@ void vp9_set_speed_features_framesize_independent(VP9_COMP *cpi) {
|
||||
sf->short_circuit_low_temp_var = 0;
|
||||
sf->limit_newmv_early_exit = 0;
|
||||
sf->bias_golden = 0;
|
||||
sf->base_mv_aggressive = 0;
|
||||
|
||||
// Some speed-up features even for best quality as minimal impact on quality.
|
||||
sf->adaptive_rd_thresh = 1;
|
||||
|
@ -453,11 +453,17 @@ typedef struct SPEED_FEATURES {
|
||||
// INTRA for bsize >= 32x32 and vert/horz INTRA for bsize 16x16, 16x32 and
|
||||
// 32x16.
|
||||
int short_circuit_low_temp_var;
|
||||
|
||||
// Limits the rd-threshold update for early exit for the newmv-last mode,
|
||||
// for non-rd mode.
|
||||
int limit_newmv_early_exit;
|
||||
|
||||
// Adds a bias against golden reference, for non-rd mode.
|
||||
int bias_golden;
|
||||
|
||||
// Bias to use base mv and skip 1/4 subpel search when use base mv in
|
||||
// enhancement layer.
|
||||
int base_mv_aggressive;
|
||||
} SPEED_FEATURES;
|
||||
|
||||
struct VP9_COMP;
|
||||
|
Loading…
x
Reference in New Issue
Block a user