]> granicus.if.org Git - libvpx/commitdiff
Fix potential encoder failure case in tpl model
authorJingning Han <jingning@google.com>
Mon, 13 Aug 2018 23:52:11 +0000 (16:52 -0700)
committerJingning Han <jingning@google.com>
Mon, 13 Aug 2018 23:54:23 +0000 (16:54 -0700)
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

vp9/encoder/vp9_encodeframe.c

index cb5cb19017241ff79dffe2b9686206143f1673ed..8aa8660d8b3be13959b0b9ae053d79df32a8339a 100644 (file)
@@ -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;