]> granicus.if.org Git - libvpx/commitdiff
Properly set the is_valid flag in tpl_frame
authorJingning Han <jingning@google.com>
Tue, 10 Jul 2018 21:25:03 +0000 (14:25 -0700)
committerJingning Han <jingning@google.com>
Wed, 11 Jul 2018 02:58:43 +0000 (19:58 -0700)
Use this flag to indicate the temporal dependency model for the
given frame is properly set up.

Use the pointer address to decide if the tpl_stats_ptr array needs
to be released.

Change-Id: I541fe098f51981010011ae0af2535d8a5762d254

vp9/encoder/vp9_encodeframe.c
vp9/encoder/vp9_encoder.c

index d69940939161c07e4550a1ab11c9c9c09da4ccd9..70c17ad9c73c09df514e8846daa4f9ed56149f12 100644 (file)
@@ -3629,6 +3629,8 @@ int get_rdmult_delta(VP9_COMP *cpi, BLOCK_SIZE bsize, int mi_row, int mi_col,
   int count = 0;
   double r0, rk, beta;
 
+  if (tpl_frame->is_valid == 0) return orig_rdmult;
+
   r0 = cpi->rd.r0;
 
   for (row = mi_row; row < mi_row + mi_high; ++row) {
@@ -5455,7 +5457,9 @@ static void encode_frame_internal(VP9_COMP *cpi) {
       }
     }
 
-    cpi->rd.r0 = (double)intra_cost_base / (intra_cost_base + mc_dep_cost_base);
+    if (tpl_frame->is_valid)
+      cpi->rd.r0 =
+          (double)intra_cost_base / (intra_cost_base + mc_dep_cost_base);
   }
 
   {
index fc6c016bae166f80f480b2616690057cb1949f00..8afd876944cf1e4cda1ce8f9b7aa6ee451334b40 100644 (file)
@@ -2350,7 +2350,7 @@ VP9_COMP *vp9_create_compressor(VP9EncoderConfig *oxcf,
       CHECK_MEM_ERROR(cm, cpi->tpl_stats[frame].tpl_stats_ptr,
                       vpx_calloc(mi_rows * mi_cols,
                                  sizeof(*cpi->tpl_stats[frame].tpl_stats_ptr)));
-      cpi->tpl_stats[frame].is_valid = 1;
+      cpi->tpl_stats[frame].is_valid = 0;
       cpi->tpl_stats[frame].width = mi_cols;
       cpi->tpl_stats[frame].height = mi_rows;
       cpi->tpl_stats[frame].stride = mi_cols;
@@ -2543,8 +2543,7 @@ void vp9_remove_compressor(VP9_COMP *cpi) {
 #endif
 
   for (frame = 0; frame < MAX_LAG_BUFFERS; ++frame) {
-    if (cpi->tpl_stats[frame].is_valid)
-      vpx_free(cpi->tpl_stats[frame].tpl_stats_ptr);
+    vpx_free(cpi->tpl_stats[frame].tpl_stats_ptr);
     cpi->tpl_stats[frame].is_valid = 0;
   }
 
@@ -5567,6 +5566,7 @@ void init_tpl_stats(VP9_COMP *cpi) {
     memset(tpl_frame->tpl_stats_ptr, 0,
            tpl_frame->height * tpl_frame->width *
                sizeof(*tpl_frame->tpl_stats_ptr));
+    tpl_frame->is_valid = 0;
   }
 }