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