Merge "Allow LF_UPDATE type of frames to use BWDREF" into nextgenv2

This commit is contained in:
Wei-ting Lin 2016-08-23 18:06:56 +00:00 коммит произвёл Gerrit Code Review
Родитель 49b85d3965 4e8acca925
Коммит 7fed5044ca
2 изменённых файлов: 25 добавлений и 5 удалений

Просмотреть файл

@ -3260,7 +3260,8 @@ void vp10_update_reference_frames(VP10_COMP *cpi) {
// NOTE: The ALT_REFs' are indexed reversely, and ALT0 refers to the
// farthest ALT_REF from the first frame in the gf group.
int tmp = cpi->arf_map[0];
cpi->arf_map[0] = cpi->bwd_fb_idx;
cpi->arf_map[0] = cpi->alt_fb_idx;
cpi->alt_fb_idx = cpi->bwd_fb_idx;
cpi->bwd_fb_idx = tmp;
}
ref_cnt_fb(pool->frame_bufs, &cm->ref_frame_map[cpi->bwd_fb_idx],
@ -3309,7 +3310,14 @@ void vp10_update_reference_frames(VP10_COMP *cpi) {
// v v v
// lst_fb_idxes[2], lst_fb_idxes[0], lst_fb_idxes[1]
int ref_frame;
if (cpi->rc.is_bwd_ref_frame && cpi->num_extra_arfs) {
// We have swapped the virtual indices to use ALT0 as BWD_REF
// and we need to swap them back.
int tmp = cpi->arf_map[0];
cpi->arf_map[0] = cpi->alt_fb_idx;
cpi->alt_fb_idx = cpi->bwd_fb_idx;
cpi->bwd_fb_idx = tmp;
}
if (cm->frame_type == KEY_FRAME) {
for (ref_frame = 0; ref_frame < LAST_REF_FRAMES; ++ref_frame) {
ref_cnt_fb(pool->frame_bufs,

Просмотреть файл

@ -2577,7 +2577,18 @@ static void configure_buffer_updates(VP10_COMP *cpi) {
case LF_UPDATE:
#if CONFIG_EXT_REFS
cpi->refresh_bwd_ref_frame = 0;
// If we have extra ALT_REFs, we can use the farthest ALT (ALT0) as
// the BWD_REF.
if (cpi->num_extra_arfs) {
int tmp = cpi->bwd_fb_idx;
cpi->rc.is_bwd_ref_frame = 1;
cpi->bwd_fb_idx = cpi->alt_fb_idx;
cpi->alt_fb_idx = cpi->arf_map[0];;
cpi->arf_map[0] = tmp;
} else {
cpi->rc.is_bwd_ref_frame = 0;
}
#endif // CONFIG_EXT_REFS
cpi->refresh_last_frame = 1;
cpi->refresh_golden_frame = 0;
@ -2620,12 +2631,13 @@ static void configure_buffer_updates(VP10_COMP *cpi) {
cpi->refresh_alt_ref_frame = 0;
cpi->rc.is_bwd_ref_frame = 1;
if (cpi->num_extra_arfs) {
// Allow BRF uses the farthest ALT_REF (ALT0) as BWD_REF by swapping
// Allow BRF use the farthest ALT_REF (ALT0) as BWD_REF by swapping
// the virtual indices.
// NOTE: The indices will be swapped back after this frame is encoded
// (in vp10_update_reference_frames()).
int tmp = cpi->bwd_fb_idx;
cpi->bwd_fb_idx = cpi->arf_map[0];
cpi->bwd_fb_idx = cpi->alt_fb_idx;
cpi->alt_fb_idx = cpi->arf_map[0];
cpi->arf_map[0] = tmp;
}
break;