Go to the documentation of this file.
1 /*
2  * MJPEG decoder
3  * Copyright (c) 2000, 2001 Fabrice Bellard
4  * Copyright (c) 2003 Alex Beregszaszi
5  * Copyright (c) 2003-2004 Michael Niedermayer
6  *
7  * This file is part of FFmpeg.
8  *
9  * FFmpeg is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU Lesser General Public
11  * License as published by the Free Software Foundation; either
12  * version 2.1 of the License, or (at your option) any later version.
13  *
14  * FFmpeg is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * Lesser General Public License for more details.
18  *
19  * You should have received a copy of the GNU Lesser General Public
20  * License along with FFmpeg; if not, write to the Free Software
21  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22  */
24 /**
25  * @file
26  * MJPEG decoder.
27  */
32 #include "libavutil/log.h"
33 #include "libavutil/mem_internal.h"
34 #include "libavutil/pixdesc.h"
35 #include "libavutil/stereo3d.h"
37 #include "avcodec.h"
38 #include "blockdsp.h"
39 #include "get_bits.h"
40 #include "hpeldsp.h"
41 #include "idctdsp.h"
43 #undef near /* This file uses struct member 'near' which in windows.h is defined as empty. */
45 #define MAX_COMPONENTS 4
47 typedef struct MJpegDecodeContext {
48  AVClass *class;
51  int buf_size;
55  int start_code; /* current start code */
59  uint16_t quant_matrixes[4][64];
60  VLC vlcs[3][4];
61  int qscale[4]; ///< quantizer scale calculated from quant_matrixes
63  int orig_height; /* size given at codec init */
64  int first_picture; /* true if decoding first picture */
65  int interlaced; /* true if interlaced */
66  int bottom_field; /* true if bottom field */
67  int lossless;
68  int ls;
70  int bayer; /* true if it's a bayer-encoded JPEG embedded in a DNG */
71  int rgb;
74  int rct; /* standard rct */
75  int pegasus_rct; /* pegasus reversible colorspace transform */
76  int bits; /* bits per component */
77  int colr;
78  int xfrm;
81  int maxval;
82  int near; ///< near lossless bound (si 0 for lossless)
83  int t1,t2,t3;
84  int reset; ///< context halfing interval ?rename
86  int width, height;
91  int h_count[MAX_COMPONENTS]; /* horizontal and vertical count for each component */
100  int h_max, v_max; /* maximum h and v counts */
101  int quant_index[4]; /* quant table index for each component */
102  int last_dc[MAX_COMPONENTS]; /* last DEQUANTIZED dc (XXX: am I right to do that ?) */
103  AVFrame *picture; /* picture structure */
104  AVFrame *picture_ptr; /* pointer to picture structure */
105  int got_picture; ///< we found a SOF and picture is valid, too.
106  int linesize[MAX_COMPONENTS]; ///< linesize << interlaced
107  int8_t *qscale_table;
108  DECLARE_ALIGNED(32, int16_t, block)[64];
109  int16_t (*blocks[MAX_COMPONENTS])[64]; ///< intermediate sums (progressive mode)
111  uint64_t coefs_finished[MAX_COMPONENTS]; ///< bitmask of which coefs have been completely decoded (progressive mode)
128  int cur_scan; /* current scan, used by JPEG-LS */
129  int flipped; /* true if picture is flipped */
131  uint16_t (*ljpeg_buffer)[4];
132  unsigned int ljpeg_buffer_size;
137  AVStereo3D *stereo3d; ///!< stereoscopic information (cached, since it is read before frame allocation)
143  int iccnum;
144  int iccread;
150  // Raw stream data for hwaccel use.
164 int ff_mjpeg_build_vlc(VLC *vlc, const uint8_t *bits_table,
165  const uint8_t *val_table, int is_ac, void *logctx);
173  const uint8_t *mb_bitmask,int mb_bitmask_size,
174  const AVFrame *reference);
176  const uint8_t **buf_ptr, const uint8_t *buf_end,
177  const uint8_t **unescaped_buf_ptr, int *unescaped_buf_size);
181 #endif /* AVCODEC_MJPEGDEC_H */
int block_stride[MAX_COMPONENTS]
Definition: mjpegdec.h:89
int ff_mjpeg_decode_sos(MJpegDecodeContext *s, const uint8_t *mb_bitmask, int mb_bitmask_size, const AVFrame *reference)
Definition: mjpegdec.c:1622
const AVPixFmtDescriptor * pix_desc
!< stereoscopic information (cached, since it is read before frame allocation)
Definition: mjpegdec.h:139
int v_count[MAX_COMPONENTS]
Definition: mjpegdec.h:92
This structure describes decoded (raw) audio or video data.
Definition: frame.h:314
enum AVPixelFormat hwaccel_sw_pix_fmt
Definition: mjpegdec.h:159
size_t raw_image_buffer_size
Definition: mjpegdec.h:152
int h_scount[MAX_COMPONENTS]
Definition: mjpegdec.h:97
BlockDSPContext bdsp
Definition: mjpegdec.h:114
Definition: idctdsp.h:31
int qscale[4]
quantizer scale calculated from quant_matrixes
Definition: mjpegdec.h:61
int ff_sp5x_process_packet(AVCodecContext *avctx, AVPacket *avpkt)
Definition: sp5xdec.c:33
uint8_t * buffer
Definition: mjpegdec.h:57
AVPacket * pkt
Definition: mjpegdec.h:53
int dc_index[MAX_COMPONENTS]
Definition: mjpegdec.h:94
int linesize[MAX_COMPONENTS]
linesize << interlaced
Definition: mjpegdec.h:106
uint8_t upscale_v[4]
Definition: mjpegdec.h:73
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)
Definition: mjpegdec.c:116
int comp_index[MAX_COMPONENTS]
Definition: mjpegdec.h:93
HpelDSPContext hdsp
Definition: mjpegdec.h:115
const uint8_t * raw_image_buffer
Definition: mjpegdec.h:151
int16_t block[64]
Definition: mjpegdec.h:108
Stereo 3D type: this structure describes how two videos are packed within a single video surface...
Definition: stereo3d.h:176
uint16_t(* ljpeg_buffer)[4]
Definition: mjpegdec.h:131
unsigned int ljpeg_buffer_size
Definition: mjpegdec.h:132
uint8_t * last_nnz[MAX_COMPONENTS]
Definition: mjpegdec.h:110
AVFrame * picture_ptr
Definition: mjpegdec.h:104
#define DECLARE_ALIGNED(n, t, v)
Declare a variable that is aligned in memory.
Definition: mem.h:117
int quant_sindex[MAX_COMPONENTS]
Definition: mjpegdec.h:99
Definition: mjpegdec.h:45
int h_count[MAX_COMPONENTS]
Definition: mjpegdec.h:91
bitstream reader API header.
int ff_mjpeg_decode_dqt(MJpegDecodeContext *s)
Definition: mjpegdec.c:193
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)
Definition: mjpegdec.c:2194
AVDictionary * exif_metadata
Definition: mjpegdec.h:135
uint8_t ** iccdata
Definition: mjpegdec.h:141
int nb_blocks[MAX_COMPONENTS]
Definition: mjpegdec.h:96
VLC vlcs[3][4]
Definition: mjpegdec.h:60
int ff_mjpeg_decode_sof(MJpegDecodeContext *s)
Definition: mjpegdec.c:295
Definition: vlc.h:26
ScanTable scantable
Definition: mjpegdec.h:113
Half-pel DSP context.
Definition: hpeldsp.h:45
AVFrame * smv_frame
Definition: mjpegdec.h:146
int near
near lossless bound (si 0 for lossless)
Definition: mjpegdec.h:82
int component_id[MAX_COMPONENTS]
Definition: mjpegdec.h:90
uint8_t raw_huffman_lengths[2][4][16]
Definition: mjpegdec.h:156
these buffered frames must be flushed immediately if a new input produces new the filter must not call request_frame to get more It must just process the frame or queue it The task of requesting more frames is left to the filter s request_frame method or the application If a filter has several the filter must be ready for frames arriving randomly on any input any filter with several inputs will most likely require some kind of queuing mechanism It is perfectly acceptable to have a limited queue and to drop frames when the inputs are too unbalanced request_frame For filters that do not use the this method is called when a frame is wanted on an output For a it should directly call filter_frame on the corresponding output For a if there are queued frames already one of these frames should be pushed If the filter should request a frame on one of its repeatedly until at least one frame has been pushed Return or at least make progress towards producing a frame
#define s(width, name)
Definition: cbs_vp9.c:257
int quant_index[4]
Definition: mjpegdec.h:101
int v_scount[MAX_COMPONENTS]
Definition: mjpegdec.h:98
GetBitContext gb
Definition: mjpegdec.h:50
int ff_mjpeg_decode_dht(MJpegDecodeContext *s)
Definition: mjpegdec.c:234
IDCTDSPContext idsp
Definition: mjpegdec.h:116
Half-pel DSP functions.
Libavcodec external API header.
Descriptor that unambiguously describes how the bits of a pixel are stored in the up to 4 data planes...
Definition: pixdesc.h:81
AVStereo3D * stereo3d
Definition: mjpegdec.h:137
main external API structure.
Definition: avcodec.h:531
int8_t * qscale_table
Definition: mjpegdec.h:107
Describe the class of an AVClass context structure.
Definition: log.h:67
int ac_index[MAX_COMPONENTS]
Definition: mjpegdec.h:95
int reset
context halfing interval ?rename
Definition: mjpegdec.h:84
uint64_t coefs_finished[MAX_COMPONENTS]
bitmask of which coefs have been completely decoded (progressive mode)
Definition: mjpegdec.h:111
enum AVPixelFormat hwaccel_pix_fmt
Definition: mjpegdec.h:160
uint8_t raw_huffman_values[2][4][256]
Definition: mjpegdec.h:157
size_t raw_scan_buffer_size
Definition: mjpegdec.h:154
Stereoscopic video.
const uint8_t * raw_scan_buffer
Definition: mjpegdec.h:153
int ff_mjpeg_receive_frame(AVCodecContext *avctx, AVFrame *frame)
Definition: mjpegdec.c:2388
AVCodecContext * avctx
Definition: mjpegdec.h:49
int got_picture
we found a SOF and picture is valid, too.
Definition: mjpegdec.h:105
int16_t(*[MAX_COMPONENTS] blocks)[64]
intermediate sums (progressive mode)
Definition: mjpegdec.h:109
AVFrame * picture
Definition: mjpegdec.h:103
void * hwaccel_picture_private
Definition: mjpegdec.h:161
int last_dc[MAX_COMPONENTS]
Definition: mjpegdec.h:102
uint8_t upscale_h[4]
Definition: mjpegdec.h:72
int ff_mjpeg_decode_end(AVCodecContext *avctx)
Definition: mjpegdec.c:2881
Pixel format.
Definition: pixfmt.h:64
This structure stores compressed data.
Definition: packet.h:340
uint16_t quant_matrixes[4][64]
Definition: mjpegdec.h:59