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