Merge commit 'a7a07cc98ac548297b5b0628cb81280e11952e3f'
[ffmpeg.git] / libavcodec / sp5x.h
1 /*
2  * Sunplus JPEG tables
3  * Copyright (c) 2003 the ffmpeg project
4  *
5  * This file is part of FFmpeg.
6  *
7  * FFmpeg is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * FFmpeg is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with FFmpeg; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20  */
21
22 #ifndef AVCODEC_SP5X_H
23 #define AVCODEC_SP5X_H
24
25 #include <stdint.h>
26
27 static const uint8_t sp5x_data_sof[] =
28 {
29     0xFF, 0xC0,       /* SOF */
30     0x00, 0x11,       /* len */
31     0x08,             /* bits */
32     0x00, 0xf0,       /* height (default: 240) */
33     0x01, 0x40,       /* width (default: 240) */
34     0x03,             /* nb components */
35     0x01, 0x22, 0x00, /* 21 vs 22 ? */
36     0x02, 0x11, 0x01,
37     0x03, 0x11, 0x01
38 };
39
40 static const uint8_t sp5x_data_sos[] =
41 {
42     0xFF, 0xDA,       /* SOS */
43     0x00, 0x0C,       /* len */
44     0x03,             /* nb components */
45     0x01, 0x00,
46     0x02, 0x11,
47     0x03, 0x11,
48     0x00,             /* Ss */
49     0x3F,             /* Se */
50     0x00              /* Ah/Al */
51 };
52
53 static const uint8_t sp5x_data_dqt[] =
54 {
55     0xFF, 0xDB, /* DQT */
56     0x00, 0x84, /* len */
57     0x00,
58     0x05, 0x03, 0x04, 0x04, 0x04, 0x03, 0x05, 0x04,
59     0x04, 0x04, 0x06, 0x05, 0x05, 0x06, 0x08, 0x0D,
60     0x08, 0x08, 0x07, 0x07, 0x08, 0x10, 0x0C, 0x0C,
61     0x0A, 0x0D, 0x14, 0x11, 0x15, 0x14, 0x13, 0x11,
62     0x13, 0x13, 0x16, 0x18, 0x1F, 0x1A, 0x16, 0x17,
63     0x1E, 0x17, 0x13, 0x13, 0x1B, 0x25, 0x1C, 0x1E,
64     0x20, 0x21, 0x23, 0x23, 0x23, 0x15, 0x1A, 0x27,
65     0x29, 0x26, 0x22, 0x29, 0x1F, 0x22, 0x23, 0x22,
66     0x01,
67     0x05, 0x06, 0x06, 0x08, 0x07, 0x08, 0x10, 0x08,
68     0x08, 0x10, 0x22, 0x16, 0x13, 0x16, 0x22, 0x22,
69     0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
70     0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
71     0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
72     0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
73     0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
74     0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22
75 };
76
77 static const uint8_t sp5x_data_dht[] = {
78     0xFF, 0xC4, /* DHT */
79     0x01, 0xA2, /* len */
80     0x00, 0x00, 0x01, 0x05, 0x01, 0x01, 0x01, 0x01,
81     0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
82     0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06,
83     0x07, 0x08, 0x09, 0x0A, 0x0B, 0x01, 0x00, 0x03,
84     0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
85     0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
86     0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
87     0x0A, 0x0B, 0x10, 0x00, 0x02, 0x01, 0x03, 0x03,
88     0x02, 0x04, 0x03, 0x05, 0x05, 0x04, 0x04, 0x00,
89     0x00, 0x01, 0x7D, 0x01, 0x02, 0x03, 0x00, 0x04,
90     0x11, 0x05, 0x12, 0x21, 0x31, 0x41, 0x06, 0x13,
91     0x51, 0x61, 0x07, 0x22, 0x71, 0x14, 0x32, 0x81,
92     0x91, 0xA1, 0x08, 0x23, 0x42, 0xB1, 0xC1, 0x15,
93     0x52, 0xD1, 0xF0, 0x24, 0x33, 0x62, 0x72, 0x82,
94     0x09, 0x0A, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x25,
95     0x26, 0x27, 0x28, 0x29, 0x2A, 0x34, 0x35, 0x36,
96     0x37, 0x38, 0x39, 0x3A, 0x43, 0x44, 0x45, 0x46,
97     0x47, 0x48, 0x49, 0x4A, 0x53, 0x54, 0x55, 0x56,
98     0x57, 0x58, 0x59, 0x5A, 0x63, 0x64, 0x65, 0x66,
99     0x67, 0x68, 0x69, 0x6A, 0x73, 0x74, 0x75, 0x76,
100     0x77, 0x78, 0x79, 0x7A, 0x83, 0x84, 0x85, 0x86,
101     0x87, 0x88, 0x89, 0x8A, 0x92, 0x93, 0x94, 0x95,
102     0x96, 0x97, 0x98, 0x99, 0x9A, 0xA2, 0xA3, 0xA4,
103     0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xB2, 0xB3,
104     0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xC2,
105     0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA,
106     0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9,
107     0xDA, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7,
108     0xE8, 0xE9, 0xEA, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5,
109     0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0x11, 0x00, 0x02,
110     0x01, 0x02, 0x04, 0x04, 0x03, 0x04, 0x07, 0x05,
111     0x04, 0x04, 0x00, 0x01, 0x02, 0x77, 0x00, 0x01,
112     0x02, 0x03, 0x11, 0x04, 0x05, 0x21, 0x31, 0x06,
113     0x12, 0x41, 0x51, 0x07, 0x61, 0x71, 0x13, 0x22,
114     0x32, 0x81, 0x08, 0x14, 0x42, 0x91, 0xA1, 0xB1,
115     0xC1, 0x09, 0x23, 0x33, 0x52, 0xF0, 0x15, 0x62,
116     0x72, 0xD1, 0x0A, 0x16, 0x24, 0x34, 0xE1, 0x25,
117     0xF1, 0x17, 0x18, 0x19, 0x1A, 0x26, 0x27, 0x28,
118     0x29, 0x2A, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A,
119     0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A,
120     0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A,
121     0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A,
122     0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A,
123     0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89,
124     0x8A, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98,
125     0x99, 0x9A, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7,
126     0xA8, 0xA9, 0xAA, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6,
127     0xB7, 0xB8, 0xB9, 0xBA, 0xC2, 0xC3, 0xC4, 0xC5,
128     0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xD2, 0xD3, 0xD4,
129     0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xE2, 0xE3,
130     0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xF2,
131     0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA
132 };
133
134
135 static const uint8_t sp5x_quant_table[20][64]=
136 {
137     /* index 0, Q50 */
138     {  16, 11, 12, 14, 12, 10, 16, 14, 13, 14, 18, 17, 16, 19, 24, 40,
139        26, 24, 22, 22, 24, 49, 35, 37, 29, 40, 58, 51, 61, 60, 57, 51,
140        56, 55, 64, 72, 92, 78, 64, 68, 87, 69, 55, 56, 80,109, 81, 87,
141        95, 98,103,104,103, 62, 77,113,121,112,100,120, 92,101,103, 99 },
142     {  17, 18, 18, 24, 21, 24, 47, 26, 26, 47, 99, 66, 56, 66, 99, 99,
143        99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
144        99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
145        99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99 },
146
147     /* index 1, Q70 */
148     {  10,  7,  7,  8,  7,  6, 10,  8,  8,  8, 11, 10, 10, 11, 14, 24,
149        16, 14, 13, 13, 14, 29, 21, 22, 17, 24, 35, 31, 37, 36, 34, 31,
150        34, 33, 38, 43, 55, 47, 38, 41, 52, 41, 33, 34, 48, 65, 49, 52,
151        57, 59, 62, 62, 62, 37, 46, 68, 73, 67, 60, 72, 55, 61, 62, 59 },
152     {  10, 11, 11, 14, 13, 14, 28, 16, 16, 28, 59, 40, 34, 40, 59, 59,
153        59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
154        59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
155        59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59 },
156
157     /* index 2, Q80 */
158     {   6,  4,  5,  6,  5,  4,  6,  6,  5,  6,  7,  7,  6,  8, 10, 16,
159        10, 10,  9,  9, 10, 20, 14, 15, 12, 16, 23, 20, 24, 24, 23, 20,
160        22, 22, 26, 29, 37, 31, 26, 27, 35, 28, 22, 22, 32, 44, 32, 35,
161        38, 39, 41, 42, 41, 25, 31, 45, 48, 45, 40, 48, 37, 40, 41, 40 },
162     {   7,  7,  7, 10,  8, 10, 19, 10, 10, 19, 40, 26, 22, 26, 40, 40,
163        40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
164        40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
165        40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40 },
166
167     /* index 3, Q85 */
168     {   5,  3,  4,  4,  4,  3,  5,  4,  4,  4,  5,  5,  5,  6,  7, 12,
169         8,  7,  7,  7,  7, 15, 11, 11,  9, 12, 17, 15, 18, 18, 17, 15,
170        17, 17, 19, 22, 28, 23, 19, 20, 26, 21, 17, 17, 24, 33, 24, 26,
171        29, 29, 31, 31, 31, 19, 23, 34, 36, 34, 30, 36, 28, 30, 31, 30 },
172     {   5,  5,  5,  7,  6,  7, 14,  8,  8, 14, 30, 20, 17, 20, 30, 30,
173        30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
174        30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
175        30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30 },
176
177     /* index 4, Q90 */
178     {   3,  2,  2,  3,  2,  2,  3,  3,  3,  3,  4,  3,  3,  4,  5,  8,
179         5,  5,  4,  4,  5, 10,  7,  7,  6,  8, 12, 10, 12, 12, 11, 10,
180        11, 11, 13, 14, 18, 16, 13, 14, 17, 14, 11, 11, 16, 22, 16, 17,
181        19, 20, 21, 21, 21, 12, 15, 23, 24, 22, 20, 24, 18, 20, 21, 20 },
182     {   3,  4,  4,  5,  4,  5,  9,  5,  5,  9, 20, 13, 11, 13, 20, 20,
183        20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
184        20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
185        20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20 },
186
187     /* index 5, Q60 */
188     {  13,  9, 10, 11, 10,  8, 13, 11, 10, 11, 14, 14, 13, 15, 19, 32,
189        21, 19, 18, 18, 19, 39, 28, 30, 23, 32, 46, 41, 49, 48, 46, 41,
190        45, 44, 51, 58, 74, 62, 51, 54, 70, 55, 44, 45, 64, 87, 65, 70,
191        76, 78, 82, 83, 82, 50, 62, 90, 97, 90, 80, 96, 74, 81, 82, 79 },
192     {  14, 14, 14, 19, 17, 19, 38, 21, 21, 38, 79, 53, 45, 53, 79, 79,
193        79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
194        79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
195        79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79 },
196
197     /* index 6, Q25 */
198     {  32, 22, 24, 28, 24, 20, 32, 28, 26, 28, 36, 34, 32, 38, 48, 80,
199        52, 48, 44, 44, 48, 98, 70, 74, 58, 80,116,102,122,120,114,102,
200       112,110,128,144,184,156,128,136,174,138,110,112,160,218,162,174,
201       190,196,206,208,206,124,154,226,242,224,200,240,184,202,206,198 },
202     {  34, 36, 36, 48, 42, 48, 94, 52, 52, 94,198,132,112,132,198,198,
203       198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,
204       198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,
205       198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198 },
206
207     /* index 7, Q95 */
208     {   2,  1,  1,  1,  1,  1,  2,  1,  1,  1,  2,  2,  2,  2,  2,  4,
209         3,  2,  2,  2,  2,  5,  4,  4,  3,  4,  6,  5,  6,  6,  6,  5,
210         6,  6,  6,  7,  9,  8,  6,  7,  9,  7,  6,  6,  8, 11,  8,  9,
211        10, 10, 10, 10, 10,  6,  8, 11, 12, 11, 10, 12,  9, 10, 10, 10 },
212     {   2,  2,  2,  2,  2,  2,  5,  3,  3,  5, 10,  7,  6,  7, 10, 10,
213        10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
214        10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
215        10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 },
216
217     /* index 8, Q93 */
218     {   2,  2,  2,  2,  2,  1,  2,  2,  2,  2,  3,  2,  2,  3,  3,  6,
219         4,  3,  3,  3,  3,  7,  5,  5,  4,  6,  8,  7,  9,  8,  8,  7,
220         8,  8,  9, 10, 13, 11,  9, 10, 12, 10,  8,  8, 11, 15, 11, 12,
221        13, 14, 14, 15, 14,  9, 11, 16, 17, 16, 14, 17, 13, 14, 14, 14 },
222     {   2,  3,  3,  3,  3,  3,  7,  4,  4,  7, 14,  9,  8,  9, 14, 14,
223        14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
224        14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
225        14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14 },
226
227     /* index 9, Q40 */
228     {  20, 14, 15, 18, 15, 13, 20, 18, 16, 18, 23, 21, 20, 24, 30, 50,
229        33, 30, 28, 28, 30, 61, 44, 46, 36, 50, 73, 64, 76, 75, 71, 64,
230        70, 69, 80, 90,115, 98, 80, 85,109, 86, 69, 70,100,136,101,109,
231       119,123,129,130,129, 78, 96,141,151,140,125,150,115,126,129,124 },
232     {  21, 23, 23, 30, 26, 30, 59, 33, 33, 59,124, 83, 70, 83,124,124,
233       124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
234       124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
235       124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124 }
236 };
237
238 #endif /* AVCODEC_SP5X_H */