diff --git a/libavcodec/mdec.c b/libavcodec/mdec.c index ea6fe92e9b..2ad70c2702 100644 --- a/libavcodec/mdec.c +++ b/libavcodec/mdec.c @@ -65,7 +65,7 @@ static inline int mdec_decode_block_intra(MDECContext *a, DCTELEM *block, int n) /* DC coef */ if(a->version==2){ - block[0]= get_sbits(&a->gb, 10); + block[0]= 2*get_sbits(&a->gb, 10) + 1024; }else{ component = (n <= 3 ? 0 : n - 4 + 1); diff = decode_dc(&a->gb, component); @@ -89,7 +89,7 @@ static inline int mdec_decode_block_intra(MDECContext *a, DCTELEM *block, int n) i += run; j = scantable[i]; level= (level*qscale*quant_matrix[j])>>3; - level= (level-1)|1; +// level= (level-1)|1; level = (level ^ SHOW_SBITS(re, &a->gb, 1)) - SHOW_SBITS(re, &a->gb, 1); LAST_SKIP_BITS(re, &a->gb, 1); } else { @@ -99,15 +99,15 @@ static inline int mdec_decode_block_intra(MDECContext *a, DCTELEM *block, int n) level = SHOW_SBITS(re, &a->gb, 10); SKIP_BITS(re, &a->gb, 10); i += run; j = scantable[i]; -/* if(level<0){ + if(level<0){ level= -level; - level= (level*qscale*quant_matrix[j])>>4; + level= (level*qscale*quant_matrix[j])>>3; level= (level-1)|1; level= -level; - }else{*/ - level= (level*qscale*quant_matrix[j])>>4; -/* level= (level-1)|1; - }*/ + }else{ + level= (level*qscale*quant_matrix[j])>>3; + level= (level-1)|1; + } } if (i > 63){ fprintf(stderr, "ac-tex damaged at %d %d\n", a->mb_x, a->mb_y); @@ -124,11 +124,12 @@ static inline int mdec_decode_block_intra(MDECContext *a, DCTELEM *block, int n) static inline int decode_mb(MDECContext *a, DCTELEM block[6][64]){ int i; + const int block_index[6]= {5,6,0,1,2,3}; a->dsp.clear_blocks(block[0]); - for(i=5; i>=0; i--){ - if( mdec_decode_block_intra(a, block[i], i) < 0) + for(i=0; i<6; i++){ + if( mdec_decode_block_intra(a, block[ block_index[i] ], block_index[i]) < 0) return -1; } return 0;