vp9 aq-mode=3: Allow it to be used for 1 pass VBR mode.
Change-Id: I630b8e33106c78382545d49da5fb4c75b1b0b528
This commit is contained in:
Родитель
034031d4aa
Коммит
a0278cad3f
|
@ -198,6 +198,9 @@ void vp9_cyclic_refresh_update_segment(VP9_COMP *const cpi,
|
|||
refresh_this_block = 1;
|
||||
}
|
||||
|
||||
if (cpi->oxcf.rc_mode == VPX_VBR && mi->ref_frame[0] == GOLDEN_FRAME)
|
||||
refresh_this_block = 0;
|
||||
|
||||
// If this block is labeled for refresh, check if we should reset the
|
||||
// segment_id.
|
||||
if (cyclic_refresh_segment_id_boosted(mi->segment_id)) {
|
||||
|
@ -305,6 +308,8 @@ void vp9_cyclic_refresh_set_golden_update(VP9_COMP *const cpi) {
|
|||
rc->baseline_gf_interval = VPXMIN(4 * (100 / cr->percent_refresh), 40);
|
||||
else
|
||||
rc->baseline_gf_interval = 40;
|
||||
if (cpi->oxcf.rc_mode == VPX_VBR)
|
||||
rc->baseline_gf_interval = 20;
|
||||
}
|
||||
|
||||
// Update some encoding stats (from the just encoded frame). If this frame's
|
||||
|
@ -504,6 +509,18 @@ void vp9_cyclic_refresh_update_parameters(VP9_COMP *const cpi) {
|
|||
cr->motion_thresh = 4;
|
||||
cr->rate_boost_fac = 12;
|
||||
}
|
||||
if (cpi->oxcf.rc_mode == VPX_VBR) {
|
||||
// To be adjusted for VBR mode, e.g., based on gf period and boost.
|
||||
// For now use smaller qp-delta (than CBR), no second boosted seg, and
|
||||
// turn-off (no refresh) on golden refresh (since it's already boosted).
|
||||
cr->percent_refresh = 10;
|
||||
cr->rate_ratio_qdelta = 1.5;
|
||||
cr->rate_boost_fac = 10;
|
||||
if (cpi->refresh_golden_frame == 1) {
|
||||
cr->percent_refresh = 0;
|
||||
cr->rate_ratio_qdelta = 1.0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Setup cyclic background refresh: set delta q and segmentation map.
|
||||
|
|
|
@ -1469,7 +1469,12 @@ void vp9_rc_get_one_pass_vbr_params(VP9_COMP *cpi) {
|
|||
cm->frame_type = INTER_FRAME;
|
||||
}
|
||||
if (rc->frames_till_gf_update_due == 0) {
|
||||
rc->baseline_gf_interval = (rc->min_gf_interval + rc->max_gf_interval) / 2;
|
||||
if (cpi->oxcf.aq_mode == CYCLIC_REFRESH_AQ && cpi->oxcf.pass == 0) {
|
||||
vp9_cyclic_refresh_set_golden_update(cpi);
|
||||
} else {
|
||||
rc->baseline_gf_interval =
|
||||
(rc->min_gf_interval + rc->max_gf_interval) / 2;
|
||||
}
|
||||
rc->frames_till_gf_update_due = rc->baseline_gf_interval;
|
||||
// NOTE: frames_till_gf_update_due must be <= frames_to_key.
|
||||
if (rc->frames_till_gf_update_due > rc->frames_to_key) {
|
||||
|
@ -1487,6 +1492,8 @@ void vp9_rc_get_one_pass_vbr_params(VP9_COMP *cpi) {
|
|||
else
|
||||
target = calc_pframe_target_size_one_pass_vbr(cpi);
|
||||
vp9_rc_set_frame_target(cpi, target);
|
||||
if (cpi->oxcf.aq_mode == CYCLIC_REFRESH_AQ && cpi->oxcf.pass == 0)
|
||||
vp9_cyclic_refresh_update_parameters(cpi);
|
||||
}
|
||||
|
||||
static int calc_pframe_target_size_one_pass_cbr(const VP9_COMP *cpi) {
|
||||
|
|
Загрузка…
Ссылка в новой задаче