comparison mjpeg.c @ 2970:583b6ac45c07 libavcodec

unfinished jpeg-ls codec (feel free to finish it ...)
author michael
date Sun, 18 Dec 2005 13:17:44 +0000
parents ef2149182f1c
children b5e8b6821274
comparison
equal deleted inserted replaced
2969:c9f6a0946672 2970:583b6ac45c07
116 JPG2 = 0xf2, 116 JPG2 = 0xf2,
117 JPG3 = 0xf3, 117 JPG3 = 0xf3,
118 JPG4 = 0xf4, 118 JPG4 = 0xf4,
119 JPG5 = 0xf5, 119 JPG5 = 0xf5,
120 JPG6 = 0xf6, 120 JPG6 = 0xf6,
121 JPG7 = 0xf7, 121 SOF48 = 0xf7, ///< JPEG-LS
122 JPG8 = 0xf8, 122 LSE = 0xf8, ///< JPEG-LS extension parameters
123 JPG9 = 0xf9, 123 JPG9 = 0xf9,
124 JPG10 = 0xfa, 124 JPG10 = 0xfa,
125 JPG11 = 0xfb, 125 JPG11 = 0xfb,
126 JPG12 = 0xfc, 126 JPG12 = 0xfc,
127 JPG13 = 0xfd, 127 JPG13 = 0xfd,
415 } 415 }
416 } 416 }
417 417
418 void mjpeg_picture_header(MpegEncContext *s) 418 void mjpeg_picture_header(MpegEncContext *s)
419 { 419 {
420 const int lossless= s->avctx->codec_id == CODEC_ID_LJPEG; 420 const int lossless= s->avctx->codec_id != CODEC_ID_MJPEG;
421 const int ls = s->avctx->codec_id == CODEC_ID_JPEGLS;
422
423 assert(!(ls && s->mjpeg_write_tables));
421 424
422 put_marker(&s->pb, SOI); 425 put_marker(&s->pb, SOI);
423 426
424 if (!s->mjpeg_data_only_frames) 427 if (!s->mjpeg_data_only_frames)
425 { 428 {
426 jpeg_put_comments(s); 429 jpeg_put_comments(s);
427 430
428 if (s->mjpeg_write_tables) jpeg_table_header(s); 431 if (s->mjpeg_write_tables) jpeg_table_header(s);
429 432
430 put_marker(&s->pb, lossless ? SOF3 : SOF0); 433 switch(s->avctx->codec_id){
434 case CODEC_ID_MJPEG: put_marker(&s->pb, SOF0 ); break;
435 case CODEC_ID_LJPEG: put_marker(&s->pb, SOF3 ); break;
436 case CODEC_ID_JPEGLS: put_marker(&s->pb, SOF48); break;
437 default: assert(0);
438 }
431 439
432 put_bits(&s->pb, 16, 17); 440 put_bits(&s->pb, 16, 17);
433 if(lossless && s->avctx->pix_fmt == PIX_FMT_RGBA32) 441 if(lossless && s->avctx->pix_fmt == PIX_FMT_RGBA32)
434 put_bits(&s->pb, 8, 9); /* 9 bits/component RCT */ 442 put_bits(&s->pb, 8, 9); /* 9 bits/component RCT */
435 else 443 else
483 /* Cr component */ 491 /* Cr component */
484 put_bits(&s->pb, 8, 3); /* index */ 492 put_bits(&s->pb, 8, 3); /* index */
485 put_bits(&s->pb, 4, 1); /* DC huffman table index */ 493 put_bits(&s->pb, 4, 1); /* DC huffman table index */
486 put_bits(&s->pb, 4, lossless ? 0 : 1); /* AC huffman table index */ 494 put_bits(&s->pb, 4, lossless ? 0 : 1); /* AC huffman table index */
487 495
488 put_bits(&s->pb, 8, lossless ? s->avctx->prediction_method+1 : 0); /* Ss (not used) */ 496 put_bits(&s->pb, 8, (lossless && !ls) ? s->avctx->prediction_method+1 : 0); /* Ss (not used) */
489 put_bits(&s->pb, 8, lossless ? 0 : 63); /* Se (not used) */ 497
498 switch(s->avctx->codec_id){
499 case CODEC_ID_MJPEG: put_bits(&s->pb, 8, 63); break; /* Se (not used) */
500 case CODEC_ID_LJPEG: put_bits(&s->pb, 8, 0); break; /* not used */
501 case CODEC_ID_JPEGLS: put_bits(&s->pb, 8, 1); break; /* ILV = line interleaved */
502 default: assert(0);
503 }
504
490 put_bits(&s->pb, 8, 0); /* Ah/Al (not used) */ 505 put_bits(&s->pb, 8, 0); /* Ah/Al (not used) */
506
507 //FIXME DC/AC entropy table selectors stuff in jpegls
491 } 508 }
492 509
493 static void escape_FF(MpegEncContext *s, int start) 510 static void escape_FF(MpegEncContext *s, int start)
494 { 511 {
495 int size= put_bits_count(&s->pb) - start*8; 512 int size= put_bits_count(&s->pb) - start*8;
825 int org_height; /* size given at codec init */ 842 int org_height; /* size given at codec init */
826 int first_picture; /* true if decoding first picture */ 843 int first_picture; /* true if decoding first picture */
827 int interlaced; /* true if interlaced */ 844 int interlaced; /* true if interlaced */
828 int bottom_field; /* true if bottom field */ 845 int bottom_field; /* true if bottom field */
829 int lossless; 846 int lossless;
847 int ls;
830 int rgb; 848 int rgb;
831 int rct; /* standard rct */ 849 int rct; /* standard rct */
832 int pegasus_rct; /* pegasus reversible colorspace transform */ 850 int pegasus_rct; /* pegasus reversible colorspace transform */
833 int bits; /* bits per component */ 851 int bits; /* bits per component */
852
853 int maxval;
854 int near; ///< near lossless bound (si 0 for lossless)
855 int t1,t2,t3;
856 int reset; ///< context halfing intervall ?rename
834 857
835 int width, height; 858 int width, height;
836 int mb_width, mb_height; 859 int mb_width, mb_height;
837 int nb_components; 860 int nb_components;
838 int component_id[MAX_COMPONENTS]; 861 int component_id[MAX_COMPONENTS];
861 int cs_itu601; 884 int cs_itu601;
862 int interlace_polarity; 885 int interlace_polarity;
863 886
864 int mjpb_skiptosod; 887 int mjpb_skiptosod;
865 } MJpegDecodeContext; 888 } MJpegDecodeContext;
889
890 #include "jpeg_ls.c" //FIXME make jpeg-ls more independant
866 891
867 static int mjpeg_decode_dht(MJpegDecodeContext *s); 892 static int mjpeg_decode_dht(MJpegDecodeContext *s);
868 893
869 static int build_vlc(VLC *vlc, const uint8_t *bits_table, const uint8_t *val_table, 894 static int build_vlc(VLC *vlc, const uint8_t *bits_table, const uint8_t *val_table,
870 int nb_codes, int use_static) 895 int nb_codes, int use_static)
1519 break; 1544 break;
1520 } 1545 }
1521 #endif 1546 #endif
1522 } 1547 }
1523 1548
1524 predictor= get_bits(&s->gb, 8); /* lossless predictor or start of spectral (Ss) */ 1549 predictor= get_bits(&s->gb, 8); /* JPEG Ss / lossless JPEG predictor /JPEG-LS NEAR */
1525 skip_bits(&s->gb, 8); /* Se */ 1550 int ilv= get_bits(&s->gb, 8); /* JPEG Se / JPEG-LS ILV */
1526 skip_bits(&s->gb, 4); /* Ah */ 1551 skip_bits(&s->gb, 4); /* Ah */
1527 point_transform= get_bits(&s->gb, 4); /* Al */ 1552 point_transform= get_bits(&s->gb, 4); /* Al */
1528 1553
1529 for(i=0;i<nb_components;i++) 1554 for(i=0;i<nb_components;i++)
1530 s->last_dc[i] = 1024; 1555 s->last_dc[i] = 1024;
1542 s->h_scount[0] = 1; 1567 s->h_scount[0] = 1;
1543 s->v_scount[0] = 1; 1568 s->v_scount[0] = 1;
1544 } 1569 }
1545 1570
1546 if(s->avctx->debug & FF_DEBUG_PICT_INFO) 1571 if(s->avctx->debug & FF_DEBUG_PICT_INFO)
1547 av_log(s->avctx, AV_LOG_DEBUG, "%s %s p:%d >>:%d\n", s->lossless ? "lossless" : "sequencial DCT", s->rgb ? "RGB" : "", predictor, point_transform); 1572 av_log(s->avctx, AV_LOG_DEBUG, "%s %s p:%d >>:%d ilv:%d bits:%d %s\n", s->lossless ? "lossless" : "sequencial DCT", s->rgb ? "RGB" : "",
1573 predictor, point_transform, ilv, s->bits,
1574 s->pegasus_rct ? "PRCT" : (s->rct ? "RCT" : ""));
1575
1548 1576
1549 /* mjpeg-b can have padding bytes between sos and image data, skip them */ 1577 /* mjpeg-b can have padding bytes between sos and image data, skip them */
1550 for (i = s->mjpb_skiptosod; i > 0; i--) 1578 for (i = s->mjpb_skiptosod; i > 0; i--)
1551 skip_bits(&s->gb, 8); 1579 skip_bits(&s->gb, 8);
1552 1580
1553 if(s->lossless){ 1581 if(s->lossless){
1582 if(s->ls){
1583 // for(){
1584 }else{
1554 if(s->rgb){ 1585 if(s->rgb){
1555 if(ljpeg_decode_rgb_scan(s, predictor, point_transform) < 0) 1586 if(ljpeg_decode_rgb_scan(s, predictor, point_transform) < 0)
1556 return -1; 1587 return -1;
1557 }else{ 1588 }else{
1558 if(ljpeg_decode_yuv_scan(s, predictor, point_transform) < 0) 1589 if(ljpeg_decode_yuv_scan(s, predictor, point_transform) < 0)
1559 return -1; 1590 return -1;
1560 } 1591 }
1592 }
1561 }else{ 1593 }else{
1562 if(mjpeg_decode_scan(s) < 0) 1594 if(mjpeg_decode_scan(s) < 0)
1563 return -1; 1595 return -1;
1564 } 1596 }
1565 emms_c(); 1597 emms_c();
1892 } 1924 }
1893 1925
1894 switch(start_code) { 1926 switch(start_code) {
1895 case SOI: 1927 case SOI:
1896 s->restart_interval = 0; 1928 s->restart_interval = 0;
1929 reset_ls_coding_parameters(s, 1);
1930
1897 s->restart_count = 0; 1931 s->restart_count = 0;
1898 /* nothing to do on SOI */ 1932 /* nothing to do on SOI */
1899 break; 1933 break;
1900 case DQT: 1934 case DQT:
1901 mjpeg_decode_dqt(s); 1935 mjpeg_decode_dqt(s);
1913 break; 1947 break;
1914 case SOF3: 1948 case SOF3:
1915 s->lossless=1; 1949 s->lossless=1;
1916 if (mjpeg_decode_sof(s) < 0) 1950 if (mjpeg_decode_sof(s) < 0)
1917 return -1; 1951 return -1;
1952 break;
1953 case SOF48:
1954 s->lossless=1;
1955 s->ls=1;
1956 if (mjpeg_decode_sof(s) < 0)
1957 return -1;
1958 break;
1959 case LSE:
1960 if (decode_lse(s) < 0)
1961 return -1;
1918 break; 1962 break;
1919 case EOI: 1963 case EOI:
1920 if ((s->buggy_avid && !s->interlaced) || s->restart_interval) 1964 if ((s->buggy_avid && !s->interlaced) || s->restart_interval)
1921 break; 1965 break;
1922 eoi_parser: 1966 eoi_parser: