|
|
|
@ -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; |
|
|
|
|