From 9f02ba36847738ebf824a6dcd609d354c08859ed Mon Sep 17 00:00:00 2001 From: Jingning Han Date: Mon, 22 Oct 2018 14:21:48 -0700 Subject: [PATCH] Fix frame offset computation for GOP extension Properly compute the extended GOP frames' buffer offsets. Change-Id: I9aed14f4b8d623f1832e782828dce07aa546507d --- vp9/encoder/vp9_encoder.c | 11 +++++++---- vp9/encoder/vp9_ratectrl.c | 2 +- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/vp9/encoder/vp9_encoder.c b/vp9/encoder/vp9_encoder.c index b31f180..b5f04e3 100644 --- a/vp9/encoder/vp9_encoder.c +++ b/vp9/encoder/vp9_encoder.c @@ -5382,6 +5382,7 @@ void init_gop_frames(VP9_COMP *cpi, GF_PICTURE *gf_picture, int arf_stack_size = 0; int extend_frame_count = 0; int pframe_qindex = cpi->tpl_stats[2].base_qindex; + int frame_gop_offset = 0; RefCntBuffer *frame_bufs = cm->buffer_pool->frame_bufs; int8_t recon_frame_index[REFS_PER_FRAME + MAX_ARF_LAYERS]; @@ -5435,9 +5436,9 @@ void init_gop_frames(VP9_COMP *cpi, GF_PICTURE *gf_picture, // Initialize P frames for (frame_idx = 2; frame_idx < MAX_ARF_GOP_SIZE; ++frame_idx) { - const int frame_gop_offset = gf_group->frame_gop_index[frame_idx]; - struct lookahead_entry *buf = - vp9_lookahead_peek(cpi->lookahead, frame_gop_offset - 1); + struct lookahead_entry *buf; + frame_gop_offset = gf_group->frame_gop_index[frame_idx]; + buf = vp9_lookahead_peek(cpi->lookahead, frame_gop_offset - 1); if (buf == NULL) break; @@ -5476,11 +5477,12 @@ void init_gop_frames(VP9_COMP *cpi, GF_PICTURE *gf_picture, alt_index = -1; ++frame_idx; + ++frame_gop_offset; // Extend two frames outside the current gf group. for (; frame_idx < MAX_LAG_BUFFERS && extend_frame_count < 2; ++frame_idx) { struct lookahead_entry *buf = - vp9_lookahead_peek(cpi->lookahead, frame_idx - 2); + vp9_lookahead_peek(cpi->lookahead, frame_gop_offset - 1); if (buf == NULL) break; @@ -5493,6 +5495,7 @@ void init_gop_frames(VP9_COMP *cpi, GF_PICTURE *gf_picture, lst_index = frame_idx; ++*tpl_group_frames; ++extend_frame_count; + ++frame_gop_offset; } } diff --git a/vp9/encoder/vp9_ratectrl.c b/vp9/encoder/vp9_ratectrl.c index 81cf885..e0d7190 100644 --- a/vp9/encoder/vp9_ratectrl.c +++ b/vp9/encoder/vp9_ratectrl.c @@ -1486,7 +1486,7 @@ void vp9_estimate_qp_gop(VP9_COMP *cpi) { int idx; const int gf_index = cpi->twopass.gf_group.index; - for (idx = 1; idx < gop_length; ++idx) { + for (idx = 1; idx <= gop_length; ++idx) { TplDepFrame *tpl_frame = &cpi->tpl_stats[idx]; int target_rate = cpi->twopass.gf_group.bit_allocation[idx]; cpi->twopass.gf_group.index = idx; -- 2.7.4