Mercurial > libavcodec.hg
comparison mdec.c @ 1436:b57e910e4235 libavcodec
some fixes (still buggy though)
author | michaelni |
---|---|
date | Mon, 01 Sep 2003 16:40:25 +0000 |
parents | 62c797a19bdf |
children | ba444d478ffe |
comparison
equal
deleted
inserted
replaced
1435:62c797a19bdf | 1436:b57e910e4235 |
---|---|
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, 11); | 68 block[0]= get_sbits(&a->gb, 10); |
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; |
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, 8); SKIP_BITS(re, &a->gb, 8); | 99 level = SHOW_SBITS(re, &a->gb, 10); SKIP_BITS(re, &a->gb, 10); |
100 if (level == -128) { | |
101 level = SHOW_UBITS(re, &a->gb, 8) - 256; LAST_SKIP_BITS(re, &a->gb, 8); | |
102 } else if (level == 0) { | |
103 level = SHOW_UBITS(re, &a->gb, 8) ; LAST_SKIP_BITS(re, &a->gb, 8); | |
104 } | |
105 i += run; | 100 i += run; |
106 j = scantable[i]; | 101 j = scantable[i]; |
107 /* if(level<0){ | 102 /* if(level<0){ |
108 level= -level; | 103 level= -level; |
109 level= (level*qscale*quant_matrix[j])>>4; | 104 level= (level*qscale*quant_matrix[j])>>4; |
191 a->bitstream_buffer= av_fast_realloc(a->bitstream_buffer, &a->bitstream_buffer_size, buf_size + FF_INPUT_BUFFER_PADDING_SIZE); | 186 a->bitstream_buffer= av_fast_realloc(a->bitstream_buffer, &a->bitstream_buffer_size, buf_size + FF_INPUT_BUFFER_PADDING_SIZE); |
192 for(i=0; i<buf_size; i+=2){ | 187 for(i=0; i<buf_size; i+=2){ |
193 a->bitstream_buffer[i] = buf[i+1]; | 188 a->bitstream_buffer[i] = buf[i+1]; |
194 a->bitstream_buffer[i+1]= buf[i ]; | 189 a->bitstream_buffer[i+1]= buf[i ]; |
195 } | 190 } |
196 // a->dsp.bswap_buf((uint32_t*)a->bitstream_buffer, (uint32_t*)buf, buf_size/4); | |
197 init_get_bits(&a->gb, a->bitstream_buffer, buf_size*8); | 191 init_get_bits(&a->gb, a->bitstream_buffer, buf_size*8); |
198 | 192 |
199 /* skip over 4 preamble bytes in stream (typically 0xXX 0xXX 0x00 0x38) */ | 193 /* skip over 4 preamble bytes in stream (typically 0xXX 0xXX 0x00 0x38) */ |
200 skip_bits(&a->gb, 32); | 194 skip_bits(&a->gb, 32); |
201 | 195 |
202 a->qscale= get_bits(&a->gb, 16); | 196 a->qscale= get_bits(&a->gb, 16); |
203 a->version= get_bits(&a->gb, 16); | 197 a->version= get_bits(&a->gb, 16); |
204 skip_bits(&a->gb, 8*8); | |
205 | 198 |
206 printf("qscale:%d (0x%X), version:%d (0x%X)\n", a->qscale, a->qscale, a->version, a->version); | 199 printf("qscale:%d (0x%X), version:%d (0x%X)\n", a->qscale, a->qscale, a->version, a->version); |
207 | 200 |
208 for(a->mb_y=0; a->mb_y<a->mb_height; a->mb_y++){ | 201 for(a->mb_x=0; a->mb_x<a->mb_width; a->mb_x++){ |
209 for(a->mb_x=0; a->mb_x<a->mb_width; a->mb_x++){ | 202 for(a->mb_y=0; a->mb_y<a->mb_height; a->mb_y++){ |
210 if( decode_mb(a, a->block) <0) | 203 if( decode_mb(a, a->block) <0) |
211 return -1; | 204 return -1; |
212 | 205 |
213 idct_put(a, a->mb_x, a->mb_y); | 206 idct_put(a, a->mb_x, a->mb_y); |
214 } | 207 } |
215 } | 208 } |
216 | |
217 #if 0 | |
218 int i; | |
219 printf("%d %d\n", 8*buf_size, get_bits_count(&a->gb)); | |
220 for(i=get_bits_count(&a->gb); i<8*buf_size; i++){ | |
221 printf("%d", get_bits1(&a->gb)); | |
222 } | |
223 | |
224 for(i=0; i<s->avctx->extradata_size; i++){ | |
225 printf("%c\n", ((uint8_t*)s->avctx->extradata)[i]); | |
226 } | |
227 #endif | |
228 | 209 |
229 // p->quality= (32 + a->inv_qscale/2)/a->inv_qscale; | 210 // p->quality= (32 + a->inv_qscale/2)/a->inv_qscale; |
230 // memset(p->qscale_table, p->quality, p->qstride*a->mb_height); | 211 // memset(p->qscale_table, p->quality, p->qstride*a->mb_height); |
231 | 212 |
232 *picture= *(AVFrame*)&a->picture; | 213 *picture= *(AVFrame*)&a->picture; |