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 {
49  int length;
50 } ICCEntry;
51 
52 typedef struct MJpegDecodeContext {
53  AVClass *class;
56  int buf_size;
57 
59 
60  int start_code; /* current start code */
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;
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)
122 
125 
130 
132 
133  int cur_scan; /* current scan, used by JPEG-LS */
134  int flipped; /* true if picture is flipped */
135 
136  uint16_t (*ljpeg_buffer)[4];
137  unsigned int ljpeg_buffer_size;
138 
141 
142  AVStereo3D *stereo3d; ///!< stereoscopic information (cached, since it is read before frame allocation)
143 
145 
147  int iccnum;
148  int iccread;
149 
153 
154  // Raw stream data for hwaccel use.
159 
162 
167 
168 int ff_mjpeg_build_vlc(VLC *vlc, const uint8_t *bits_table,
169  const uint8_t *val_table, int is_ac, void *logctx);
177  const uint8_t *mb_bitmask,int mb_bitmask_size,
178  const AVFrame *reference);
180  const uint8_t **buf_ptr, const uint8_t *buf_end,
181  const uint8_t **unescaped_buf_ptr, int *unescaped_buf_size);
182 
184 
185 #endif /* AVCODEC_MJPEGDEC_H */
AVPixelFormat
AVPixelFormat
Pixel format.
Definition: pixfmt.h:64
MJpegDecodeContext::avctx
AVCodecContext * avctx
Definition: mjpegdec.h:54
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:126
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:297
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:152
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:318
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:119
MJpegDecodeContext::pkt
AVPacket * pkt
Definition: mjpegdec.h:58
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:128
MJpegDecodeContext::flipped
int flipped
Definition: mjpegdec.h:134
AVDictionary
Definition: dict.c:30
MJpegDecodeContext::adobe_transform
int adobe_transform
Definition: mjpegdec.h:84
BlockDSPContext
Definition: blockdsp.h:35
MJpegDecodeContext::pix_desc
const AVPixFmtDescriptor * pix_desc
!< stereoscopic information (cached, since it is read before frame allocation)
Definition: mjpegdec.h:144
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:2197
MJpegDecodeContext::iccnum
int iccnum
Definition: mjpegdec.h:147
MJpegDecodeContext::h_count
int h_count[MAX_COMPONENTS]
Definition: mjpegdec.h:96
MJpegDecodeContext::extern_huff
int extern_huff
Definition: mjpegdec.h:139
MJpegDecodeContext::smv_frames_per_jpeg
int smv_frames_per_jpeg
Definition: mjpegdec.h:151
MJpegDecodeContext::dc_index
int dc_index[MAX_COMPONENTS]
Definition: mjpegdec.h:99
GetBitContext
Definition: get_bits.h:61
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:2884
ff_sp5x_process_packet
int ff_sp5x_process_packet(AVCodecContext *avctx, AVPacket *avpkt)
Definition: sp5xdec.c:33
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:133
MJpegDecodeContext::raw_image_buffer
const uint8_t * raw_image_buffer
Definition: mjpegdec.h:155
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:257
MJpegDecodeContext::ljpeg_buffer
uint16_t(* ljpeg_buffer)[4]
Definition: mjpegdec.h:136
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:150
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:137
MJpegDecodeContext::iccentries
ICCEntry * iccentries
Definition: mjpegdec.h:146
AVClass
Describe the class of an AVClass context structure.
Definition: log.h:67
MJpegDecodeContext::hwaccel_pix_fmt
enum AVPixelFormat hwaccel_pix_fmt
Definition: mjpegdec.h:164
MJpegDecodeContext::v_max
int v_max
Definition: mjpegdec.h:105
MJpegDecodeContext::buf_size
int buf_size
Definition: mjpegdec.h:56
MJpegDecodeContext::exif_metadata
AVDictionary * exif_metadata
Definition: mjpegdec.h:140
MJpegDecodeContext::restart_interval
int restart_interval
Definition: mjpegdec.h:123
MJpegDecodeContext::gb
GetBitContext gb
Definition: mjpegdec.h:55
MJpegDecodeContext::scantable
ScanTable scantable
Definition: mjpegdec.h:118
MJpegDecodeContext
Definition: mjpegdec.h:52
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:117
MJpegDecodeContext::width
int width
Definition: mjpegdec.h:91
HpelDSPContext
Half-pel DSP context.
Definition: hpeldsp.h:45
MJpegDecodeContext::multiscope
int multiscope
Definition: mjpegdec.h:129
MJpegDecodeContext::cs_itu601
int cs_itu601
Definition: mjpegdec.h:127
MJpegDecodeContext::raw_scan_buffer_size
size_t raw_scan_buffer_size
Definition: mjpegdec.h:158
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:124
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:2391
MJpegDecodeContext::bits
int bits
Definition: mjpegdec.h:81
DECLARE_ALIGNED
#define DECLARE_ALIGNED(n, t, v)
Definition: mem.h:117
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:131
MJpegDecodeContext::vlcs
VLC vlcs[3][4]
Definition: mjpegdec.h:65
ff_mjpeg_decode_dqt
int ff_mjpeg_decode_dqt(MJpegDecodeContext *s)
Definition: mjpegdec.c:195
MJpegDecodeContext::bayer
int bayer
Definition: mjpegdec.h:75
uint8_t
uint8_t
Definition: audio_convert.c:194
MJpegDecodeContext::idsp
IDCTDSPContext idsp
Definition: mjpegdec.h:121
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:161
idctdsp.h
avcodec.h
MJpegDecodeContext::raw_scan_buffer
const uint8_t * raw_scan_buffer
Definition: mjpegdec.h:157
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:53
AVCodecContext
main external API structure.
Definition: avcodec.h:536
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:1627
VLC
Definition: vlc.h:26
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::stereo3d
AVStereo3D * stereo3d
Definition: mjpegdec.h:142
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:81
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:346
MJpegDecodeContext::iccread
int iccread
Definition: mjpegdec.h:148
MJpegDecodeContext::lossless
int lossless
Definition: mjpegdec.h:72
ICCEntry
Definition: mjpegdec.h:47
MJpegDecodeContext::hdsp
HpelDSPContext hdsp
Definition: mjpegdec.h:120
MJpegDecodeContext::raw_huffman_lengths
uint8_t raw_huffman_lengths[2][4][16]
Definition: mjpegdec.h:160
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:156
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:176
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:163
MJpegDecodeContext::buffer_size
int buffer_size
Definition: mjpegdec.h:61
MJpegDecodeContext::hwaccel_picture_private
void * hwaccel_picture_private
Definition: mjpegdec.h:165