From: Jingning Han Date: Mon, 13 Aug 2018 23:52:11 +0000 (-0700) Subject: Fix potential encoder failure case in tpl model X-Git-Tag: v1.8.0~426^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=058046c8808f6ea462bd57898276c9ac343aa46a;p=libvpx Fix potential encoder failure case in tpl model When the group of picture runs over 24 in length, skip the use of temporal dependency model, since the model assumes maximum 25 lookahead frames. Change-Id: I6386dd33bcdaf1229fae978130b4c3b43d071918 --- diff --git a/vp9/encoder/vp9_encodeframe.c b/vp9/encoder/vp9_encodeframe.c index cb5cb1901..8aa8660d8 100644 --- a/vp9/encoder/vp9_encodeframe.c +++ b/vp9/encoder/vp9_encodeframe.c @@ -3640,6 +3640,8 @@ int get_rdmult_delta(VP9_COMP *cpi, BLOCK_SIZE bsize, int mi_row, int mi_col, if (cpi->common.show_frame) return orig_rdmult; + if (cpi->twopass.gf_group.index >= MAX_LAG_BUFFERS) return orig_rdmult; + for (row = mi_row; row < mi_row + mi_high; ++row) { for (col = mi_col; col < mi_col + mi_wide; ++col) { TplDepStats *this_stats = &tpl_stats[row * tpl_stride + col]; @@ -5450,6 +5452,7 @@ static void encode_frame_internal(VP9_COMP *cpi) { MACROBLOCK *const x = &td->mb; VP9_COMMON *const cm = &cpi->common; MACROBLOCKD *const xd = &x->e_mbd; + const int gf_group_index = cpi->twopass.gf_group.index; xd->mi = cm->mi_grid_visible; xd->mi[0] = cm->mi; @@ -5516,7 +5519,8 @@ static void encode_frame_internal(VP9_COMP *cpi) { if (sf->partition_search_type == SOURCE_VAR_BASED_PARTITION) source_var_based_partition_search_method(cpi); - } else if (cpi->twopass.gf_group.index && cpi->sf.enable_tpl_model) { + } else if (gf_group_index && gf_group_index < MAX_LAG_BUFFERS && + cpi->sf.enable_tpl_model) { TplDepFrame *tpl_frame = &cpi->tpl_stats[cpi->twopass.gf_group.index]; TplDepStats *tpl_stats = tpl_frame->tpl_stats_ptr;