|
|
|
@ -35,8 +35,6 @@ |
|
|
|
|
|
|
|
|
|
#include "avcodec.h" |
|
|
|
|
#include "bitstream.h" |
|
|
|
|
#include "dsputil.h" |
|
|
|
|
#include "mpegvideo.h" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* JPEG marker codes */ |
|
|
|
@ -127,71 +125,6 @@ static inline void put_marker(PutBitContext *p, int code) |
|
|
|
|
put_bits(p, 8, code); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#define MAX_COMPONENTS 4 |
|
|
|
|
|
|
|
|
|
typedef struct MJpegDecodeContext { |
|
|
|
|
AVCodecContext *avctx; |
|
|
|
|
GetBitContext gb; |
|
|
|
|
|
|
|
|
|
int start_code; /* current start code */ |
|
|
|
|
int buffer_size; |
|
|
|
|
uint8_t *buffer; |
|
|
|
|
|
|
|
|
|
int16_t quant_matrixes[4][64]; |
|
|
|
|
VLC vlcs[2][4]; |
|
|
|
|
int qscale[4]; ///< quantizer scale calculated from quant_matrixes
|
|
|
|
|
|
|
|
|
|
int org_height; /* size given at codec init */ |
|
|
|
|
int first_picture; /* true if decoding first picture */ |
|
|
|
|
int interlaced; /* true if interlaced */ |
|
|
|
|
int bottom_field; /* true if bottom field */ |
|
|
|
|
int lossless; |
|
|
|
|
int ls; |
|
|
|
|
int progressive; |
|
|
|
|
int rgb; |
|
|
|
|
int rct; /* standard rct */ |
|
|
|
|
int pegasus_rct; /* pegasus reversible colorspace transform */ |
|
|
|
|
int bits; /* bits per component */ |
|
|
|
|
|
|
|
|
|
int maxval; |
|
|
|
|
int near; ///< near lossless bound (si 0 for lossless)
|
|
|
|
|
int t1,t2,t3; |
|
|
|
|
int reset; ///< context halfing intervall ?rename
|
|
|
|
|
|
|
|
|
|
int width, height; |
|
|
|
|
int mb_width, mb_height; |
|
|
|
|
int nb_components; |
|
|
|
|
int component_id[MAX_COMPONENTS]; |
|
|
|
|
int h_count[MAX_COMPONENTS]; /* horizontal and vertical count for each component */ |
|
|
|
|
int v_count[MAX_COMPONENTS]; |
|
|
|
|
int comp_index[MAX_COMPONENTS]; |
|
|
|
|
int dc_index[MAX_COMPONENTS]; |
|
|
|
|
int ac_index[MAX_COMPONENTS]; |
|
|
|
|
int nb_blocks[MAX_COMPONENTS]; |
|
|
|
|
int h_scount[MAX_COMPONENTS]; |
|
|
|
|
int v_scount[MAX_COMPONENTS]; |
|
|
|
|
int h_max, v_max; /* maximum h and v counts */ |
|
|
|
|
int quant_index[4]; /* quant table index for each component */ |
|
|
|
|
int last_dc[MAX_COMPONENTS]; /* last DEQUANTIZED dc (XXX: am I right to do that ?) */ |
|
|
|
|
AVFrame picture; /* picture structure */ |
|
|
|
|
int linesize[MAX_COMPONENTS]; ///< linesize << interlaced
|
|
|
|
|
int8_t *qscale_table; |
|
|
|
|
DECLARE_ALIGNED_8(DCTELEM, block[64]); |
|
|
|
|
ScanTable scantable; |
|
|
|
|
DSPContext dsp; |
|
|
|
|
|
|
|
|
|
int restart_interval; |
|
|
|
|
int restart_count; |
|
|
|
|
|
|
|
|
|
int buggy_avid; |
|
|
|
|
int cs_itu601; |
|
|
|
|
int interlace_polarity; |
|
|
|
|
|
|
|
|
|
int mjpb_skiptosod; |
|
|
|
|
|
|
|
|
|
int cur_scan; /* current scan, used by JPEG-LS */ |
|
|
|
|
} MJpegDecodeContext; |
|
|
|
|
|
|
|
|
|
#define PREDICT(ret, topleft, top, left, predictor)\ |
|
|
|
|
switch(predictor){\
|
|
|
|
|
case 1: ret= left; break;\
|
|
|
|
|