FFmpeg
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
Examples
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
libavcodec
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
34
#include "
avcodec.h
"
35
#include "
get_bits.h
"
36
#include "
dsputil.h
"
37
#include "
hpeldsp.h
"
38
39
#define MAX_COMPONENTS 4
40
41
typedef
struct
MJpegDecodeContext
{
42
AVClass
*
class
;
43
AVCodecContext
*
avctx
;
44
GetBitContext
gb
;
45
46
int
start_code
;
/* current start code */
47
int
buffer_size
;
48
uint8_t
*
buffer
;
49
50
int16_t
quant_matrixes
[4][64];
51
VLC
vlcs
[3][4];
52
int
qscale
[4];
///< quantizer scale calculated from quant_matrixes
53
54
int
org_height
;
/* size given at codec init */
55
int
first_picture
;
/* true if decoding first picture */
56
int
interlaced
;
/* true if interlaced */
57
int
bottom_field
;
/* true if bottom field */
58
int
lossless
;
59
int
ls
;
60
int
progressive
;
61
int
rgb
;
62
int
upscale_h
;
63
int
chroma_height
;
64
int
upscale_v
;
65
int
rct
;
/* standard rct */
66
int
pegasus_rct
;
/* pegasus reversible colorspace transform */
67
int
bits
;
/* bits per component */
68
int
colr
;
69
int
xfrm
;
70
71
int
maxval
;
72
int
near
;
///< near lossless bound (si 0 for lossless)
73
int
t1
,
t2
,
t3
;
74
int
reset
;
///< context halfing interval ?rename
75
76
int
width
,
height
;
77
int
mb_width
,
mb_height
;
78
int
nb_components
;
79
int
block_stride
[
MAX_COMPONENTS
];
80
int
component_id
[
MAX_COMPONENTS
];
81
int
h_count
[
MAX_COMPONENTS
];
/* horizontal and vertical count for each component */
82
int
v_count
[
MAX_COMPONENTS
];
83
int
comp_index
[
MAX_COMPONENTS
];
84
int
dc_index
[
MAX_COMPONENTS
];
85
int
ac_index
[
MAX_COMPONENTS
];
86
int
nb_blocks
[
MAX_COMPONENTS
];
87
int
h_scount
[
MAX_COMPONENTS
];
88
int
v_scount
[
MAX_COMPONENTS
];
89
int
quant_sindex
[
MAX_COMPONENTS
];
90
int
h_max
,
v_max
;
/* maximum h and v counts */
91
int
quant_index
[4];
/* quant table index for each component */
92
int
last_dc
[
MAX_COMPONENTS
];
/* last DEQUANTIZED dc (XXX: am I right to do that ?) */
93
AVFrame
*
picture
;
/* picture structure */
94
AVFrame
*
picture_ptr
;
/* pointer to picture structure */
95
int
got_picture
;
///< we found a SOF and picture is valid, too.
96
int
linesize
[
MAX_COMPONENTS
];
///< linesize << interlaced
97
int8_t *
qscale_table
;
98
DECLARE_ALIGNED
(16, int16_t,
block
)[64];
99
int16_t (*
blocks
[
MAX_COMPONENTS
])[64];
///< intermediate sums (progressive mode)
100
uint8_t
*
last_nnz
[
MAX_COMPONENTS
];
101
uint64_t
coefs_finished
[
MAX_COMPONENTS
];
///< bitmask of which coefs have been completely decoded (progressive mode)
102
ScanTable
scantable
;
103
DSPContext
dsp
;
104
HpelDSPContext
hdsp
;
105
106
int
restart_interval
;
107
int
restart_count
;
108
109
int
buggy_avid
;
110
int
cs_itu601
;
111
int
interlace_polarity
;
112
113
int
mjpb_skiptosod
;
114
115
int
cur_scan
;
/* current scan, used by JPEG-LS */
116
int
flipped
;
/* true if picture is flipped */
117
118
uint16_t (*
ljpeg_buffer
)[4];
119
unsigned
int
ljpeg_buffer_size
;
120
121
int
extern_huff
;
122
AVDictionary
*
exif_metadata
;
123
}
MJpegDecodeContext
;
124
125
int
ff_mjpeg_decode_init
(
AVCodecContext
*avctx);
126
int
ff_mjpeg_decode_end
(
AVCodecContext
*avctx);
127
int
ff_mjpeg_decode_frame
(
AVCodecContext
*avctx,
128
void
*
data
,
int
*got_frame,
129
AVPacket
*avpkt);
130
int
ff_mjpeg_decode_dqt
(
MJpegDecodeContext
*
s
);
131
int
ff_mjpeg_decode_dht
(
MJpegDecodeContext
*
s
);
132
int
ff_mjpeg_decode_sof
(
MJpegDecodeContext
*
s
);
133
int
ff_mjpeg_decode_sos
(
MJpegDecodeContext
*
s
,
134
const
uint8_t
*mb_bitmask,
const
AVFrame
*reference);
135
int
ff_mjpeg_find_marker
(
MJpegDecodeContext
*
s
,
136
const
uint8_t
**buf_ptr,
const
uint8_t
*buf_end,
137
const
uint8_t
**unescaped_buf_ptr,
int
*unescaped_buf_size);
138
139
#endif
/* AVCODEC_MJPEGDEC_H */
Generated on Sat Jan 25 2014 19:51:51 for FFmpeg by
1.8.2