00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00029 #ifndef FFMPEG_MJPEGDEC_H
00030 #define FFMPEG_MJPEGDEC_H
00031
00032 #include "avcodec.h"
00033 #include "bitstream.h"
00034 #include "dsputil.h"
00035 #include "mpegvideo.h"
00036
00037 #define MAX_COMPONENTS 4
00038
00039 typedef struct MJpegDecodeContext {
00040 AVCodecContext *avctx;
00041 GetBitContext gb;
00042
00043 int start_code;
00044 int buffer_size;
00045 uint8_t *buffer;
00046
00047 int16_t quant_matrixes[4][64];
00048 VLC vlcs[2][4];
00049 int qscale[4];
00050
00051 int org_height;
00052 int first_picture;
00053 int interlaced;
00054 int bottom_field;
00055 int lossless;
00056 int ls;
00057 int progressive;
00058 int rgb;
00059 int rct;
00060 int pegasus_rct;
00061 int bits;
00062
00063 int maxval;
00064 int near;
00065 int t1,t2,t3;
00066 int reset;
00067
00068 int width, height;
00069 int mb_width, mb_height;
00070 int nb_components;
00071 int component_id[MAX_COMPONENTS];
00072 int h_count[MAX_COMPONENTS];
00073 int v_count[MAX_COMPONENTS];
00074 int comp_index[MAX_COMPONENTS];
00075 int dc_index[MAX_COMPONENTS];
00076 int ac_index[MAX_COMPONENTS];
00077 int nb_blocks[MAX_COMPONENTS];
00078 int h_scount[MAX_COMPONENTS];
00079 int v_scount[MAX_COMPONENTS];
00080 int h_max, v_max;
00081 int quant_index[4];
00082 int last_dc[MAX_COMPONENTS];
00083 AVFrame picture;
00084 int linesize[MAX_COMPONENTS];
00085 int8_t *qscale_table;
00086 DECLARE_ALIGNED_8(DCTELEM, block[64]);
00087 ScanTable scantable;
00088 DSPContext dsp;
00089
00090 int restart_interval;
00091 int restart_count;
00092
00093 int buggy_avid;
00094 int cs_itu601;
00095 int interlace_polarity;
00096
00097 int mjpb_skiptosod;
00098
00099 int cur_scan;
00100 } MJpegDecodeContext;
00101
00102 int ff_mjpeg_decode_init(AVCodecContext *avctx);
00103 int ff_mjpeg_decode_end(AVCodecContext *avctx);
00104 int ff_mjpeg_decode_frame(AVCodecContext *avctx,
00105 void *data, int *data_size,
00106 const uint8_t *buf, int buf_size);
00107 int ff_mjpeg_decode_dqt(MJpegDecodeContext *s);
00108 int ff_mjpeg_decode_dht(MJpegDecodeContext *s);
00109 int ff_mjpeg_decode_sof(MJpegDecodeContext *s);
00110 int ff_mjpeg_decode_sos(MJpegDecodeContext *s);
00111
00112 #endif