annotate mjpeg.c @ 6920:d02af7474bff libavcodec

Prevent 128*1<<trellis from becoming 0 and creating 0 sized arrays. fixes CID84 RUN2 CID85 RUN2 CID86 RUN2 CID87 RUN2 CID88 RUN2 CID89 RUN2 CID90 RUN2 CID91 RUN2 CID92 RUN2 CID93 RUN2 CID94 RUN2 CID95 RUN2 CID96 RUN2 CID97 RUN2 CID98 RUN2 CID99 RUN2 CID100 RUN2 CID101 RUN2 CID102 RUN2 CID103 RUN2 CID104 RUN2 CID105 RUN2 CID106 RUN2
author michael
date Wed, 28 May 2008 11:59:41 +0000
parents 470601203f44
children 7a73d76aaaa0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
1 /*
23
1e131bc21101 added MJPEG decoder, renamed mjpegenc.c to mjpeg.c
glantau
parents: 0
diff changeset
2 * MJPEG encoder and decoder
427
c058624083e1 fixed incorrect buffer handling
glantau
parents: 396
diff changeset
3 * Copyright (c) 2000, 2001 Fabrice Bellard.
2181
3b84b5fea968 new copyrights
alex
parents: 2173
diff changeset
4 * Copyright (c) 2003 Alex Beregszaszi
3b84b5fea968 new copyrights
alex
parents: 2173
diff changeset
5 * Copyright (c) 2003-2004 Michael Niedermayer
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
6 *
5214
470601203f44 Group all copyright and author notices together.
diego
parents: 5021
diff changeset
7 * Support for external huffman table, various fixes (AVID workaround),
470601203f44 Group all copyright and author notices together.
diego
parents: 5021
diff changeset
8 * aspecting, new decode_frame mechanism and apple mjpeg-b support
470601203f44 Group all copyright and author notices together.
diego
parents: 5021
diff changeset
9 * by Alex Beregszaszi
470601203f44 Group all copyright and author notices together.
diego
parents: 5021
diff changeset
10 *
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3929
diff changeset
11 * This file is part of FFmpeg.
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3929
diff changeset
12 *
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3929
diff changeset
13 * FFmpeg is free software; you can redistribute it and/or
427
c058624083e1 fixed incorrect buffer handling
glantau
parents: 396
diff changeset
14 * modify it under the terms of the GNU Lesser General Public
c058624083e1 fixed incorrect buffer handling
glantau
parents: 396
diff changeset
15 * License as published by the Free Software Foundation; either
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3929
diff changeset
16 * version 2.1 of the License, or (at your option) any later version.
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
17 *
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3929
diff changeset
18 * FFmpeg is distributed in the hope that it will be useful,
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
427
c058624083e1 fixed incorrect buffer handling
glantau
parents: 396
diff changeset
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
c058624083e1 fixed incorrect buffer handling
glantau
parents: 396
diff changeset
21 * Lesser General Public License for more details.
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
22 *
427
c058624083e1 fixed incorrect buffer handling
glantau
parents: 396
diff changeset
23 * You should have received a copy of the GNU Lesser General Public
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3929
diff changeset
24 * License along with FFmpeg; if not, write to the Free Software
3036
0b546eab515d Update licensing information: The FSF changed postal address.
diego
parents: 2979
diff changeset
25 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
26 */
1106
1e39f273ecd6 per file doxy
michaelni
parents: 1092
diff changeset
27
1e39f273ecd6 per file doxy
michaelni
parents: 1092
diff changeset
28 /**
1e39f273ecd6 per file doxy
michaelni
parents: 1092
diff changeset
29 * @file mjpeg.c
1e39f273ecd6 per file doxy
michaelni
parents: 1092
diff changeset
30 * MJPEG encoder and decoder.
1e39f273ecd6 per file doxy
michaelni
parents: 1092
diff changeset
31 */
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2885
diff changeset
32
5003
ddb28de352bb split jpeg_ls into jpeglsdec, jpeglsenc and jpegls
aurel
parents: 4994
diff changeset
33 #include "mjpeg.h"
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
34
986e461dc072 Initial revision
glantau
parents:
diff changeset
35
986e461dc072 Initial revision
glantau
parents:
diff changeset
36 #if 0
986e461dc072 Initial revision
glantau
parents:
diff changeset
37 /* These are the sample quantization tables given in JPEG spec section K.1.
986e461dc072 Initial revision
glantau
parents:
diff changeset
38 * The spec says that the values given produce "good" quality, and
986e461dc072 Initial revision
glantau
parents:
diff changeset
39 * when divided by 2, "very good" quality.
986e461dc072 Initial revision
glantau
parents:
diff changeset
40 */
5020
eb0ad6423405 split mjpeg.c into an encoder and a decoder file
aurel
parents: 5005
diff changeset
41 const unsigned char std_luminance_quant_tbl[64] = {
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
42 16, 11, 10, 16, 24, 40, 51, 61,
986e461dc072 Initial revision
glantau
parents:
diff changeset
43 12, 12, 14, 19, 26, 58, 60, 55,
986e461dc072 Initial revision
glantau
parents:
diff changeset
44 14, 13, 16, 24, 40, 57, 69, 56,
986e461dc072 Initial revision
glantau
parents:
diff changeset
45 14, 17, 22, 29, 51, 87, 80, 62,
986e461dc072 Initial revision
glantau
parents:
diff changeset
46 18, 22, 37, 56, 68, 109, 103, 77,
986e461dc072 Initial revision
glantau
parents:
diff changeset
47 24, 35, 55, 64, 81, 104, 113, 92,
986e461dc072 Initial revision
glantau
parents:
diff changeset
48 49, 64, 78, 87, 103, 121, 120, 101,
986e461dc072 Initial revision
glantau
parents:
diff changeset
49 72, 92, 95, 98, 112, 100, 103, 99
986e461dc072 Initial revision
glantau
parents:
diff changeset
50 };
5020
eb0ad6423405 split mjpeg.c into an encoder and a decoder file
aurel
parents: 5005
diff changeset
51 const unsigned char std_chrominance_quant_tbl[64] = {
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
52 17, 18, 24, 47, 99, 99, 99, 99,
986e461dc072 Initial revision
glantau
parents:
diff changeset
53 18, 21, 26, 66, 99, 99, 99, 99,
986e461dc072 Initial revision
glantau
parents:
diff changeset
54 24, 26, 56, 99, 99, 99, 99, 99,
986e461dc072 Initial revision
glantau
parents:
diff changeset
55 47, 66, 99, 99, 99, 99, 99, 99,
986e461dc072 Initial revision
glantau
parents:
diff changeset
56 99, 99, 99, 99, 99, 99, 99, 99,
986e461dc072 Initial revision
glantau
parents:
diff changeset
57 99, 99, 99, 99, 99, 99, 99, 99,
986e461dc072 Initial revision
glantau
parents:
diff changeset
58 99, 99, 99, 99, 99, 99, 99, 99,
986e461dc072 Initial revision
glantau
parents:
diff changeset
59 99, 99, 99, 99, 99, 99, 99, 99
986e461dc072 Initial revision
glantau
parents:
diff changeset
60 };
986e461dc072 Initial revision
glantau
parents:
diff changeset
61 #endif
986e461dc072 Initial revision
glantau
parents:
diff changeset
62
986e461dc072 Initial revision
glantau
parents:
diff changeset
63 /* Set up the standard Huffman tables (cf. JPEG standard section K.3) */
986e461dc072 Initial revision
glantau
parents:
diff changeset
64 /* IMPORTANT: these are only valid for 8-bit data precision! */
5021
d73237575709 add proper prefix to new mjpeg extern func/var
aurel
parents: 5020
diff changeset
65 const uint8_t ff_mjpeg_bits_dc_luminance[17] =
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
66 { /* 0-base */ 0, 0, 1, 5, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 };
5021
d73237575709 add proper prefix to new mjpeg extern func/var
aurel
parents: 5020
diff changeset
67 const uint8_t ff_mjpeg_val_dc_luminance[] =
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
68 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
986e461dc072 Initial revision
glantau
parents:
diff changeset
69
5021
d73237575709 add proper prefix to new mjpeg extern func/var
aurel
parents: 5020
diff changeset
70 const uint8_t ff_mjpeg_bits_dc_chrominance[17] =
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
71 { /* 0-base */ 0, 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0 };
5021
d73237575709 add proper prefix to new mjpeg extern func/var
aurel
parents: 5020
diff changeset
72 const uint8_t ff_mjpeg_val_dc_chrominance[] =
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
73 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
986e461dc072 Initial revision
glantau
parents:
diff changeset
74
5021
d73237575709 add proper prefix to new mjpeg extern func/var
aurel
parents: 5020
diff changeset
75 const uint8_t ff_mjpeg_bits_ac_luminance[17] =
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
76 { /* 0-base */ 0, 0, 2, 1, 3, 3, 2, 4, 3, 5, 5, 4, 4, 0, 0, 1, 0x7d };
5021
d73237575709 add proper prefix to new mjpeg extern func/var
aurel
parents: 5020
diff changeset
77 const uint8_t ff_mjpeg_val_ac_luminance[] =
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
78 { 0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12,
986e461dc072 Initial revision
glantau
parents:
diff changeset
79 0x21, 0x31, 0x41, 0x06, 0x13, 0x51, 0x61, 0x07,
986e461dc072 Initial revision
glantau
parents:
diff changeset
80 0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xa1, 0x08,
986e461dc072 Initial revision
glantau
parents:
diff changeset
81 0x23, 0x42, 0xb1, 0xc1, 0x15, 0x52, 0xd1, 0xf0,
986e461dc072 Initial revision
glantau
parents:
diff changeset
82 0x24, 0x33, 0x62, 0x72, 0x82, 0x09, 0x0a, 0x16,
986e461dc072 Initial revision
glantau
parents:
diff changeset
83 0x17, 0x18, 0x19, 0x1a, 0x25, 0x26, 0x27, 0x28,
986e461dc072 Initial revision
glantau
parents:
diff changeset
84 0x29, 0x2a, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39,
986e461dc072 Initial revision
glantau
parents:
diff changeset
85 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49,
986e461dc072 Initial revision
glantau
parents:
diff changeset
86 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59,
986e461dc072 Initial revision
glantau
parents:
diff changeset
87 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69,
986e461dc072 Initial revision
glantau
parents:
diff changeset
88 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79,
986e461dc072 Initial revision
glantau
parents:
diff changeset
89 0x7a, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89,
986e461dc072 Initial revision
glantau
parents:
diff changeset
90 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98,
986e461dc072 Initial revision
glantau
parents:
diff changeset
91 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
986e461dc072 Initial revision
glantau
parents:
diff changeset
92 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6,
986e461dc072 Initial revision
glantau
parents:
diff changeset
93 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5,
986e461dc072 Initial revision
glantau
parents:
diff changeset
94 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4,
986e461dc072 Initial revision
glantau
parents:
diff changeset
95 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe1, 0xe2,
986e461dc072 Initial revision
glantau
parents:
diff changeset
96 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea,
986e461dc072 Initial revision
glantau
parents:
diff changeset
97 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2885
diff changeset
98 0xf9, 0xfa
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
99 };
986e461dc072 Initial revision
glantau
parents:
diff changeset
100
5021
d73237575709 add proper prefix to new mjpeg extern func/var
aurel
parents: 5020
diff changeset
101 const uint8_t ff_mjpeg_bits_ac_chrominance[17] =
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
102 { /* 0-base */ 0, 0, 2, 1, 2, 4, 4, 3, 4, 7, 5, 4, 4, 0, 1, 2, 0x77 };
986e461dc072 Initial revision
glantau
parents:
diff changeset
103
5021
d73237575709 add proper prefix to new mjpeg extern func/var
aurel
parents: 5020
diff changeset
104 const uint8_t ff_mjpeg_val_ac_chrominance[] =
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
105 { 0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21,
986e461dc072 Initial revision
glantau
parents:
diff changeset
106 0x31, 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71,
986e461dc072 Initial revision
glantau
parents:
diff changeset
107 0x13, 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, 0x91,
986e461dc072 Initial revision
glantau
parents:
diff changeset
108 0xa1, 0xb1, 0xc1, 0x09, 0x23, 0x33, 0x52, 0xf0,
986e461dc072 Initial revision
glantau
parents:
diff changeset
109 0x15, 0x62, 0x72, 0xd1, 0x0a, 0x16, 0x24, 0x34,
986e461dc072 Initial revision
glantau
parents:
diff changeset
110 0xe1, 0x25, 0xf1, 0x17, 0x18, 0x19, 0x1a, 0x26,
986e461dc072 Initial revision
glantau
parents:
diff changeset
111 0x27, 0x28, 0x29, 0x2a, 0x35, 0x36, 0x37, 0x38,
986e461dc072 Initial revision
glantau
parents:
diff changeset
112 0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,
986e461dc072 Initial revision
glantau
parents:
diff changeset
113 0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
986e461dc072 Initial revision
glantau
parents:
diff changeset
114 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
986e461dc072 Initial revision
glantau
parents:
diff changeset
115 0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
986e461dc072 Initial revision
glantau
parents:
diff changeset
116 0x79, 0x7a, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
986e461dc072 Initial revision
glantau
parents:
diff changeset
117 0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96,
986e461dc072 Initial revision
glantau
parents:
diff changeset
118 0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5,
986e461dc072 Initial revision
glantau
parents:
diff changeset
119 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4,
986e461dc072 Initial revision
glantau
parents:
diff changeset
120 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3,
986e461dc072 Initial revision
glantau
parents:
diff changeset
121 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2,
986e461dc072 Initial revision
glantau
parents:
diff changeset
122 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda,
986e461dc072 Initial revision
glantau
parents:
diff changeset
123 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9,
986e461dc072 Initial revision
glantau
parents:
diff changeset
124 0xea, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2885
diff changeset
125 0xf9, 0xfa
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
126 };
986e461dc072 Initial revision
glantau
parents:
diff changeset
127
986e461dc072 Initial revision
glantau
parents:
diff changeset
128 /* isn't this function nicer than the one in the libjpeg ? */
5021
d73237575709 add proper prefix to new mjpeg extern func/var
aurel
parents: 5020
diff changeset
129 void ff_mjpeg_build_huffman_codes(uint8_t *huff_size, uint16_t *huff_code,
d73237575709 add proper prefix to new mjpeg extern func/var
aurel
parents: 5020
diff changeset
130 const uint8_t *bits_table,
d73237575709 add proper prefix to new mjpeg extern func/var
aurel
parents: 5020
diff changeset
131 const uint8_t *val_table)
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
132 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
133 int i, j, k,nb, code, sym;
986e461dc072 Initial revision
glantau
parents:
diff changeset
134
986e461dc072 Initial revision
glantau
parents:
diff changeset
135 code = 0;
986e461dc072 Initial revision
glantau
parents:
diff changeset
136 k = 0;
986e461dc072 Initial revision
glantau
parents:
diff changeset
137 for(i=1;i<=16;i++) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
138 nb = bits_table[i];
986e461dc072 Initial revision
glantau
parents:
diff changeset
139 for(j=0;j<nb;j++) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
140 sym = val_table[k++];
986e461dc072 Initial revision
glantau
parents:
diff changeset
141 huff_size[sym] = i;
986e461dc072 Initial revision
glantau
parents:
diff changeset
142 huff_code[sym] = code;
986e461dc072 Initial revision
glantau
parents:
diff changeset
143 code++;
986e461dc072 Initial revision
glantau
parents:
diff changeset
144 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
145 code <<= 1;
986e461dc072 Initial revision
glantau
parents:
diff changeset
146 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
147 }