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:71
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:2374
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:389
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:2928
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:2240
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:2938
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
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:75
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:102
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
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:108
IDCTDSPContext
Definition: idctdsp.h:43
AVCodecContext
main external API structure.
Definition: avcodec.h:451
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:1671
VLC
Definition: vlc.h:36
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:516
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:203
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