changeset 5685:070a376d496b libavcodec

fix image corruption when with multi-threaded decoding. dequant-tables were not correctly reinitialized in the slave contexts when a PPS came with updated matrices. Patch by Andreas ªÓman %andreas A olebyn P nu% Original thread: date: Sep 16, 2007 6:14 AM subject: [FFmpeg-devel] Parallelized h264 image corruption bug
author gpoirier
date Sun, 16 Sep 2007 10:37:07 +0000
parents 1eb243819e08
children 9ad4e94cc5b8
files h264.c
diffstat 1 files changed, 4 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/h264.c	Sat Sep 15 11:06:27 2007 +0000
+++ b/h264.c	Sun Sep 16 10:37:07 2007 +0000
@@ -2164,11 +2164,8 @@
     dst->mvd_table[1]             = src->mvd_table[1];
     dst->direct_table             = src->direct_table;
 
-    if(!dst->dequant4_coeff[0])
-        init_dequant_tables(dst);
     dst->s.obmc_scratchpad = NULL;
     ff_h264_pred_init(&dst->hpc, src->s.codec_id);
-    dst->dequant_coeff_pps= -1;
 }
 
 /**
@@ -3522,6 +3519,9 @@
     memcpy(dst->long_ref,         src->long_ref,         sizeof(dst->long_ref));
     memcpy(dst->default_ref_list, src->default_ref_list, sizeof(dst->default_ref_list));
     memcpy(dst->ref_list,         src->ref_list,         sizeof(dst->ref_list));
+
+    memcpy(dst->dequant4_coeff,   src->dequant4_coeff,   sizeof(src->dequant4_coeff));
+    memcpy(dst->dequant8_coeff,   src->dequant8_coeff,   sizeof(src->dequant8_coeff));
 }
 
 /**
@@ -3589,7 +3589,7 @@
     }
     h->sps = *h0->sps_buffers[h->pps.sps_id];
 
-    if(h->dequant_coeff_pps != pps_id){
+    if(h == h0 && h->dequant_coeff_pps != pps_id){
         h->dequant_coeff_pps = pps_id;
         init_dequant_tables(h);
     }