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