Mercurial > libavcodec.hg
annotate mjpegdec.h @ 5310:9aa9197034d7 libavcodec
AC-3 decoder, soc revision 40, Aug 9 00:10:14 2006 UTC by cloud9
More code cleanup.
Window is now runtime generated.
Fixed the bugs in rematrixing routine and
in Decoding AC3 Bitstreams when coupling is in use.
Still struggling to find out what affects the quality of
the produced sound. Can anybody have a look at the
imdct routines do_imdct_256 and do_imdct_512 and tell me
whether it is the correctly implemented as described in
standard.
author | jbr |
---|---|
date | Sat, 14 Jul 2007 15:57:51 +0000 |
parents | f0e079daad30 |
children | 1d83e9c34641 |
rev | line source |
---|---|
5043 | 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 mjpegdec.h | |
26 * MJPEG decoder. | |
27 */ | |
28 | |
29 #ifndef MJPEGDEC_H | |
30 #define MJPEGDEC_H | |
31 | |
32 #include "avcodec.h" | |
5045
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
33 #include "bitstream.h" |
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
34 #include "dsputil.h" |
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
35 #include "mpegvideo.h" |
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
36 |
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
37 #define MAX_COMPONENTS 4 |
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
38 |
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
39 typedef struct MJpegDecodeContext { |
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
40 AVCodecContext *avctx; |
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
41 GetBitContext gb; |
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
42 |
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
43 int start_code; /* current start code */ |
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
44 int buffer_size; |
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
45 uint8_t *buffer; |
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
46 |
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
47 int16_t quant_matrixes[4][64]; |
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
48 VLC vlcs[2][4]; |
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
49 int qscale[4]; ///< quantizer scale calculated from quant_matrixes |
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
50 |
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
51 int org_height; /* size given at codec init */ |
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
52 int first_picture; /* true if decoding first picture */ |
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
53 int interlaced; /* true if interlaced */ |
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
54 int bottom_field; /* true if bottom field */ |
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
55 int lossless; |
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
56 int ls; |
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
57 int progressive; |
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
58 int rgb; |
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
59 int rct; /* standard rct */ |
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
60 int pegasus_rct; /* pegasus reversible colorspace transform */ |
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
61 int bits; /* bits per component */ |
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
62 |
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
63 int maxval; |
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
64 int near; ///< near lossless bound (si 0 for lossless) |
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
65 int t1,t2,t3; |
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
66 int reset; ///< context halfing intervall ?rename |
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
67 |
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
68 int width, height; |
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
69 int mb_width, mb_height; |
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
70 int nb_components; |
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
71 int component_id[MAX_COMPONENTS]; |
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
72 int h_count[MAX_COMPONENTS]; /* horizontal and vertical count for each component */ |
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
73 int v_count[MAX_COMPONENTS]; |
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
74 int comp_index[MAX_COMPONENTS]; |
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
75 int dc_index[MAX_COMPONENTS]; |
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
76 int ac_index[MAX_COMPONENTS]; |
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
77 int nb_blocks[MAX_COMPONENTS]; |
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
78 int h_scount[MAX_COMPONENTS]; |
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
79 int v_scount[MAX_COMPONENTS]; |
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
80 int h_max, v_max; /* maximum h and v counts */ |
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
81 int quant_index[4]; /* quant table index for each component */ |
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
82 int last_dc[MAX_COMPONENTS]; /* last DEQUANTIZED dc (XXX: am I right to do that ?) */ |
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
83 AVFrame picture; /* picture structure */ |
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
84 int linesize[MAX_COMPONENTS]; ///< linesize << interlaced |
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
85 int8_t *qscale_table; |
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
86 DECLARE_ALIGNED_8(DCTELEM, block[64]); |
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
87 ScanTable scantable; |
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
88 DSPContext dsp; |
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
89 |
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
90 int restart_interval; |
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
91 int restart_count; |
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
92 |
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
93 int buggy_avid; |
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
94 int cs_itu601; |
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
95 int interlace_polarity; |
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
96 |
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
97 int mjpb_skiptosod; |
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
98 |
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
99 int cur_scan; /* current scan, used by JPEG-LS */ |
f0e079daad30
move MJpegDecodeContext declaration from mjpeg.h to mjpegdec.h
aurel
parents:
5044
diff
changeset
|
100 } MJpegDecodeContext; |
5043 | 101 |
102 int ff_mjpeg_decode_init(AVCodecContext *avctx); | |
103 int ff_mjpeg_decode_end(AVCodecContext *avctx); | |
104 int ff_mjpeg_decode_frame(AVCodecContext *avctx, | |
105 void *data, int *data_size, | |
106 uint8_t *buf, int buf_size); | |
5044 | 107 int ff_mjpeg_decode_dqt(MJpegDecodeContext *s); |
108 int ff_mjpeg_decode_dht(MJpegDecodeContext *s); | |
109 int ff_mjpeg_decode_sof(MJpegDecodeContext *s); | |
110 int ff_mjpeg_decode_sos(MJpegDecodeContext *s); | |
5043 | 111 |
112 #endif /* MJPEGDEC_H */ |