X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Fmjpegdec.h;h=71cacb0b276e9ecd0d2c1536818c9d56fdeb7df2;hb=30f7021aa0be2c978aefb73894b643c9bafbf51c;hp=653fe7cae6eecc92b72527752e5b4bb102b26c42;hpb=0dda0f3bdb7e8a2d5bef7457375f72f38a100ccb;p=ffmpeg diff --git a/libavcodec/mjpegdec.h b/libavcodec/mjpegdec.h index 653fe7cae6e..71cacb0b276 100644 --- a/libavcodec/mjpegdec.h +++ b/libavcodec/mjpegdec.h @@ -30,6 +30,7 @@ #define AVCODEC_MJPEGDEC_H #include "libavutil/log.h" +#include "libavutil/mem_internal.h" #include "libavutil/pixdesc.h" #include "libavutil/stereo3d.h" @@ -43,12 +44,21 @@ #define MAX_COMPONENTS 4 +typedef struct ICCEntry { + uint8_t *data; + int length; +} ICCEntry; + +struct JLSState; + typedef struct MJpegDecodeContext { AVClass *class; AVCodecContext *avctx; GetBitContext gb; int buf_size; + AVPacket *pkt; + int start_code; /* current start code */ int buffer_size; uint8_t *buffer; @@ -57,13 +67,14 @@ typedef struct MJpegDecodeContext { VLC vlcs[3][4]; int qscale[4]; ///< quantizer scale calculated from quant_matrixes - int org_height; /* size given at codec init */ + int orig_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 bayer; /* true if it's a bayer-encoded JPEG embedded in a DNG */ int rgb; uint8_t upscale_h[4]; uint8_t upscale_v[4]; @@ -98,6 +109,7 @@ typedef struct MJpegDecodeContext { int last_dc[MAX_COMPONENTS]; /* last DEQUANTIZED dc (XXX: am I right to do that ?) */ AVFrame *picture; /* picture structure */ AVFrame *picture_ptr; /* pointer to picture structure */ + int seen_sof; ///< we found a SOF. int got_picture; ///< we found a SOF and picture is valid, too. int linesize[MAX_COMPONENTS]; ///< linesize << interlaced int8_t *qscale_table; @@ -134,11 +146,14 @@ typedef struct MJpegDecodeContext { const AVPixFmtDescriptor *pix_desc; - uint8_t **iccdata; - int *iccdatalens; + ICCEntry *iccentries; int iccnum; int iccread; + AVFrame *smv_frame; + int smv_frames_per_jpeg; + int smv_next_frame; + // Raw stream data for hwaccel use. const uint8_t *raw_image_buffer; size_t raw_image_buffer_size; @@ -151,13 +166,16 @@ typedef struct MJpegDecodeContext { enum AVPixelFormat hwaccel_sw_pix_fmt; enum AVPixelFormat hwaccel_pix_fmt; void *hwaccel_picture_private; + + struct JLSState *jls_state; + uint32_t palette[AVPALETTE_COUNT]; } MJpegDecodeContext; +int ff_mjpeg_build_vlc(VLC *vlc, const uint8_t *bits_table, + const uint8_t *val_table, int is_ac, void *logctx); int ff_mjpeg_decode_init(AVCodecContext *avctx); int ff_mjpeg_decode_end(AVCodecContext *avctx); -int ff_mjpeg_decode_frame(AVCodecContext *avctx, - void *data, int *got_frame, - AVPacket *avpkt); +int ff_mjpeg_receive_frame(AVCodecContext *avctx, AVFrame *frame); int ff_mjpeg_decode_dqt(MJpegDecodeContext *s); int ff_mjpeg_decode_dht(MJpegDecodeContext *s); int ff_mjpeg_decode_sof(MJpegDecodeContext *s); @@ -168,4 +186,6 @@ int ff_mjpeg_find_marker(MJpegDecodeContext *s, const uint8_t **buf_ptr, const uint8_t *buf_end, const uint8_t **unescaped_buf_ptr, int *unescaped_buf_size); +int ff_sp5x_process_packet(AVCodecContext *avctx, AVPacket *avpkt); + #endif /* AVCODEC_MJPEGDEC_H */