Mercurial > libavcodec.hg
comparison mjpeg.c @ 37:eb898f29e49f libavcodec
fixed mjpeg matrix quant encoding and decoding
author | glantau |
---|---|
date | Tue, 07 Aug 2001 22:46:19 +0000 |
parents | e04aea3bbf51 |
children | 92d51f683931 |
comparison
equal
deleted
inserted
replaced
36:23723a0ebd24 | 37:eb898f29e49f |
---|---|
218 } | 218 } |
219 | 219 |
220 static void jpeg_table_header(MpegEncContext *s) | 220 static void jpeg_table_header(MpegEncContext *s) |
221 { | 221 { |
222 PutBitContext *p = &s->pb; | 222 PutBitContext *p = &s->pb; |
223 int i, size; | 223 int i, j, size; |
224 UINT8 *ptr; | 224 UINT8 *ptr; |
225 | 225 |
226 /* quant matrixes */ | 226 /* quant matrixes */ |
227 put_marker(p, DQT); | 227 put_marker(p, DQT); |
228 put_bits(p, 16, 2 + 1 * (1 + 64)); | 228 put_bits(p, 16, 2 + 1 * (1 + 64)); |
229 put_bits(p, 4, 0); /* 8 bit precision */ | 229 put_bits(p, 4, 0); /* 8 bit precision */ |
230 put_bits(p, 4, 0); /* table 0 */ | 230 put_bits(p, 4, 0); /* table 0 */ |
231 for(i=0;i<64;i++) { | 231 for(i=0;i<64;i++) { |
232 put_bits(p, 8, s->intra_matrix[i]); | 232 j = zigzag_direct[i]; |
233 put_bits(p, 8, s->intra_matrix[j]); | |
233 } | 234 } |
234 #if 0 | 235 #if 0 |
235 put_bits(p, 4, 0); /* 8 bit precision */ | 236 put_bits(p, 4, 0); /* 8 bit precision */ |
236 put_bits(p, 4, 1); /* table 1 */ | 237 put_bits(p, 4, 1); /* table 1 */ |
237 for(i=0;i<64;i++) { | 238 for(i=0;i<64;i++) { |
238 put_bits(p, 8, s->chroma_intra_matrix[i]); | 239 j = zigzag_direct[i]; |
240 put_bits(p, 8, s->chroma_intra_matrix[j]); | |
239 } | 241 } |
240 #endif | 242 #endif |
241 | 243 |
242 /* huffman table */ | 244 /* huffman table */ |
243 put_marker(p, DHT); | 245 put_marker(p, DHT); |
487 | 489 |
488 /* quantize tables */ | 490 /* quantize tables */ |
489 static int mjpeg_decode_dqt(MJpegDecodeContext *s, | 491 static int mjpeg_decode_dqt(MJpegDecodeContext *s, |
490 UINT8 *buf, int buf_size) | 492 UINT8 *buf, int buf_size) |
491 { | 493 { |
492 int len, index, i; | 494 int len, index, i, j; |
493 init_get_bits(&s->gb, buf, buf_size); | 495 init_get_bits(&s->gb, buf, buf_size); |
494 | 496 |
495 len = get_bits(&s->gb, 16); | 497 len = get_bits(&s->gb, 16); |
496 len -= 2; | 498 len -= 2; |
497 | 499 |
502 index = get_bits(&s->gb, 4); | 504 index = get_bits(&s->gb, 4); |
503 if (index >= 4) | 505 if (index >= 4) |
504 return -1; | 506 return -1; |
505 dprintf("index=%d\n", index); | 507 dprintf("index=%d\n", index); |
506 /* read quant table */ | 508 /* read quant table */ |
507 for(i=0;i<64;i++) | 509 for(i=0;i<64;i++) { |
508 s->quant_matrixes[index][i] = get_bits(&s->gb, 8); | 510 j = zigzag_direct[i]; |
511 s->quant_matrixes[index][j] = get_bits(&s->gb, 8); | |
512 } | |
509 len -= 65; | 513 len -= 65; |
510 } | 514 } |
511 return 0; | 515 return 0; |
512 } | 516 } |
513 | 517 |