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