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 "bytestream.h"
40 #include "exif.h"
41 #include "get_bits.h"
42 #include "hpeldsp.h"
43 #include "idctdsp.h"
44 
45 #undef near /* This file uses struct member 'near' which in windows.h is defined as empty. */
46 
47 #define MAX_COMPONENTS 4
48 
49 typedef struct ICCEntry {
50  uint8_t *data;
51  int length;
52 } ICCEntry;
53 
54 struct JLSState;
55 
56 typedef struct MJpegDecodeContext {
57  AVClass *class;
61  int buf_size;
62 
63  int start_code; /* current start code */
65  uint8_t *buffer;
66 
67  uint16_t quant_matrixes[4][64];
68  VLC vlcs[3][4];
69  int qscale[4]; ///< quantizer scale calculated from quant_matrixes
70 
71  int orig_height; /* size given at codec init */
72  int first_picture; /* true if decoding first picture */
73  int interlaced; /* true if interlaced */
74  int bottom_field; /* true if bottom field */
75  int lossless;
76  int ls;
78  int bayer; /* true if it's a bayer-encoded JPEG embedded in a DNG */
79  int rgb;
80  uint8_t upscale_h[4];
81  uint8_t upscale_v[4];
82  int rct; /* standard rct */
83  int pegasus_rct; /* pegasus reversible colorspace transform */
84  int bits; /* bits per component */
85  int colr;
86  int xfrm;
88 
89  int maxval;
90  int near; ///< near lossless bound (si 0 for lossless)
91  int t1,t2,t3;
92  int reset; ///< context halfing interval ?rename
93 
94  int width, height;
99  int h_count[MAX_COMPONENTS]; /* horizontal and vertical count for each component */
108  int h_max, v_max; /* maximum h and v counts */
109  int quant_index[4]; /* quant table index for each component */
110  int last_dc[MAX_COMPONENTS]; /* last DEQUANTIZED dc (XXX: am I right to do that ?) */
111  AVFrame *picture; /* picture structure */
112  AVFrame *picture_ptr; /* pointer to picture structure */
113  int got_picture; ///< we found a SOF and picture is valid, too.
114  int linesize[MAX_COMPONENTS]; ///< linesize << interlaced
115  int8_t *qscale_table;
116  DECLARE_ALIGNED(32, int16_t, block)[64];
117  int16_t (*blocks[MAX_COMPONENTS])[64]; ///< intermediate sums (progressive mode)
119  uint64_t coefs_finished[MAX_COMPONENTS]; ///< bitmask of which coefs have been completely decoded (progressive mode)
122  uint8_t permutated_scantable[64];
125  op_pixels_func copy_block; ///< only set and used by mxpeg
126 
129 
134 
136 
137  int cur_scan; /* current scan, used by JPEG-LS */
138  int flipped; /* true if picture is flipped */
139 
140  uint16_t (*ljpeg_buffer)[4];
141  unsigned int ljpeg_buffer_size;
142 
145 
146  AVStereo3D *stereo3d; ///!< stereoscopic information (cached, since it is read before frame allocation)
147 
149 
151  int iccnum;
152  int iccread;
153 
157 
158  // Raw stream data for hwaccel use.
159  const uint8_t *raw_image_buffer;
161  const uint8_t *raw_scan_buffer;
163 
164  uint8_t raw_huffman_lengths[2][4][16];
165  uint8_t raw_huffman_values[2][4][256];
166 
172 
173 int ff_mjpeg_build_vlc(VLC *vlc, const uint8_t *bits_table,
174  const uint8_t *val_table, int is_ac, void *logctx);
178  AVFrame *frame, int *got_frame,
179  AVPacket *avpkt);
181  AVFrame *frame, int *got_frame,
182  const AVPacket *avpkt, const uint8_t *buf, int buf_size);
187  const uint8_t *mb_bitmask,int mb_bitmask_size,
188  const AVFrame *reference);
190  const uint8_t **buf_ptr, const uint8_t *buf_end,
191  const uint8_t **unescaped_buf_ptr, int *unescaped_buf_size);
192 
193 #endif /* AVCODEC_MJPEGDEC_H */
AVPixelFormat
AVPixelFormat
Pixel format.
Definition: pixfmt.h:71
MJpegDecodeContext::avctx
AVCodecContext * avctx
Definition: mjpegdec.h:58
MJpegDecodeContext::h_scount
int h_scount[MAX_COMPONENTS]
Definition: mjpegdec.h:105
MJpegDecodeContext::height
int height
Definition: mjpegdec.h:94
blockdsp.h
mem_internal.h
MJpegDecodeContext::buggy_avid
int buggy_avid
Definition: mjpegdec.h:130
GetByteContext
Definition: bytestream.h:33
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:2377
AVExifMetadata
Definition: exif.h:76
MJpegDecodeContext::quant_matrixes
uint16_t quant_matrixes[4][64]
Definition: mjpegdec.h:67
ff_mjpeg_decode_sof
int ff_mjpeg_decode_sof(MJpegDecodeContext *s)
Definition: mjpegdec.c:306
MJpegDecodeContext::palette_index
int palette_index
Definition: mjpegdec.h:120
MJpegDecodeContext::progressive
int progressive
Definition: mjpegdec.h:77
MJpegDecodeContext::smv_next_frame
int smv_next_frame
Definition: mjpegdec.h:156
MJpegDecodeContext::nb_blocks
int nb_blocks[MAX_COMPONENTS]
Definition: mjpegdec.h:104
MJpegDecodeContext::v_count
int v_count[MAX_COMPONENTS]
Definition: mjpegdec.h:100
MJpegDecodeContext::block_stride
int block_stride[MAX_COMPONENTS]
Definition: mjpegdec.h:97
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:118
MJpegDecodeContext::block
int16_t block[64]
Definition: mjpegdec.h:116
pixdesc.h
MJpegDecodeContext::bdsp
BlockDSPContext bdsp
Definition: mjpegdec.h:123
MJpegDecodeContext::mb_width
int mb_width
Definition: mjpegdec.h:95
MJpegDecodeContext::first_picture
int first_picture
Definition: mjpegdec.h:72
MJpegDecodeContext::interlace_polarity
int interlace_polarity
Definition: mjpegdec.h:132
MJpegDecodeContext::flipped
int flipped
Definition: mjpegdec.h:138
ff_mjpeg_decode_frame
int ff_mjpeg_decode_frame(AVCodecContext *avctx, AVFrame *frame, int *got_frame, AVPacket *avpkt)
Definition: mjpegdec.c:2889
MJpegDecodeContext::adobe_transform
int adobe_transform
Definition: mjpegdec.h:87
BlockDSPContext
Definition: blockdsp.h:32
MJpegDecodeContext::jls_state
struct JLSState * jls_state
Definition: mjpegdec.h:170
MJpegDecodeContext::pix_desc
const AVPixFmtDescriptor * pix_desc
!< stereoscopic information (cached, since it is read before frame allocation)
Definition: mjpegdec.h:148
MJpegDecodeContext::t3
int t3
Definition: mjpegdec.h:91
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:2243
MJpegDecodeContext::iccnum
int iccnum
Definition: mjpegdec.h:151
MJpegDecodeContext::h_count
int h_count[MAX_COMPONENTS]
Definition: mjpegdec.h:99
MJpegDecodeContext::extern_huff
int extern_huff
Definition: mjpegdec.h:143
MJpegDecodeContext::smv_frames_per_jpeg
int smv_frames_per_jpeg
Definition: mjpegdec.h:155
MJpegDecodeContext::dc_index
int dc_index[MAX_COMPONENTS]
Definition: mjpegdec.h:102
GetBitContext
Definition: get_bits.h:109
MJpegDecodeContext::upscale_v
uint8_t upscale_v[4]
Definition: mjpegdec.h:81
ff_mjpeg_decode_end
int ff_mjpeg_decode_end(AVCodecContext *avctx)
Definition: mjpegdec.c:2899
JLSState
Definition: jpegls.h:36
MJpegDecodeContext::comp_index
int comp_index[MAX_COMPONENTS]
Definition: mjpegdec.h:101
MJpegDecodeContext::picture_ptr
AVFrame * picture_ptr
Definition: mjpegdec.h:112
MJpegDecodeContext::start_code
int start_code
Definition: mjpegdec.h:63
MJpegDecodeContext::component_id
int component_id[MAX_COMPONENTS]
Definition: mjpegdec.h:98
ICCEntry::data
uint8_t * data
Definition: mjpegdec.h:50
MJpegDecodeContext::cur_scan
int cur_scan
Definition: mjpegdec.h:137
MJpegDecodeContext::raw_image_buffer
const uint8_t * raw_image_buffer
Definition: mjpegdec.h:159
MJpegDecodeContext::buffer
uint8_t * buffer
Definition: mjpegdec.h:65
MJpegDecodeContext::t1
int t1
Definition: mjpegdec.h:91
stereo3d.h
s
#define s(width, name)
Definition: cbs_vp9.c:198
MJpegDecodeContext::ljpeg_buffer
uint16_t(* ljpeg_buffer)[4]
Definition: mjpegdec.h:140
MJpegDecodeContext::interlaced
int interlaced
Definition: mjpegdec.h:73
ICCEntry::length
int length
Definition: mjpegdec.h:51
MJpegDecodeContext::smv_frame
AVFrame * smv_frame
Definition: mjpegdec.h:154
MJpegDecodeContext::ls
int ls
Definition: mjpegdec.h:76
get_bits.h
MJpegDecodeContext::t2
int t2
Definition: mjpegdec.h:91
MJpegDecodeContext::quant_sindex
int quant_sindex[MAX_COMPONENTS]
Definition: mjpegdec.h:107
MJpegDecodeContext::bottom_field
int bottom_field
Definition: mjpegdec.h:74
MJpegDecodeContext::xfrm
int xfrm
Definition: mjpegdec.h:86
MJpegDecodeContext::pegasus_rct
int pegasus_rct
Definition: mjpegdec.h:83
MJpegDecodeContext::ljpeg_buffer_size
unsigned int ljpeg_buffer_size
Definition: mjpegdec.h:141
MJpegDecodeContext::iccentries
ICCEntry * iccentries
Definition: mjpegdec.h:150
AVClass
Describe the class of an AVClass context structure.
Definition: log.h:76
MJpegDecodeContext::force_pal8
int force_pal8
Definition: mjpegdec.h:121
MJpegDecodeContext::hwaccel_pix_fmt
enum AVPixelFormat hwaccel_pix_fmt
Definition: mjpegdec.h:168
MJpegDecodeContext::v_max
int v_max
Definition: mjpegdec.h:108
MJpegDecodeContext::buf_size
int buf_size
Definition: mjpegdec.h:61
MJpegDecodeContext::restart_interval
int restart_interval
Definition: mjpegdec.h:127
MJpegDecodeContext::gb
GetBitContext gb
Definition: mjpegdec.h:59
MJpegDecodeContext
Definition: mjpegdec.h:56
MJpegDecodeContext::blocks
int16_t(*[MAX_COMPONENTS] blocks)[64]
intermediate sums (progressive mode)
Definition: mjpegdec.h:117
MJpegDecodeContext::last_dc
int last_dc[MAX_COMPONENTS]
Definition: mjpegdec.h:110
op_pixels_func
void(* op_pixels_func)(uint8_t *block, const uint8_t *pixels, ptrdiff_t line_size, int h)
Average and put pixel Widths can be 16, 8, 4 or 2.
Definition: hpeldsp.h:39
MJpegDecodeContext::mb_height
int mb_height
Definition: mjpegdec.h:95
MJpegDecodeContext::gB
GetByteContext gB
Definition: mjpegdec.h:60
MJpegDecodeContext::near
int near
near lossless bound (si 0 for lossless)
Definition: mjpegdec.h:90
ff_mjpeg_decode_init
int ff_mjpeg_decode_init(AVCodecContext *avctx)
Definition: mjpegdec.c:121
MJpegDecodeContext::width
int width
Definition: mjpegdec.h:94
MJpegDecodeContext::multiscope
int multiscope
Definition: mjpegdec.h:133
MJpegDecodeContext::cs_itu601
int cs_itu601
Definition: mjpegdec.h:131
MJpegDecodeContext::raw_scan_buffer_size
size_t raw_scan_buffer_size
Definition: mjpegdec.h:162
DECLARE_ALIGNED
#define DECLARE_ALIGNED(n, t, v)
Definition: mem_internal.h:104
MJpegDecodeContext::orig_height
int orig_height
Definition: mjpegdec.h:71
MJpegDecodeContext::ac_index
int ac_index[MAX_COMPONENTS]
Definition: mjpegdec.h:103
MJpegDecodeContext::reset
int reset
context halfing interval ?rename
Definition: mjpegdec.h:92
MJpegDecodeContext::restart_count
int restart_count
Definition: mjpegdec.h:128
ff_mjpeg_decode_dht
int ff_mjpeg_decode_dht(MJpegDecodeContext *s)
Definition: mjpegdec.c:247
MJpegDecodeContext::exif_metadata
AVExifMetadata exif_metadata
Definition: mjpegdec.h:144
MJpegDecodeContext::bits
int bits
Definition: mjpegdec.h:84
MJpegDecodeContext::v_scount
int v_scount[MAX_COMPONENTS]
Definition: mjpegdec.h:106
MJpegDecodeContext::rct
int rct
Definition: mjpegdec.h:82
log.h
MJpegDecodeContext::mjpb_skiptosod
int mjpb_skiptosod
Definition: mjpegdec.h:135
MJpegDecodeContext::vlcs
VLC vlcs[3][4]
Definition: mjpegdec.h:68
ff_mjpeg_decode_dqt
int ff_mjpeg_decode_dqt(MJpegDecodeContext *s)
Definition: mjpegdec.c:204
MJpegDecodeContext::bayer
int bayer
Definition: mjpegdec.h:78
MJpegDecodeContext::idsp
IDCTDSPContext idsp
Definition: mjpegdec.h:124
MJpegDecodeContext::rgb
int rgb
Definition: mjpegdec.h:79
MJpegDecodeContext::quant_index
int quant_index[4]
Definition: mjpegdec.h:109
MJpegDecodeContext::qscale
int qscale[4]
quantizer scale calculated from quant_matrixes
Definition: mjpegdec.h:69
exif.h
MJpegDecodeContext::raw_huffman_values
uint8_t raw_huffman_values[2][4][256]
Definition: mjpegdec.h:165
idctdsp.h
avcodec.h
MJpegDecodeContext::raw_scan_buffer
const uint8_t * raw_scan_buffer
Definition: mjpegdec.h:161
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:111
IDCTDSPContext
Definition: idctdsp.h:43
AVCodecContext
main external API structure.
Definition: avcodec.h:439
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:1684
VLC
Definition: vlc.h:50
MJpegDecodeContext::colr
int colr
Definition: mjpegdec.h:85
MJpegDecodeContext::copy_block
op_pixels_func copy_block
only set and used by mxpeg
Definition: mjpegdec.h:125
MJpegDecodeContext::qscale_table
int8_t * qscale_table
Definition: mjpegdec.h:115
MJpegDecodeContext::h_max
int h_max
Definition: mjpegdec.h:108
MJpegDecodeContext::permutated_scantable
uint8_t permutated_scantable[64]
Definition: mjpegdec.h:122
MJpegDecodeContext::stereo3d
AVStereo3D * stereo3d
Definition: mjpegdec.h:146
MJpegDecodeContext::got_picture
int got_picture
we found a SOF and picture is valid, too.
Definition: mjpegdec.h:113
MJpegDecodeContext::maxval
int maxval
Definition: mjpegdec.h:89
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:565
MJpegDecodeContext::iccread
int iccread
Definition: mjpegdec.h:152
MJpegDecodeContext::lossless
int lossless
Definition: mjpegdec.h:75
ICCEntry
Definition: mjpegdec.h:49
bytestream.h
MJpegDecodeContext::raw_huffman_lengths
uint8_t raw_huffman_lengths[2][4][16]
Definition: mjpegdec.h:164
hpeldsp.h
MJpegDecodeContext::upscale_h
uint8_t upscale_h[4]
Definition: mjpegdec.h:80
MAX_COMPONENTS
#define MAX_COMPONENTS
Definition: mjpegdec.h:47
MJpegDecodeContext::raw_image_buffer_size
size_t raw_image_buffer_size
Definition: mjpegdec.h:160
MJpegDecodeContext::coefs_finished
uint64_t coefs_finished[MAX_COMPONENTS]
bitmask of which coefs have been completely decoded (progressive mode)
Definition: mjpegdec.h:119
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:96
MJpegDecodeContext::linesize
int linesize[MAX_COMPONENTS]
linesize << interlaced
Definition: mjpegdec.h:114
MJpegDecodeContext::hwaccel_sw_pix_fmt
enum AVPixelFormat hwaccel_sw_pix_fmt
Definition: mjpegdec.h:167
MJpegDecodeContext::buffer_size
int buffer_size
Definition: mjpegdec.h:64
MJpegDecodeContext::hwaccel_picture_private
void * hwaccel_picture_private
Definition: mjpegdec.h:169