Mercurial > libavcodec.hg
comparison mdec.c @ 1437:ba444d478ffe libavcodec
more fixes
author | michaelni |
---|---|
date | Mon, 01 Sep 2003 17:05:28 +0000 |
parents | b57e910e4235 |
children | 6339c2b322e6 |
comparison
equal
deleted
inserted
replaced
1436:b57e910e4235 | 1437:ba444d478ffe |
---|---|
63 const uint16_t *quant_matrix= ff_mpeg1_default_intra_matrix; | 63 const uint16_t *quant_matrix= ff_mpeg1_default_intra_matrix; |
64 const int qscale= a->qscale; | 64 const int qscale= a->qscale; |
65 | 65 |
66 /* DC coef */ | 66 /* DC coef */ |
67 if(a->version==2){ | 67 if(a->version==2){ |
68 block[0]= get_sbits(&a->gb, 10); | 68 block[0]= 2*get_sbits(&a->gb, 10) + 1024; |
69 }else{ | 69 }else{ |
70 component = (n <= 3 ? 0 : n - 4 + 1); | 70 component = (n <= 3 ? 0 : n - 4 + 1); |
71 diff = decode_dc(&a->gb, component); | 71 diff = decode_dc(&a->gb, component); |
72 if (diff >= 0xffff) | 72 if (diff >= 0xffff) |
73 return -1; | 73 return -1; |
87 break; | 87 break; |
88 } else if(level != 0) { | 88 } else if(level != 0) { |
89 i += run; | 89 i += run; |
90 j = scantable[i]; | 90 j = scantable[i]; |
91 level= (level*qscale*quant_matrix[j])>>3; | 91 level= (level*qscale*quant_matrix[j])>>3; |
92 level= (level-1)|1; | 92 // level= (level-1)|1; |
93 level = (level ^ SHOW_SBITS(re, &a->gb, 1)) - SHOW_SBITS(re, &a->gb, 1); | 93 level = (level ^ SHOW_SBITS(re, &a->gb, 1)) - SHOW_SBITS(re, &a->gb, 1); |
94 LAST_SKIP_BITS(re, &a->gb, 1); | 94 LAST_SKIP_BITS(re, &a->gb, 1); |
95 } else { | 95 } else { |
96 /* escape */ | 96 /* escape */ |
97 run = SHOW_UBITS(re, &a->gb, 6)+1; LAST_SKIP_BITS(re, &a->gb, 6); | 97 run = SHOW_UBITS(re, &a->gb, 6)+1; LAST_SKIP_BITS(re, &a->gb, 6); |
98 UPDATE_CACHE(re, &a->gb); | 98 UPDATE_CACHE(re, &a->gb); |
99 level = SHOW_SBITS(re, &a->gb, 10); SKIP_BITS(re, &a->gb, 10); | 99 level = SHOW_SBITS(re, &a->gb, 10); SKIP_BITS(re, &a->gb, 10); |
100 i += run; | 100 i += run; |
101 j = scantable[i]; | 101 j = scantable[i]; |
102 /* if(level<0){ | 102 if(level<0){ |
103 level= -level; | 103 level= -level; |
104 level= (level*qscale*quant_matrix[j])>>4; | 104 level= (level*qscale*quant_matrix[j])>>3; |
105 level= (level-1)|1; | 105 level= (level-1)|1; |
106 level= -level; | 106 level= -level; |
107 }else{*/ | 107 }else{ |
108 level= (level*qscale*quant_matrix[j])>>4; | 108 level= (level*qscale*quant_matrix[j])>>3; |
109 /* level= (level-1)|1; | 109 level= (level-1)|1; |
110 }*/ | 110 } |
111 } | 111 } |
112 if (i > 63){ | 112 if (i > 63){ |
113 fprintf(stderr, "ac-tex damaged at %d %d\n", a->mb_x, a->mb_y); | 113 fprintf(stderr, "ac-tex damaged at %d %d\n", a->mb_x, a->mb_y); |
114 return -1; | 114 return -1; |
115 } | 115 } |
122 return 0; | 122 return 0; |
123 } | 123 } |
124 | 124 |
125 static inline int decode_mb(MDECContext *a, DCTELEM block[6][64]){ | 125 static inline int decode_mb(MDECContext *a, DCTELEM block[6][64]){ |
126 int i; | 126 int i; |
127 const int block_index[6]= {5,6,0,1,2,3}; | |
127 | 128 |
128 a->dsp.clear_blocks(block[0]); | 129 a->dsp.clear_blocks(block[0]); |
129 | 130 |
130 for(i=5; i>=0; i--){ | 131 for(i=0; i<6; i++){ |
131 if( mdec_decode_block_intra(a, block[i], i) < 0) | 132 if( mdec_decode_block_intra(a, block[ block_index[i] ], block_index[i]) < 0) |
132 return -1; | 133 return -1; |
133 } | 134 } |
134 return 0; | 135 return 0; |
135 } | 136 } |
136 | 137 |