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;
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;
92  int mb_width, mb_height;
94  int block_stride[MAX_COMPONENTS];
95  int component_id[MAX_COMPONENTS];
96  int h_count[MAX_COMPONENTS]; /* horizontal and vertical count for each component */
97  int v_count[MAX_COMPONENTS];
98  int comp_index[MAX_COMPONENTS];
99  int dc_index[MAX_COMPONENTS];
100  int ac_index[MAX_COMPONENTS];
101  int nb_blocks[MAX_COMPONENTS];
102  int h_scount[MAX_COMPONENTS];
103  int v_scount[MAX_COMPONENTS];
104  int quant_sindex[MAX_COMPONENTS];
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 
160  uint8_t raw_huffman_lengths[2][4][16];
161  uint8_t raw_huffman_values[2][4][256];
162 
163  enum AVPixelFormat hwaccel_sw_pix_fmt;
164  enum AVPixelFormat hwaccel_pix_fmt;
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 */
int ff_mjpeg_decode_sos(MJpegDecodeContext *s, const uint8_t *mb_bitmask, int mb_bitmask_size, const AVFrame *reference)
Definition: mjpegdec.c:1625
const AVPixFmtDescriptor * pix_desc
!< stereoscopic information (cached, since it is read before frame allocation)
Definition: mjpegdec.h:144
This structure describes decoded (raw) audio or video data.
Definition: frame.h:318
size_t raw_image_buffer_size
Definition: mjpegdec.h:156
BlockDSPContext bdsp
Definition: mjpegdec.h:119
Scantable.
Definition: idctdsp.h:31
int ff_sp5x_process_packet(AVCodecContext *avctx, AVPacket *avpkt)
Definition: sp5xdec.c:33
uint8_t * buffer
Definition: mjpegdec.h:62
AVPacket * pkt
Definition: mjpegdec.h:58
int ff_mjpeg_build_vlc(VLC *vlc, const uint8_t *bits_table, const uint8_t *val_table, int is_ac, void *logctx)
int ff_mjpeg_decode_init(AVCodecContext *avctx)
Definition: mjpegdec.c:117
uint8_t * data
Definition: mjpegdec.h:48
HpelDSPContext hdsp
Definition: mjpegdec.h:120
const uint8_t * raw_image_buffer
Definition: mjpegdec.h:155
The exact code depends on how similar the blocks are and how related they are to the block
uint8_t
Stereo 3D type: this structure describes how two videos are packed within a single video surface...
Definition: stereo3d.h:176
unsigned int ljpeg_buffer_size
Definition: mjpegdec.h:137
AVFrame * picture_ptr
Definition: mjpegdec.h:109
#define DECLARE_ALIGNED(n, t, v)
Declare a variable that is aligned in memory.
Definition: mem.h:117
#define height
#define MAX_COMPONENTS
Definition: mjpegdec.h:45
bitstream reader API header.
int ff_mjpeg_decode_dqt(MJpegDecodeContext *s)
Definition: mjpegdec.c:195
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:2195
AVDictionary * exif_metadata
Definition: mjpegdec.h:140
#define t1
Definition: regdef.h:29
int ff_mjpeg_decode_sof(MJpegDecodeContext *s)
Definition: mjpegdec.c:297
Definition: vlc.h:26
ScanTable scantable
Definition: mjpegdec.h:118
Half-pel DSP context.
Definition: hpeldsp.h:45
AVFrame * smv_frame
Definition: mjpegdec.h:150
int near
near lossless bound (si 0 for lossless)
Definition: mjpegdec.h:87
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
#define s(width, name)
Definition: cbs_vp9.c:257
GetBitContext gb
Definition: mjpegdec.h:55
int ff_mjpeg_decode_dht(MJpegDecodeContext *s)
Definition: mjpegdec.c:236
IDCTDSPContext idsp
Definition: mjpegdec.h:121
Half-pel DSP functions.
Libavcodec external API header.
Descriptor that unambiguously describes how the bits of a pixel are stored in the up to 4 data planes...
Definition: pixdesc.h:81
AVStereo3D * stereo3d
Definition: mjpegdec.h:142
main external API structure.
Definition: avcodec.h:536
int8_t * qscale_table
Definition: mjpegdec.h:112
int length
Definition: mjpegdec.h:49
Describe the class of an AVClass context structure.
Definition: log.h:67
int reset
context halfing interval ?rename
Definition: mjpegdec.h:89
size_t raw_scan_buffer_size
Definition: mjpegdec.h:158
ICCEntry * iccentries
Definition: mjpegdec.h:146
Stereoscopic video.
const uint8_t * raw_scan_buffer
Definition: mjpegdec.h:157
int ff_mjpeg_receive_frame(AVCodecContext *avctx, AVFrame *frame)
Definition: mjpegdec.c:2389
AVCodecContext * avctx
Definition: mjpegdec.h:54
int got_picture
we found a SOF and picture is valid, too.
Definition: mjpegdec.h:110
AVFrame * picture
Definition: mjpegdec.h:108
void * hwaccel_picture_private
Definition: mjpegdec.h:165
int ff_mjpeg_decode_end(AVCodecContext *avctx)
Definition: mjpegdec.c:2882
AVPixelFormat
Pixel format.
Definition: pixfmt.h:64
This structure stores compressed data.
Definition: packet.h:346
#define t2
Definition: regdef.h:30