FFmpeg
mjpegdec.h
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
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
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  */
23 
24 /**
25  * @file
26  * MJPEG decoder.
27  */
28 
29 #ifndef AVCODEC_MJPEGDEC_H
30 #define AVCODEC_MJPEGDEC_H
31 
32 #include "libavutil/log.h"
33 #include "libavutil/mem_internal.h"
34 #include "libavutil/pixdesc.h"
35 #include "libavutil/stereo3d.h"
36 
37 #include "avcodec.h"
38 #include "blockdsp.h"
39 #include "exif.h"
40 #include "get_bits.h"
41 #include "hpeldsp.h"
42 #include "idctdsp.h"
43 
44 #undef near /* This file uses struct member 'near' which in windows.h is defined as empty. */
45 
46 #define MAX_COMPONENTS 4
47 
48 typedef struct ICCEntry {
49  uint8_t *data;
50  int length;
51 } ICCEntry;
52 
53 struct JLSState;
54 
55 typedef struct MJpegDecodeContext {
56  AVClass *class;
59  int buf_size;
60 
61  int start_code; /* current start code */
63  uint8_t *buffer;
64 
65  uint16_t quant_matrixes[4][64];
66  VLC vlcs[3][4];
67  int qscale[4]; ///< quantizer scale calculated from quant_matrixes
68 
69  int orig_height; /* size given at codec init */
70  int first_picture; /* true if decoding first picture */
71  int interlaced; /* true if interlaced */
72  int bottom_field; /* true if bottom field */
73  int lossless;
74  int ls;
76  int bayer; /* true if it's a bayer-encoded JPEG embedded in a DNG */
77  int rgb;
78  uint8_t upscale_h[4];
79  uint8_t upscale_v[4];
80  int rct; /* standard rct */
81  int pegasus_rct; /* pegasus reversible colorspace transform */
82  int bits; /* bits per component */
83  int colr;
84  int xfrm;
86 
87  int maxval;
88  int near; ///< near lossless bound (si 0 for lossless)
89  int t1,t2,t3;
90  int reset; ///< context halfing interval ?rename
91 
92  int width, height;
97  int h_count[MAX_COMPONENTS]; /* horizontal and vertical count for each component */
106  int h_max, v_max; /* maximum h and v counts */
107  int quant_index[4]; /* quant table index for each component */
108  int last_dc[MAX_COMPONENTS]; /* last DEQUANTIZED dc (XXX: am I right to do that ?) */
109  AVFrame *picture; /* picture structure */
110  AVFrame *picture_ptr; /* pointer to picture structure */
111  int got_picture; ///< we found a SOF and picture is valid, too.
112  int linesize[MAX_COMPONENTS]; ///< linesize << interlaced
113  int8_t *qscale_table;
114  DECLARE_ALIGNED(32, int16_t, block)[64];
115  int16_t (*blocks[MAX_COMPONENTS])[64]; ///< intermediate sums (progressive mode)
117  uint64_t coefs_finished[MAX_COMPONENTS]; ///< bitmask of which coefs have been completely decoded (progressive mode)
120  uint8_t permutated_scantable[64];
124 
127 
132 
134 
135  int cur_scan; /* current scan, used by JPEG-LS */
136  int flipped; /* true if picture is flipped */
137 
138  uint16_t (*ljpeg_buffer)[4];
139  unsigned int ljpeg_buffer_size;
140 
143 
144  AVStereo3D *stereo3d; ///!< stereoscopic information (cached, since it is read before frame allocation)
145 
147 
149  int iccnum;
150  int iccread;
151 
155 
156  // Raw stream data for hwaccel use.
157  const uint8_t *raw_image_buffer;
159  const uint8_t *raw_scan_buffer;
161 
162  uint8_t raw_huffman_lengths[2][4][16];
163  uint8_t raw_huffman_values[2][4][256];
164 
170 
171 int ff_mjpeg_build_vlc(VLC *vlc, const uint8_t *bits_table,
172  const uint8_t *val_table, int is_ac, void *logctx);
176  AVFrame *frame, int *got_frame,
177  AVPacket *avpkt);
179  AVFrame *frame, int *got_frame,
180  const AVPacket *avpkt, const uint8_t *buf, int buf_size);
185  const uint8_t *mb_bitmask,int mb_bitmask_size,
186  const AVFrame *reference);
188  const uint8_t **buf_ptr, const uint8_t *buf_end,
189  const uint8_t **unescaped_buf_ptr, int *unescaped_buf_size);
190 
191 #endif /* AVCODEC_MJPEGDEC_H */
AVPixelFormat
AVPixelFormat
Pixel format.
Definition: pixfmt.h:71
MJpegDecodeContext::avctx
AVCodecContext * avctx
Definition: mjpegdec.h:57
MJpegDecodeContext::h_scount
int h_scount[MAX_COMPONENTS]
Definition: mjpegdec.h:103
MJpegDecodeContext::height
int height
Definition: mjpegdec.h:92
blockdsp.h
mem_internal.h
MJpegDecodeContext::buggy_avid
int buggy_avid
Definition: mjpegdec.h:128
ff_mjpeg_decode_frame_from_buf
int ff_mjpeg_decode_frame_from_buf(AVCodecContext *avctx, AVFrame *frame, int *got_frame, const AVPacket *avpkt, const uint8_t *buf, int buf_size)
Definition: mjpegdec.c:2361
AVExifMetadata
Definition: exif.h:76
MJpegDecodeContext::quant_matrixes
uint16_t quant_matrixes[4][64]
Definition: mjpegdec.h:65
ff_mjpeg_decode_sof
int ff_mjpeg_decode_sof(MJpegDecodeContext *s)
Definition: mjpegdec.c:301
MJpegDecodeContext::palette_index
int palette_index
Definition: mjpegdec.h:118
MJpegDecodeContext::progressive
int progressive
Definition: mjpegdec.h:75
MJpegDecodeContext::smv_next_frame
int smv_next_frame
Definition: mjpegdec.h:154
MJpegDecodeContext::nb_blocks
int nb_blocks[MAX_COMPONENTS]
Definition: mjpegdec.h:102
MJpegDecodeContext::v_count
int v_count[MAX_COMPONENTS]
Definition: mjpegdec.h:98
MJpegDecodeContext::block_stride
int block_stride[MAX_COMPONENTS]
Definition: mjpegdec.h:95
AVFrame
This structure describes decoded (raw) audio or video data.
Definition: frame.h:427
MJpegDecodeContext::last_nnz
uint8_t * last_nnz[MAX_COMPONENTS]
Definition: mjpegdec.h:116
MJpegDecodeContext::block
int16_t block[64]
Definition: mjpegdec.h:114
pixdesc.h
MJpegDecodeContext::bdsp
BlockDSPContext bdsp
Definition: mjpegdec.h:121
MJpegDecodeContext::mb_width
int mb_width
Definition: mjpegdec.h:93
MJpegDecodeContext::first_picture
int first_picture
Definition: mjpegdec.h:70
MJpegDecodeContext::interlace_polarity
int interlace_polarity
Definition: mjpegdec.h:130
MJpegDecodeContext::flipped
int flipped
Definition: mjpegdec.h:136
ff_mjpeg_decode_frame
int ff_mjpeg_decode_frame(AVCodecContext *avctx, AVFrame *frame, int *got_frame, AVPacket *avpkt)
Definition: mjpegdec.c:2878
MJpegDecodeContext::adobe_transform
int adobe_transform
Definition: mjpegdec.h:85
BlockDSPContext
Definition: blockdsp.h:32
MJpegDecodeContext::jls_state
struct JLSState * jls_state
Definition: mjpegdec.h:168
MJpegDecodeContext::pix_desc
const AVPixFmtDescriptor * pix_desc
!< stereoscopic information (cached, since it is read before frame allocation)
Definition: mjpegdec.h:146
MJpegDecodeContext::t3
int t3
Definition: mjpegdec.h:89
ff_mjpeg_find_marker
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:2227
MJpegDecodeContext::iccnum
int iccnum
Definition: mjpegdec.h:149
MJpegDecodeContext::h_count
int h_count[MAX_COMPONENTS]
Definition: mjpegdec.h:97
MJpegDecodeContext::extern_huff
int extern_huff
Definition: mjpegdec.h:141
MJpegDecodeContext::smv_frames_per_jpeg
int smv_frames_per_jpeg
Definition: mjpegdec.h:153
MJpegDecodeContext::dc_index
int dc_index[MAX_COMPONENTS]
Definition: mjpegdec.h:100
GetBitContext
Definition: get_bits.h:109
MJpegDecodeContext::upscale_v
uint8_t upscale_v[4]
Definition: mjpegdec.h:79
ff_mjpeg_decode_end
int ff_mjpeg_decode_end(AVCodecContext *avctx)
Definition: mjpegdec.c:2888
JLSState
Definition: jpegls.h:36
MJpegDecodeContext::comp_index
int comp_index[MAX_COMPONENTS]
Definition: mjpegdec.h:99
MJpegDecodeContext::picture_ptr
AVFrame * picture_ptr
Definition: mjpegdec.h:110
MJpegDecodeContext::start_code
int start_code
Definition: mjpegdec.h:61
MJpegDecodeContext::component_id
int component_id[MAX_COMPONENTS]
Definition: mjpegdec.h:96
ICCEntry::data
uint8_t * data
Definition: mjpegdec.h:49
MJpegDecodeContext::cur_scan
int cur_scan
Definition: mjpegdec.h:135
MJpegDecodeContext::raw_image_buffer
const uint8_t * raw_image_buffer
Definition: mjpegdec.h:157
MJpegDecodeContext::buffer
uint8_t * buffer
Definition: mjpegdec.h:63
MJpegDecodeContext::t1
int t1
Definition: mjpegdec.h:89
stereo3d.h
s
#define s(width, name)
Definition: cbs_vp9.c:198
MJpegDecodeContext::ljpeg_buffer
uint16_t(* ljpeg_buffer)[4]
Definition: mjpegdec.h:138
MJpegDecodeContext::interlaced
int interlaced
Definition: mjpegdec.h:71
ICCEntry::length
int length
Definition: mjpegdec.h:50
MJpegDecodeContext::smv_frame
AVFrame * smv_frame
Definition: mjpegdec.h:152
MJpegDecodeContext::ls
int ls
Definition: mjpegdec.h:74
get_bits.h
MJpegDecodeContext::t2
int t2
Definition: mjpegdec.h:89
MJpegDecodeContext::quant_sindex
int quant_sindex[MAX_COMPONENTS]
Definition: mjpegdec.h:105
MJpegDecodeContext::bottom_field
int bottom_field
Definition: mjpegdec.h:72
MJpegDecodeContext::xfrm
int xfrm
Definition: mjpegdec.h:84
MJpegDecodeContext::pegasus_rct
int pegasus_rct
Definition: mjpegdec.h:81
MJpegDecodeContext::ljpeg_buffer_size
unsigned int ljpeg_buffer_size
Definition: mjpegdec.h:139
MJpegDecodeContext::iccentries
ICCEntry * iccentries
Definition: mjpegdec.h:148
AVClass
Describe the class of an AVClass context structure.
Definition: log.h:76
MJpegDecodeContext::force_pal8
int force_pal8
Definition: mjpegdec.h:119
MJpegDecodeContext::hwaccel_pix_fmt
enum AVPixelFormat hwaccel_pix_fmt
Definition: mjpegdec.h:166
MJpegDecodeContext::v_max
int v_max
Definition: mjpegdec.h:106
MJpegDecodeContext::buf_size
int buf_size
Definition: mjpegdec.h:59
MJpegDecodeContext::restart_interval
int restart_interval
Definition: mjpegdec.h:125
MJpegDecodeContext::gb
GetBitContext gb
Definition: mjpegdec.h:58
MJpegDecodeContext
Definition: mjpegdec.h:55
MJpegDecodeContext::blocks
int16_t(*[MAX_COMPONENTS] blocks)[64]
intermediate sums (progressive mode)
Definition: mjpegdec.h:115
MJpegDecodeContext::last_dc
int last_dc[MAX_COMPONENTS]
Definition: mjpegdec.h:108
MJpegDecodeContext::mb_height
int mb_height
Definition: mjpegdec.h:93
MJpegDecodeContext::near
int near
near lossless bound (si 0 for lossless)
Definition: mjpegdec.h:88
ff_mjpeg_decode_init
int ff_mjpeg_decode_init(AVCodecContext *avctx)
Definition: mjpegdec.c:123
MJpegDecodeContext::width
int width
Definition: mjpegdec.h:92
HpelDSPContext
Half-pel DSP context.
Definition: hpeldsp.h:45
MJpegDecodeContext::multiscope
int multiscope
Definition: mjpegdec.h:131
MJpegDecodeContext::cs_itu601
int cs_itu601
Definition: mjpegdec.h:129
MJpegDecodeContext::raw_scan_buffer_size
size_t raw_scan_buffer_size
Definition: mjpegdec.h:160
DECLARE_ALIGNED
#define DECLARE_ALIGNED(n, t, v)
Definition: mem_internal.h:104
MJpegDecodeContext::orig_height
int orig_height
Definition: mjpegdec.h:69
MJpegDecodeContext::ac_index
int ac_index[MAX_COMPONENTS]
Definition: mjpegdec.h:101
MJpegDecodeContext::reset
int reset
context halfing interval ?rename
Definition: mjpegdec.h:90
MJpegDecodeContext::restart_count
int restart_count
Definition: mjpegdec.h:126
ff_mjpeg_decode_dht
int ff_mjpeg_decode_dht(MJpegDecodeContext *s)
Definition: mjpegdec.c:240
MJpegDecodeContext::exif_metadata
AVExifMetadata exif_metadata
Definition: mjpegdec.h:142
MJpegDecodeContext::bits
int bits
Definition: mjpegdec.h:82
MJpegDecodeContext::v_scount
int v_scount[MAX_COMPONENTS]
Definition: mjpegdec.h:104
MJpegDecodeContext::rct
int rct
Definition: mjpegdec.h:80
log.h
MJpegDecodeContext::mjpb_skiptosod
int mjpb_skiptosod
Definition: mjpegdec.h:133
MJpegDecodeContext::vlcs
VLC vlcs[3][4]
Definition: mjpegdec.h:66
ff_mjpeg_decode_dqt
int ff_mjpeg_decode_dqt(MJpegDecodeContext *s)
Definition: mjpegdec.c:197
MJpegDecodeContext::bayer
int bayer
Definition: mjpegdec.h:76
MJpegDecodeContext::idsp
IDCTDSPContext idsp
Definition: mjpegdec.h:123
MJpegDecodeContext::rgb
int rgb
Definition: mjpegdec.h:77
MJpegDecodeContext::quant_index
int quant_index[4]
Definition: mjpegdec.h:107
MJpegDecodeContext::qscale
int qscale[4]
quantizer scale calculated from quant_matrixes
Definition: mjpegdec.h:67
exif.h
MJpegDecodeContext::raw_huffman_values
uint8_t raw_huffman_values[2][4][256]
Definition: mjpegdec.h:163
idctdsp.h
avcodec.h
MJpegDecodeContext::raw_scan_buffer
const uint8_t * raw_scan_buffer
Definition: mjpegdec.h:159
frame
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
Definition: filter_design.txt:265
MJpegDecodeContext::picture
AVFrame * picture
Definition: mjpegdec.h:109
IDCTDSPContext
Definition: idctdsp.h:43
AVCodecContext
main external API structure.
Definition: avcodec.h:431
ff_mjpeg_decode_sos
int ff_mjpeg_decode_sos(MJpegDecodeContext *s, const uint8_t *mb_bitmask, int mb_bitmask_size, const AVFrame *reference)
Definition: mjpegdec.c:1670
VLC
Definition: vlc.h:50
MJpegDecodeContext::colr
int colr
Definition: mjpegdec.h:83
MJpegDecodeContext::qscale_table
int8_t * qscale_table
Definition: mjpegdec.h:113
MJpegDecodeContext::h_max
int h_max
Definition: mjpegdec.h:106
MJpegDecodeContext::permutated_scantable
uint8_t permutated_scantable[64]
Definition: mjpegdec.h:120
MJpegDecodeContext::stereo3d
AVStereo3D * stereo3d
Definition: mjpegdec.h:144
MJpegDecodeContext::got_picture
int got_picture
we found a SOF and picture is valid, too.
Definition: mjpegdec.h:111
MJpegDecodeContext::maxval
int maxval
Definition: mjpegdec.h:87
AVPixFmtDescriptor
Descriptor that unambiguously describes how the bits of a pixel are stored in the up to 4 data planes...
Definition: pixdesc.h:69
ff_mjpeg_build_vlc
int ff_mjpeg_build_vlc(VLC *vlc, const uint8_t *bits_table, const uint8_t *val_table, int is_ac, void *logctx)
Definition: mjpegdec_common.c:41
AVPacket
This structure stores compressed data.
Definition: packet.h:535
MJpegDecodeContext::iccread
int iccread
Definition: mjpegdec.h:150
MJpegDecodeContext::lossless
int lossless
Definition: mjpegdec.h:73
ICCEntry
Definition: mjpegdec.h:48
MJpegDecodeContext::hdsp
HpelDSPContext hdsp
Definition: mjpegdec.h:122
MJpegDecodeContext::raw_huffman_lengths
uint8_t raw_huffman_lengths[2][4][16]
Definition: mjpegdec.h:162
hpeldsp.h
MJpegDecodeContext::upscale_h
uint8_t upscale_h[4]
Definition: mjpegdec.h:78
MAX_COMPONENTS
#define MAX_COMPONENTS
Definition: mjpegdec.h:46
MJpegDecodeContext::raw_image_buffer_size
size_t raw_image_buffer_size
Definition: mjpegdec.h:158
MJpegDecodeContext::coefs_finished
uint64_t coefs_finished[MAX_COMPONENTS]
bitmask of which coefs have been completely decoded (progressive mode)
Definition: mjpegdec.h:117
AVStereo3D
Stereo 3D type: this structure describes how two videos are packed within a single video surface,...
Definition: stereo3d.h:203
MJpegDecodeContext::nb_components
int nb_components
Definition: mjpegdec.h:94
MJpegDecodeContext::linesize
int linesize[MAX_COMPONENTS]
linesize << interlaced
Definition: mjpegdec.h:112
MJpegDecodeContext::hwaccel_sw_pix_fmt
enum AVPixelFormat hwaccel_sw_pix_fmt
Definition: mjpegdec.h:165
MJpegDecodeContext::buffer_size
int buffer_size
Definition: mjpegdec.h:62
MJpegDecodeContext::hwaccel_picture_private
void * hwaccel_picture_private
Definition: mjpegdec.h:167