annotate rv34data.h @ 7744:7477cbdacb20 libavcodec

Fix lossless jpeg encoder to comply to spec and store full redundant residuals, Note this does not change RGB32 as we need to check this against some decoder that supports it.
author michael
date Sat, 30 Aug 2008 20:39:12 +0000
parents e6b68d8df66b
children c4a4495715dd
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5937
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
1 /*
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
2 * RealVideo 4 decoder
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
3 * copyright (c) 2007 Konstantin Shishkov
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
4 *
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
5 * This file is part of FFmpeg.
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
6 *
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
7 * FFmpeg is free software; you can redistribute it and/or
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
8 * modify it under the terms of the GNU Lesser General Public
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
9 * License as published by the Free Software Foundation; either
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
10 * version 2.1 of the License, or (at your option) any later version.
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
11 *
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
12 * FFmpeg is distributed in the hope that it will be useful,
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
15 * Lesser General Public License for more details.
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
16 *
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
17 * You should have received a copy of the GNU Lesser General Public
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
18 * License along with FFmpeg; if not, write to the Free Software
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
20 */
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
21
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
22 /**
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
23 * @file rv34data.h
5943
337a95c66190 spelling cosmetics
diego
parents: 5937
diff changeset
24 * miscellaneous RV30/40 tables
5937
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
25 */
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
26
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
27 #ifndef FFMPEG_RV34DATA_H
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
28 #define FFMPEG_RV34DATA_H
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
29
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
30 #include <stdint.h>
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
31
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
32 /**
5943
337a95c66190 spelling cosmetics
diego
parents: 5937
diff changeset
33 * number of ones in nibble minus one
5937
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
34 */
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
35 static const uint8_t rv34_count_ones[16] = {
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
36 0, 0, 0, 1, 0, 1, 1, 2, 0, 1, 1, 2, 1, 2, 2, 3
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
37 };
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
38
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
39 /**
5967
15ed47af1838 Misc spelling fixes, prefer American over British English.
diego
parents: 5943
diff changeset
40 * values used to reconstruct coded block pattern
5937
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
41 */
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
42 static const uint8_t rv34_cbp_code[16] = {
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
43 0x00, 0x20, 0x10, 0x30, 0x02, 0x22, 0x12, 0x32,
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
44 0x01, 0x21, 0x11, 0x31, 0x03, 0x23, 0x13, 0x33
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
45 };
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
46
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
47 /**
5943
337a95c66190 spelling cosmetics
diego
parents: 5937
diff changeset
48 * precalculated results of division by three and modulo three for values 0-107
5937
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
49 *
5943
337a95c66190 spelling cosmetics
diego
parents: 5937
diff changeset
50 * A lot of four-tuples in RV40 are represented as c0*27+c1*9+c2*3+c3.
337a95c66190 spelling cosmetics
diego
parents: 5937
diff changeset
51 * This table allows conversion from a value back to a vector.
5937
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
52 */
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
53 static const uint8_t modulo_three_table[108][4] = {
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
54 { 0, 0, 0, 0 }, { 0, 0, 0, 1 }, { 0, 0, 0, 2 }, { 0, 0, 1, 0 },
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
55 { 0, 0, 1, 1 }, { 0, 0, 1, 2 }, { 0, 0, 2, 0 }, { 0, 0, 2, 1 },
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
56 { 0, 0, 2, 2 }, { 0, 1, 0, 0 }, { 0, 1, 0, 1 }, { 0, 1, 0, 2 },
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
57 { 0, 1, 1, 0 }, { 0, 1, 1, 1 }, { 0, 1, 1, 2 }, { 0, 1, 2, 0 },
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
58 { 0, 1, 2, 1 }, { 0, 1, 2, 2 }, { 0, 2, 0, 0 }, { 0, 2, 0, 1 },
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
59 { 0, 2, 0, 2 }, { 0, 2, 1, 0 }, { 0, 2, 1, 1 }, { 0, 2, 1, 2 },
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
60 { 0, 2, 2, 0 }, { 0, 2, 2, 1 }, { 0, 2, 2, 2 }, { 1, 0, 0, 0 },
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
61 { 1, 0, 0, 1 }, { 1, 0, 0, 2 }, { 1, 0, 1, 0 }, { 1, 0, 1, 1 },
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
62 { 1, 0, 1, 2 }, { 1, 0, 2, 0 }, { 1, 0, 2, 1 }, { 1, 0, 2, 2 },
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
63 { 1, 1, 0, 0 }, { 1, 1, 0, 1 }, { 1, 1, 0, 2 }, { 1, 1, 1, 0 },
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
64 { 1, 1, 1, 1 }, { 1, 1, 1, 2 }, { 1, 1, 2, 0 }, { 1, 1, 2, 1 },
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
65 { 1, 1, 2, 2 }, { 1, 2, 0, 0 }, { 1, 2, 0, 1 }, { 1, 2, 0, 2 },
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
66 { 1, 2, 1, 0 }, { 1, 2, 1, 1 }, { 1, 2, 1, 2 }, { 1, 2, 2, 0 },
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
67 { 1, 2, 2, 1 }, { 1, 2, 2, 2 }, { 2, 0, 0, 0 }, { 2, 0, 0, 1 },
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
68 { 2, 0, 0, 2 }, { 2, 0, 1, 0 }, { 2, 0, 1, 1 }, { 2, 0, 1, 2 },
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
69 { 2, 0, 2, 0 }, { 2, 0, 2, 1 }, { 2, 0, 2, 2 }, { 2, 1, 0, 0 },
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
70 { 2, 1, 0, 1 }, { 2, 1, 0, 2 }, { 2, 1, 1, 0 }, { 2, 1, 1, 1 },
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
71 { 2, 1, 1, 2 }, { 2, 1, 2, 0 }, { 2, 1, 2, 1 }, { 2, 1, 2, 2 },
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
72 { 2, 2, 0, 0 }, { 2, 2, 0, 1 }, { 2, 2, 0, 2 }, { 2, 2, 1, 0 },
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
73 { 2, 2, 1, 1 }, { 2, 2, 1, 2 }, { 2, 2, 2, 0 }, { 2, 2, 2, 1 },
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
74 { 2, 2, 2, 2 }, { 3, 0, 0, 0 }, { 3, 0, 0, 1 }, { 3, 0, 0, 2 },
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
75 { 3, 0, 1, 0 }, { 3, 0, 1, 1 }, { 3, 0, 1, 2 }, { 3, 0, 2, 0 },
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
76 { 3, 0, 2, 1 }, { 3, 0, 2, 2 }, { 3, 1, 0, 0 }, { 3, 1, 0, 1 },
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
77 { 3, 1, 0, 2 }, { 3, 1, 1, 0 }, { 3, 1, 1, 1 }, { 3, 1, 1, 2 },
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
78 { 3, 1, 2, 0 }, { 3, 1, 2, 1 }, { 3, 1, 2, 2 }, { 3, 2, 0, 0 },
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
79 { 3, 2, 0, 1 }, { 3, 2, 0, 2 }, { 3, 2, 1, 0 }, { 3, 2, 1, 1 },
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
80 { 3, 2, 1, 2 }, { 3, 2, 2, 0 }, { 3, 2, 2, 1 }, { 3, 2, 2, 2 },
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
81 };
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
82
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
83 /**
5943
337a95c66190 spelling cosmetics
diego
parents: 5937
diff changeset
84 * quantizer values used for AC and DC coefficients in chroma blocks
5937
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
85 */
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
86 static const uint8_t rv34_chroma_quant[2][32] = {
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
87 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
88 16, 17, 17, 18, 19, 20, 20, 21, 22, 22, 23, 23, 24, 24, 25, 25 },
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
89 { 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
90 14, 15, 15, 16, 17, 18, 18, 19, 20, 20, 21, 21, 22, 22, 23, 23 }
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
91 };
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
92
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
93 /**
5943
337a95c66190 spelling cosmetics
diego
parents: 5937
diff changeset
94 * This table is used for dequantizing.
5937
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
95 */
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
96 static const uint16_t rv34_qscale_tab[32] = {
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
97 60, 67, 76, 85, 96, 108, 121, 136,
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
98 152, 171, 192, 216, 242, 272, 305, 341,
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
99 383, 432, 481, 544, 606, 683, 767, 854,
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
100 963, 1074, 1212, 1392, 1566, 1708, 1978, 2211
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
101 };
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
102
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
103 /**
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
104 * 4x4 dezigzag pattern
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
105 */
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
106 static const uint8_t rv34_dezigzag[16] = {
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
107 0, 1, 8, 16,
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
108 9, 2, 3, 10,
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
109 17, 24, 25, 18,
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
110 11, 19, 26, 27
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
111 };
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
112
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
113 /**
5943
337a95c66190 spelling cosmetics
diego
parents: 5937
diff changeset
114 * tables used to translate a quantizer value into a VLC set for decoding
337a95c66190 spelling cosmetics
diego
parents: 5937
diff changeset
115 * The first table is used for intraframes.
5937
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
116 */
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
117 static const uint8_t rv34_quant_to_vlc_set[2][31] = {
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
118 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1,
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
119 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 0 },
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
120 { 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3,
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
121 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6 },
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
122 };
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
123
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
124 /**
5943
337a95c66190 spelling cosmetics
diego
parents: 5937
diff changeset
125 * table for obtaining the quantizer difference
5991
e6b68d8df66b Replace table with its H.263 counterpart
kostya
parents: 5967
diff changeset
126 * @todo Use with modified_quant_tab from h263data.h.
5937
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
127 */
5991
e6b68d8df66b Replace table with its H.263 counterpart
kostya
parents: 5967
diff changeset
128 static const uint8_t rv34_dquant_tab[2][32]={
e6b68d8df66b Replace table with its H.263 counterpart
kostya
parents: 5967
diff changeset
129 // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
e6b68d8df66b Replace table with its H.263 counterpart
kostya
parents: 5967
diff changeset
130 {
e6b68d8df66b Replace table with its H.263 counterpart
kostya
parents: 5967
diff changeset
131 0, 3, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9,10,11,12,13,14,15,16,17,18,18,19,20,21,22,23,24,25,26,27,28
e6b68d8df66b Replace table with its H.263 counterpart
kostya
parents: 5967
diff changeset
132 },{
e6b68d8df66b Replace table with its H.263 counterpart
kostya
parents: 5967
diff changeset
133 0, 2, 3, 4, 5, 6, 7, 8, 9,10,11,13,14,15,16,17,18,19,20,21,22,24,25,26,27,28,29,30,31,31,31,26
e6b68d8df66b Replace table with its H.263 counterpart
kostya
parents: 5967
diff changeset
134 }
5937
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
135 };
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
136
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
137 /**
5943
337a95c66190 spelling cosmetics
diego
parents: 5937
diff changeset
138 * maximum number of macroblocks for each of the possible slice offset sizes
337a95c66190 spelling cosmetics
diego
parents: 5937
diff changeset
139 * @todo This is the same as ff_mba_max, maybe use it instead.
5937
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
140 */
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
141 static const uint16_t rv34_mb_max_sizes[6] = { 0x2F, 0x68, 0x18B, 0x62F, 0x18BF, 0x23FF };
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
142 /**
5943
337a95c66190 spelling cosmetics
diego
parents: 5937
diff changeset
143 * bits needed to code the slice offset for the given size
337a95c66190 spelling cosmetics
diego
parents: 5937
diff changeset
144 * @todo This is the same as ff_mba_length, maybe use it instead.
5937
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
145 */
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
146 static const uint8_t rv34_mb_bits_sizes[6] = { 6, 7, 9, 11, 13, 14 };
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
147
7b5731b088ed Data tables for future RV30/40 decoder
kostya
parents:
diff changeset
148 #endif /* FFMPEG_RV34DATA_H */