ffmpeg / libavcodec / mjpegdec.h @ f16055ee
History  View  Annotate  Download (4.27 KB)
1 
/*


2 
* MJPEG decoder

3 
* Copyright (c) 2000, 2001 Fabrice Bellard

4 
* Copyright (c) 2003 Alex Beregszaszi

5 
* Copyright (c) 20032004 Michael Niedermayer

6 
*

7 
* This file is part of Libav.

8 
*

9 
* Libav 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 
* Libav 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 Libav; if not, write to the Free Software

21 
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 021101301 USA

22 
*/

23  
24 
/**

25 
* @file

26 
* MJPEG decoder.

27 
*/

28  
29 
#ifndef AVCODEC_MJPEGDEC_H

30 
#define AVCODEC_MJPEGDEC_H

31  
32 
#include "avcodec.h" 
33 
#include "get_bits.h" 
34 
#include "dsputil.h" 
35  
36 
#define MAX_COMPONENTS 4 
37  
38 
typedef struct MJpegDecodeContext { 
39 
AVCodecContext *avctx; 
40 
GetBitContext gb; 
41  
42 
int start_code; /* current start code */ 
43 
int buffer_size;

44 
uint8_t *buffer; 
45  
46 
int16_t quant_matrixes[4][64]; 
47 
VLC vlcs[3][4]; 
48 
int qscale[4]; ///< quantizer scale calculated from quant_matrixes 
49  
50 
int org_height; /* size given at codec init */ 
51 
int first_picture; /* true if decoding first picture */ 
52 
int interlaced; /* true if interlaced */ 
53 
int bottom_field; /* true if bottom field */ 
54 
int lossless;

55 
int ls;

56 
int progressive;

57 
int rgb;

58 
int rct; /* standard rct */ 
59 
int pegasus_rct; /* pegasus reversible colorspace transform */ 
60 
int bits; /* bits per component */ 
61  
62 
int maxval;

63 
int near; ///< near lossless bound (si 0 for lossless) 
64 
int t1,t2,t3;

65 
int reset; ///< context halfing intervall ?rename 
66  
67 
int width, height;

68 
int mb_width, mb_height;

69 
int nb_components;

70 
int block_stride[MAX_COMPONENTS];

71 
int component_id[MAX_COMPONENTS];

72 
int h_count[MAX_COMPONENTS]; /* horizontal and vertical count for each component */ 
73 
int v_count[MAX_COMPONENTS];

74 
int comp_index[MAX_COMPONENTS];

75 
int dc_index[MAX_COMPONENTS];

76 
int ac_index[MAX_COMPONENTS];

77 
int nb_blocks[MAX_COMPONENTS];

78 
int h_scount[MAX_COMPONENTS];

79 
int v_scount[MAX_COMPONENTS];

80 
int h_max, v_max; /* maximum h and v counts */ 
81 
int quant_index[4]; /* quant table index for each component */ 
82 
int last_dc[MAX_COMPONENTS]; /* last DEQUANTIZED dc (XXX: am I right to do that ?) */ 
83 
AVFrame picture; /* picture structure */

84 
int got_picture; ///< we found a SOF and picture is valid, too. 
85 
int linesize[MAX_COMPONENTS]; ///< linesize << interlaced 
86 
int8_t *qscale_table; 
87 
DECLARE_ALIGNED(16, DCTELEM, block)[64]; 
88 
DCTELEM (*blocks[MAX_COMPONENTS])[64]; ///< intermediate sums (progressive mode) 
89 
uint8_t *last_nnz[MAX_COMPONENTS]; 
90 
uint64_t coefs_finished[MAX_COMPONENTS]; ///< bitmask of which coefs have been completely decoded (progressive mode)

91 
ScanTable scantable; 
92 
DSPContext dsp; 
93  
94 
int restart_interval;

95 
int restart_count;

96  
97 
int buggy_avid;

98 
int cs_itu601;

99 
int interlace_polarity;

100  
101 
int mjpb_skiptosod;

102  
103 
int cur_scan; /* current scan, used by JPEGLS */ 
104 
int flipped; /* true if picture is flipped */ 
105  
106 
uint16_t (*ljpeg_buffer)[4];

107 
unsigned int ljpeg_buffer_size; 
108 
} MJpegDecodeContext; 
109  
110 
int ff_mjpeg_decode_init(AVCodecContext *avctx);

111 
int ff_mjpeg_decode_end(AVCodecContext *avctx);

112 
int ff_mjpeg_decode_frame(AVCodecContext *avctx,

113 
void *data, int *data_size, 
114 
AVPacket *avpkt); 
115 
int ff_mjpeg_decode_dqt(MJpegDecodeContext *s);

116 
int ff_mjpeg_decode_dht(MJpegDecodeContext *s);

117 
int ff_mjpeg_decode_sof(MJpegDecodeContext *s);

118 
int ff_mjpeg_decode_sos(MJpegDecodeContext *s,

119 
const uint8_t *mb_bitmask, const AVFrame *reference); 
120 
int ff_mjpeg_find_marker(MJpegDecodeContext *s,

121 
const uint8_t **buf_ptr, const uint8_t *buf_end, 
122 
const uint8_t **unescaped_buf_ptr, int *unescaped_buf_size); 
123  
124 
#endif /* AVCODEC_MJPEGDEC_H */ 