Mercurial > libavcodec.hg
comparison mjpeg.c @ 5003:ddb28de352bb libavcodec
split jpeg_ls into jpeglsdec, jpeglsenc and jpegls
| author | aurel |
|---|---|
| date | Sun, 13 May 2007 23:16:56 +0000 |
| parents | 3fa689636240 |
| children | 5c3c39298e91 |
comparison
equal
deleted
inserted
replaced
| 5002:09cb686ffc0b | 5003:ddb28de352bb |
|---|---|
| 35 | 35 |
| 36 #include "avcodec.h" | 36 #include "avcodec.h" |
| 37 #include "dsputil.h" | 37 #include "dsputil.h" |
| 38 #include "mpegvideo.h" | 38 #include "mpegvideo.h" |
| 39 #include "bytestream.h" | 39 #include "bytestream.h" |
| 40 #include "mjpeg.h" | |
| 41 #include "jpeglsdec.h" | |
| 40 | 42 |
| 41 /* use two quantizer tables (one for luminance and one for chrominance) */ | 43 /* use two quantizer tables (one for luminance and one for chrominance) */ |
| 42 /* not yet working */ | 44 /* not yet working */ |
| 43 #undef TWOMATRIXES | 45 #undef TWOMATRIXES |
| 44 | 46 |
| 51 uint8_t huff_size_ac_luminance[256]; | 53 uint8_t huff_size_ac_luminance[256]; |
| 52 uint16_t huff_code_ac_luminance[256]; | 54 uint16_t huff_code_ac_luminance[256]; |
| 53 uint8_t huff_size_ac_chrominance[256]; | 55 uint8_t huff_size_ac_chrominance[256]; |
| 54 uint16_t huff_code_ac_chrominance[256]; | 56 uint16_t huff_code_ac_chrominance[256]; |
| 55 } MJpegContext; | 57 } MJpegContext; |
| 56 | |
| 57 /* JPEG marker codes */ | |
| 58 typedef enum { | |
| 59 /* start of frame */ | |
| 60 SOF0 = 0xc0, /* baseline */ | |
| 61 SOF1 = 0xc1, /* extended sequential, huffman */ | |
| 62 SOF2 = 0xc2, /* progressive, huffman */ | |
| 63 SOF3 = 0xc3, /* lossless, huffman */ | |
| 64 | |
| 65 SOF5 = 0xc5, /* differential sequential, huffman */ | |
| 66 SOF6 = 0xc6, /* differential progressive, huffman */ | |
| 67 SOF7 = 0xc7, /* differential lossless, huffman */ | |
| 68 JPG = 0xc8, /* reserved for JPEG extension */ | |
| 69 SOF9 = 0xc9, /* extended sequential, arithmetic */ | |
| 70 SOF10 = 0xca, /* progressive, arithmetic */ | |
| 71 SOF11 = 0xcb, /* lossless, arithmetic */ | |
| 72 | |
| 73 SOF13 = 0xcd, /* differential sequential, arithmetic */ | |
| 74 SOF14 = 0xce, /* differential progressive, arithmetic */ | |
| 75 SOF15 = 0xcf, /* differential lossless, arithmetic */ | |
| 76 | |
| 77 DHT = 0xc4, /* define huffman tables */ | |
| 78 | |
| 79 DAC = 0xcc, /* define arithmetic-coding conditioning */ | |
| 80 | |
| 81 /* restart with modulo 8 count "m" */ | |
| 82 RST0 = 0xd0, | |
| 83 RST1 = 0xd1, | |
| 84 RST2 = 0xd2, | |
| 85 RST3 = 0xd3, | |
| 86 RST4 = 0xd4, | |
| 87 RST5 = 0xd5, | |
| 88 RST6 = 0xd6, | |
| 89 RST7 = 0xd7, | |
| 90 | |
| 91 SOI = 0xd8, /* start of image */ | |
| 92 EOI = 0xd9, /* end of image */ | |
| 93 SOS = 0xda, /* start of scan */ | |
| 94 DQT = 0xdb, /* define quantization tables */ | |
| 95 DNL = 0xdc, /* define number of lines */ | |
| 96 DRI = 0xdd, /* define restart interval */ | |
| 97 DHP = 0xde, /* define hierarchical progression */ | |
| 98 EXP = 0xdf, /* expand reference components */ | |
| 99 | |
| 100 APP0 = 0xe0, | |
| 101 APP1 = 0xe1, | |
| 102 APP2 = 0xe2, | |
| 103 APP3 = 0xe3, | |
| 104 APP4 = 0xe4, | |
| 105 APP5 = 0xe5, | |
| 106 APP6 = 0xe6, | |
| 107 APP7 = 0xe7, | |
| 108 APP8 = 0xe8, | |
| 109 APP9 = 0xe9, | |
| 110 APP10 = 0xea, | |
| 111 APP11 = 0xeb, | |
| 112 APP12 = 0xec, | |
| 113 APP13 = 0xed, | |
| 114 APP14 = 0xee, | |
| 115 APP15 = 0xef, | |
| 116 | |
| 117 JPG0 = 0xf0, | |
| 118 JPG1 = 0xf1, | |
| 119 JPG2 = 0xf2, | |
| 120 JPG3 = 0xf3, | |
| 121 JPG4 = 0xf4, | |
| 122 JPG5 = 0xf5, | |
| 123 JPG6 = 0xf6, | |
| 124 SOF48 = 0xf7, ///< JPEG-LS | |
| 125 LSE = 0xf8, ///< JPEG-LS extension parameters | |
| 126 JPG9 = 0xf9, | |
| 127 JPG10 = 0xfa, | |
| 128 JPG11 = 0xfb, | |
| 129 JPG12 = 0xfc, | |
| 130 JPG13 = 0xfd, | |
| 131 | |
| 132 COM = 0xfe, /* comment */ | |
| 133 | |
| 134 TEM = 0x01, /* temporary private use for arithmetic coding */ | |
| 135 | |
| 136 /* 0x02 -> 0xbf reserved */ | |
| 137 } JPEG_MARKER; | |
| 138 | 58 |
| 139 #if 0 | 59 #if 0 |
| 140 /* These are the sample quantization tables given in JPEG spec section K.1. | 60 /* These are the sample quantization tables given in JPEG spec section K.1. |
| 141 * The spec says that the values given produce "good" quality, and | 61 * The spec says that the values given produce "good" quality, and |
| 142 * when divided by 2, "very good" quality. | 62 * when divided by 2, "very good" quality. |
| 299 default:\ | 219 default:\ |
| 300 case 7: ret= (left + top)>>1; break;\ | 220 case 7: ret= (left + top)>>1; break;\ |
| 301 } | 221 } |
| 302 | 222 |
| 303 #ifdef CONFIG_ENCODERS | 223 #ifdef CONFIG_ENCODERS |
| 304 static inline void put_marker(PutBitContext *p, int code) | |
| 305 { | |
| 306 put_bits(p, 8, 0xff); | |
| 307 put_bits(p, 8, code); | |
| 308 } | |
| 309 | |
| 310 /* table_class: 0 = DC coef, 1 = AC coefs */ | 224 /* table_class: 0 = DC coef, 1 = AC coefs */ |
| 311 static int put_huffman_table(MpegEncContext *s, int table_class, int table_id, | 225 static int put_huffman_table(MpegEncContext *s, int table_class, int table_id, |
| 312 const uint8_t *bits_table, const uint8_t *value_table) | 226 const uint8_t *bits_table, const uint8_t *value_table) |
| 313 { | 227 { |
| 314 PutBitContext *p = &s->pb; | 228 PutBitContext *p = &s->pb; |
| 831 | 745 |
| 832 #endif //CONFIG_ENCODERS | 746 #endif //CONFIG_ENCODERS |
| 833 | 747 |
| 834 /******************************************/ | 748 /******************************************/ |
| 835 /* decoding */ | 749 /* decoding */ |
| 836 | |
| 837 #define MAX_COMPONENTS 4 | |
| 838 | |
| 839 typedef struct MJpegDecodeContext { | |
| 840 AVCodecContext *avctx; | |
| 841 GetBitContext gb; | |
| 842 | |
| 843 int start_code; /* current start code */ | |
| 844 int buffer_size; | |
| 845 uint8_t *buffer; | |
| 846 | |
| 847 int16_t quant_matrixes[4][64]; | |
| 848 VLC vlcs[2][4]; | |
| 849 int qscale[4]; ///< quantizer scale calculated from quant_matrixes | |
| 850 | |
| 851 int org_height; /* size given at codec init */ | |
| 852 int first_picture; /* true if decoding first picture */ | |
| 853 int interlaced; /* true if interlaced */ | |
| 854 int bottom_field; /* true if bottom field */ | |
| 855 int lossless; | |
| 856 int ls; | |
| 857 int progressive; | |
| 858 int rgb; | |
| 859 int rct; /* standard rct */ | |
| 860 int pegasus_rct; /* pegasus reversible colorspace transform */ | |
| 861 int bits; /* bits per component */ | |
| 862 | |
| 863 int maxval; | |
| 864 int near; ///< near lossless bound (si 0 for lossless) | |
| 865 int t1,t2,t3; | |
| 866 int reset; ///< context halfing intervall ?rename | |
| 867 | |
| 868 int width, height; | |
| 869 int mb_width, mb_height; | |
| 870 int nb_components; | |
| 871 int component_id[MAX_COMPONENTS]; | |
| 872 int h_count[MAX_COMPONENTS]; /* horizontal and vertical count for each component */ | |
| 873 int v_count[MAX_COMPONENTS]; | |
| 874 int comp_index[MAX_COMPONENTS]; | |
| 875 int dc_index[MAX_COMPONENTS]; | |
| 876 int ac_index[MAX_COMPONENTS]; | |
| 877 int nb_blocks[MAX_COMPONENTS]; | |
| 878 int h_scount[MAX_COMPONENTS]; | |
| 879 int v_scount[MAX_COMPONENTS]; | |
| 880 int h_max, v_max; /* maximum h and v counts */ | |
| 881 int quant_index[4]; /* quant table index for each component */ | |
| 882 int last_dc[MAX_COMPONENTS]; /* last DEQUANTIZED dc (XXX: am I right to do that ?) */ | |
| 883 AVFrame picture; /* picture structure */ | |
| 884 int linesize[MAX_COMPONENTS]; ///< linesize << interlaced | |
| 885 int8_t *qscale_table; | |
| 886 DECLARE_ALIGNED_8(DCTELEM, block[64]); | |
| 887 ScanTable scantable; | |
| 888 DSPContext dsp; | |
| 889 | |
| 890 int restart_interval; | |
| 891 int restart_count; | |
| 892 | |
| 893 int buggy_avid; | |
| 894 int cs_itu601; | |
| 895 int interlace_polarity; | |
| 896 | |
| 897 int mjpb_skiptosod; | |
| 898 | |
| 899 int cur_scan; /* current scan, used by JPEG-LS */ | |
| 900 } MJpegDecodeContext; | |
| 901 | |
| 902 #include "jpeg_ls.c" //FIXME make jpeg-ls more independent | |
| 903 | 750 |
| 904 static int mjpeg_decode_dht(MJpegDecodeContext *s); | 751 static int mjpeg_decode_dht(MJpegDecodeContext *s); |
| 905 | 752 |
| 906 static int build_vlc(VLC *vlc, const uint8_t *bits_table, const uint8_t *val_table, | 753 static int build_vlc(VLC *vlc, const uint8_t *bits_table, const uint8_t *val_table, |
| 907 int nb_codes, int use_static, int is_ac) | 754 int nb_codes, int use_static, int is_ac) |
| 1662 if(s->lossless){ | 1509 if(s->lossless){ |
| 1663 if(s->ls){ | 1510 if(s->ls){ |
| 1664 // for(){ | 1511 // for(){ |
| 1665 // reset_ls_coding_parameters(s, 0); | 1512 // reset_ls_coding_parameters(s, 0); |
| 1666 | 1513 |
| 1667 ls_decode_picture(s, predictor, point_transform, ilv); | 1514 ff_jpegls_decode_picture(s, predictor, point_transform, ilv); |
| 1668 }else{ | 1515 }else{ |
| 1669 if(s->rgb){ | 1516 if(s->rgb){ |
| 1670 if(ljpeg_decode_rgb_scan(s, predictor, point_transform) < 0) | 1517 if(ljpeg_decode_rgb_scan(s, predictor, point_transform) < 0) |
| 1671 return -1; | 1518 return -1; |
| 1672 }else{ | 1519 }else{ |
| 2093 s->progressive=0; | 1940 s->progressive=0; |
| 2094 if (mjpeg_decode_sof(s) < 0) | 1941 if (mjpeg_decode_sof(s) < 0) |
| 2095 return -1; | 1942 return -1; |
| 2096 break; | 1943 break; |
| 2097 case LSE: | 1944 case LSE: |
| 2098 if (decode_lse(s) < 0) | 1945 if (ff_jpegls_decode_lse(s) < 0) |
| 2099 return -1; | 1946 return -1; |
| 2100 break; | 1947 break; |
| 2101 case EOI: | 1948 case EOI: |
| 2102 s->cur_scan = 0; | 1949 s->cur_scan = 0; |
| 2103 if ((s->buggy_avid && !s->interlaced) || s->restart_interval) | 1950 if ((s->buggy_avid && !s->interlaced) || s->restart_interval) |
