Fix segmentation fault when num tile cols change in row-mt.
authorRitu Baldwa <ritu.baldwa@ittiam.com>
Fri, 1 Feb 2019 08:07:07 +0000 (13:37 +0530)
committerHarish Mahendrakar <harish.mahendrakar@ittiam.com>
Fri, 1 Feb 2019 22:34:11 +0000 (22:34 +0000)
Change-Id: Ifc165d76a71fcdb7c19c158c940a8d273be0d95f

vp9/decoder/vp9_decodeframe.c

index c3bca34..41072d5 100644 (file)
@@ -2768,6 +2768,7 @@ static size_t read_uncompressed_header(VP9Decoder *pbi,
     int num_sbs = 1;
     const int aligned_rows = mi_cols_aligned_to_sb(cm->mi_rows);
     const int sb_rows = aligned_rows >> MI_BLOCK_SIZE_LOG2;
+    const int num_jobs = sb_rows << cm->log2_tile_cols;
 
     if (pbi->row_mt_worker_data == NULL) {
       CHECK_MEM_ERROR(cm, pbi->row_mt_worker_data,
@@ -2784,10 +2785,11 @@ static size_t read_uncompressed_header(VP9Decoder *pbi,
       num_sbs = sb_cols * sb_rows;
     }
 
-    if (num_sbs > pbi->row_mt_worker_data->num_sbs) {
+    if (num_sbs > pbi->row_mt_worker_data->num_sbs ||
+        num_jobs > pbi->row_mt_worker_data->num_jobs) {
       vp9_dec_free_row_mt_mem(pbi->row_mt_worker_data);
       vp9_dec_alloc_row_mt_mem(pbi->row_mt_worker_data, cm, num_sbs,
-                               pbi->max_threads, sb_rows << cm->log2_tile_cols);
+                               pbi->max_threads, num_jobs);
     }
     vp9_jobq_alloc(pbi);
   }