vp9: Adjustment to scene-cut detection.
Change recursive weight for average_source_sad and put some constraint on spacing between detected scene-cuts. Change only affects 1 pass real-time mode. Change-Id: I1917e748d845e244812d11aec2a9d755372ec182
This commit is contained in:
Родитель
9c2ed00c8c
Коммит
24db57f0e1
|
@ -1687,6 +1687,7 @@ VP9_COMP *vp9_create_compressor(VP9EncoderConfig *oxcf,
|
|||
cpi->common.buffer_pool = pool;
|
||||
|
||||
cpi->rc.high_source_sad = 0;
|
||||
cpi->rc.count_last_scene_change = 0;
|
||||
|
||||
init_config(cpi, oxcf);
|
||||
vp9_rc_init(&cpi->oxcf, oxcf->pass, &cpi->rc);
|
||||
|
|
|
@ -2084,10 +2084,11 @@ void vp9_avg_source_sad(VP9_COMP *cpi) {
|
|||
else
|
||||
rc->high_source_sad = 0;
|
||||
if (avg_sad > 0 || cpi->oxcf.rc_mode == VPX_CBR)
|
||||
rc->avg_source_sad = (rc->avg_source_sad + avg_sad) >> 1;
|
||||
rc->avg_source_sad = (3 * rc->avg_source_sad + avg_sad) >> 2;
|
||||
// For VBR, under scene change/high content change, force golden refresh.
|
||||
if (cpi->oxcf.rc_mode == VPX_VBR &&
|
||||
rc->high_source_sad &&
|
||||
rc->count_last_scene_change > 4 &&
|
||||
cpi->ext_refresh_frame_flags_pending == 0) {
|
||||
int target;
|
||||
cpi->refresh_golden_frame = 1;
|
||||
|
@ -2099,6 +2100,9 @@ void vp9_avg_source_sad(VP9_COMP *cpi) {
|
|||
rc->frames_till_gf_update_due = rc->frames_to_key;
|
||||
target = calc_pframe_target_size_one_pass_vbr(cpi);
|
||||
vp9_rc_set_frame_target(cpi, target);
|
||||
rc->count_last_scene_change = 0;
|
||||
} else {
|
||||
rc->count_last_scene_change++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -161,6 +161,7 @@ typedef struct {
|
|||
|
||||
uint64_t avg_source_sad;
|
||||
int high_source_sad;
|
||||
int count_last_scene_change;
|
||||
} RATE_CONTROL;
|
||||
|
||||
struct VP9_COMP;
|
||||
|
|
Загрузка…
Ссылка в новой задаче