blob: 7d2df97200259ec986d661f9ba820fa0d1a2d577 [file] [log] [blame]
Jean-Francois Moine63eb9542008-04-12 09:58:09 -03001#ifndef JPEG_H
2#define JPEG_H 1
3/*
4 * Insert a JPEG header at start of frame
5 *
6 * This module is used by the gspca subdrivers.
7 * A special case is done for Conexant webcams.
8 *
9 * Copyright (C) Jean-Francois Moine (http://moinejf.free.fr)
10 *
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License as published by
13 * the Free Software Foundation; either version 2 of the License, or
14 * any later version.
15 *
16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU General Public License for more details.
20 *
21 * You should have received a copy of the GNU General Public License
22 * along with this program; if not, write to the Free Software
23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
24 *
25 */
26
Jean-Francois Moine36e819d2009-01-07 16:49:57 -030027/*
28 * generation options
29 * CONEX_CAM Conexant if present
30 * QUANT_VAL quantization table (0..8)
31 */
32
33/*
34 * JPEG header:
35 * - start of jpeg frame
36 * - quantization table
37 * - huffman table
38 * - start of SOF0
39 */
40static const u8 jpeg_head[] = {
Jean-Francois Moine63eb9542008-04-12 09:58:09 -030041 0xff, 0xd8, /* jpeg */
42 0xff, 0xdb, 0x00, 0x84, /* DQT */
Jean-Francois Moine36e819d2009-01-07 16:49:57 -030043#if QUANT_VAL == 0
44/* index 0 - Q40*/
Jean-Francois Moine63eb9542008-04-12 09:58:09 -0300450, /* quantization table part 1 */
Jean-Francois Moine36e819d2009-01-07 16:49:57 -030046 0x14, 0x0e, 0x0f, 0x12, 0x0f, 0x0d, 0x14, 0x12,
47 0x10, 0x12, 0x17, 0x15, 0x14, 0x18, 0x1e, 0x32,
48 0x21, 0x1e, 0x1c, 0x1c, 0x1e, 0x3d, 0x2c, 0x2e,
49 0x24, 0x32, 0x49, 0x40, 0x4c, 0x4b, 0x47, 0x40,
50 0x46, 0x45, 0x50, 0x5a, 0x73, 0x62, 0x50, 0x55,
51 0x6d, 0x56, 0x45, 0x46, 0x64, 0x88, 0x65, 0x6d,
52 0x77, 0x7b, 0x81, 0x82, 0x81, 0x4e, 0x60, 0x8d,
53 0x97, 0x8c, 0x7d, 0x96, 0x73, 0x7e, 0x81, 0x7c,
Jean-Francois Moine63eb9542008-04-12 09:58:09 -0300541, /* quantization table part 2 */
Jean-Francois Moine36e819d2009-01-07 16:49:57 -030055 0x15, 0x17, 0x17, 0x1e, 0x1a, 0x1e, 0x3b, 0x21,
56 0x21, 0x3b, 0x7c, 0x53, 0x46, 0x53, 0x7c, 0x0c,
57 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c,
58 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c,
59 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c,
60 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c,
61 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c,
62 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c,
63#elif QUANT_VAL == 1
Jean-Francois Moine63eb9542008-04-12 09:58:09 -030064/* index 1 - Q50 */
Jean-Francois Moine63eb9542008-04-12 09:58:09 -0300650,
Jean-Francois Moine36e819d2009-01-07 16:49:57 -030066 0x10, 0x0b, 0x0c, 0x0e, 0x0c, 0x0a, 0x10, 0x0e,
67 0x0d, 0x0e, 0x12, 0x11, 0x10, 0x13, 0x18, 0x28,
68 0x1a, 0x18, 0x16, 0x16, 0x18, 0x31, 0x23, 0x25,
69 0x1d, 0x28, 0x3a, 0x33, 0x3d, 0x3c, 0x39, 0x33,
70 0x38, 0x37, 0x40, 0x48, 0x5c, 0x4e, 0x40, 0x44,
71 0x57, 0x45, 0x37, 0x38, 0x50, 0x6d, 0x51, 0x57,
72 0x5f, 0x62, 0x67, 0x68, 0x67, 0x3e, 0x4d, 0x71,
73 0x79, 0x70, 0x64, 0x78, 0x5c, 0x65, 0x67, 0x63,
Jean-Francois Moine63eb9542008-04-12 09:58:09 -0300741,
Jean-Francois Moine36e819d2009-01-07 16:49:57 -030075 0x11, 0x12, 0x12, 0x18, 0x15, 0x18, 0x2f, 0x1a,
76 0x1a, 0x2f, 0x63, 0x42, 0x38, 0x42, 0x63, 0x63,
77 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
78 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
79 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
80 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
81 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
82 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
83#elif QUANT_VAL == 2
Jean-Francois Moine63eb9542008-04-12 09:58:09 -030084/* index 2 Q60 */
Jean-Francois Moine63eb9542008-04-12 09:58:09 -0300850,
Jean-Francois Moine36e819d2009-01-07 16:49:57 -030086 0x0d, 0x09, 0x0a, 0x0b, 0x0a, 0x08, 0x0d, 0x0b,
87 0x0a, 0x0b, 0x0e, 0x0e, 0x0d, 0x0f, 0x13, 0x20,
88 0x15, 0x13, 0x12, 0x12, 0x13, 0x27, 0x1c, 0x1e,
89 0x17, 0x20, 0x2e, 0x29, 0x31, 0x30, 0x2e, 0x29,
90 0x2d, 0x2c, 0x33, 0x3a, 0x4a, 0x3e, 0x33, 0x36,
91 0x46, 0x37, 0x2c, 0x2d, 0x40, 0x57, 0x41, 0x46,
92 0x4c, 0x4e, 0x52, 0x53, 0x52, 0x32, 0x3e, 0x5a,
93 0x61, 0x5a, 0x50, 0x60, 0x4a, 0x51, 0x52, 0x4f,
Jean-Francois Moine63eb9542008-04-12 09:58:09 -0300941,
Jean-Francois Moine36e819d2009-01-07 16:49:57 -030095 0x0e, 0x0e, 0x0e, 0x13, 0x11, 0x13, 0x26, 0x15,
96 0x15, 0x26, 0x4f, 0x35, 0x2d, 0x35, 0x4f, 0x4f,
97 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f,
98 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f,
99 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f,
100 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f,
101 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f,
102 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f,
103#elif QUANT_VAL == 3
Jean-Francois Moine63eb9542008-04-12 09:58:09 -0300104/* index 3 - Q70 */
Jean-Francois Moine63eb9542008-04-12 09:58:09 -03001050,
Jean-Francois Moine36e819d2009-01-07 16:49:57 -0300106 0x0a, 0x07, 0x07, 0x08, 0x07, 0x06, 0x0a, 0x08,
107 0x08, 0x08, 0x0b, 0x0a, 0x0a, 0x0b, 0x0e, 0x18,
108 0x10, 0x0e, 0x0d, 0x0d, 0x0e, 0x1d, 0x15, 0x16,
109 0x11, 0x18, 0x23, 0x1f, 0x25, 0x24, 0x22, 0x1f,
110 0x22, 0x21, 0x26, 0x2b, 0x37, 0x2f, 0x26, 0x29,
111 0x34, 0x29, 0x21, 0x22, 0x30, 0x41, 0x31, 0x34,
112 0x39, 0x3b, 0x3e, 0x3e, 0x3e, 0x25, 0x2e, 0x44,
113 0x49, 0x43, 0x3c, 0x48, 0x37, 0x3d, 0x3e, 0x3b,
Jean-Francois Moine63eb9542008-04-12 09:58:09 -03001141,
Jean-Francois Moine36e819d2009-01-07 16:49:57 -0300115 0x0a, 0x0b, 0x0b, 0x0e, 0x0d, 0x0e, 0x1c, 0x10,
116 0x10, 0x1c, 0x3b, 0x28, 0x22, 0x28, 0x3b, 0x3b,
117 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b,
118 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b,
119 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b,
120 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b,
121 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b,
122 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b,
123#elif QUANT_VAL == 4
Jean-Francois Moine63eb9542008-04-12 09:58:09 -0300124/* index 4 - Q80 */
Jean-Francois Moine63eb9542008-04-12 09:58:09 -03001250,
Jean-Francois Moine36e819d2009-01-07 16:49:57 -0300126 0x06, 0x04, 0x05, 0x06, 0x05, 0x04, 0x06, 0x06,
127 0x05, 0x06, 0x07, 0x07, 0x06, 0x08, 0x0a, 0x10,
128 0x0a, 0x0a, 0x09, 0x09, 0x0a, 0x14, 0x0e, 0x0f,
129 0x0c, 0x10, 0x17, 0x14, 0x18, 0x18, 0x17, 0x14,
130 0x16, 0x16, 0x1a, 0x1d, 0x25, 0x1f, 0x1a, 0x1b,
131 0x23, 0x1c, 0x16, 0x16, 0x20, 0x2c, 0x20, 0x23,
132 0x26, 0x27, 0x29, 0x2a, 0x29, 0x19, 0x1f, 0x2d,
133 0x30, 0x2d, 0x28, 0x30, 0x25, 0x28, 0x29, 0x28,
Jean-Francois Moine63eb9542008-04-12 09:58:09 -03001341,
Jean-Francois Moine36e819d2009-01-07 16:49:57 -0300135 0x07, 0x07, 0x07, 0x0a, 0x08, 0x0a, 0x13, 0x0a,
136 0x0a, 0x13, 0x28, 0x1a, 0x16, 0x1a, 0x28, 0x28,
137 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
138 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
139 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
140 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
141 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
142 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
143#elif QUANT_VAL == 5
Jean-Francois Moine63eb9542008-04-12 09:58:09 -0300144/* index 5 - Q85 */
Jean-Francois Moine63eb9542008-04-12 09:58:09 -03001450,
Jean-Francois Moine36e819d2009-01-07 16:49:57 -0300146 0x05, 0x03, 0x04, 0x04, 0x04, 0x03, 0x05, 0x04,
147 0x04, 0x04, 0x05, 0x05, 0x05, 0x06, 0x07, 0x0c,
148 0x08, 0x07, 0x07, 0x07, 0x07, 0x0f, 0x0b, 0x0b,
149 0x09, 0x0c, 0x11, 0x0f, 0x12, 0x12, 0x11, 0x0f,
150 0x11, 0x11, 0x13, 0x16, 0x1c, 0x17, 0x13, 0x14,
151 0x1a, 0x15, 0x11, 0x11, 0x18, 0x21, 0x18, 0x1a,
152 0x1d, 0x1d, 0x1f, 0x1f, 0x1f, 0x13, 0x17, 0x22,
153 0x24, 0x22, 0x1e, 0x24, 0x1c, 0x1e, 0x1f, 0x1e,
Jean-Francois Moine63eb9542008-04-12 09:58:09 -03001541,
Jean-Francois Moine36e819d2009-01-07 16:49:57 -0300155 0x05, 0x05, 0x05, 0x07, 0x06, 0x07, 0x0e, 0x08,
156 0x08, 0x0e, 0x1e, 0x14, 0x11, 0x14, 0x1e, 0x1e,
157 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
158 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
159 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
160 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
161 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
162 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
163#elif QUANT_VAL == 6
Jean-Francois Moine63eb9542008-04-12 09:58:09 -0300164/* index 6 - 86 */
Jean-Francois Moine63eb9542008-04-12 09:58:09 -03001650,
166 0x04, 0x03, 0x03, 0x04, 0x03, 0x03, 0x04, 0x04,
167 0x04, 0x04, 0x05, 0x05, 0x04, 0x05, 0x07, 0x0B,
Jean-Francois Moine36e819d2009-01-07 16:49:57 -0300168 0x07, 0x07, 0x06, 0x06, 0x07, 0x0e, 0x0a, 0x0a,
169 0x08, 0x0B, 0x10, 0x0e, 0x11, 0x11, 0x10, 0x0e,
170 0x10, 0x0f, 0x12, 0x14, 0x1a, 0x16, 0x12, 0x13,
171 0x18, 0x13, 0x0f, 0x10, 0x16, 0x1f, 0x17, 0x18,
172 0x1b, 0x1b, 0x1d, 0x1d, 0x1d, 0x11, 0x16, 0x20,
173 0x22, 0x1f, 0x1c, 0x22, 0x1a, 0x1c, 0x1d, 0x1c,
Jean-Francois Moine63eb9542008-04-12 09:58:09 -03001741,
175 0x05, 0x05, 0x05, 0x07, 0x06, 0x07, 0x0D, 0x07,
Jean-Francois Moine36e819d2009-01-07 16:49:57 -0300176 0x07, 0x0D, 0x1c, 0x12, 0x10, 0x12, 0x1c, 0x1c,
177 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c,
178 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c,
179 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c,
180 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c,
181 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c,
182 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c,
183#elif QUANT_VAL == 7
Jean-Francois Moine63eb9542008-04-12 09:58:09 -0300184/* index 7 - 88 */
Jean-Francois Moine63eb9542008-04-12 09:58:09 -03001850,
186 0x04, 0x03, 0x03, 0x03, 0x03, 0x02, 0x04, 0x03,
Jean-Francois Moine36e819d2009-01-07 16:49:57 -0300187 0x03, 0x03, 0x04, 0x04, 0x04, 0x05, 0x06, 0x0a,
Jean-Francois Moine63eb9542008-04-12 09:58:09 -0300188 0x06, 0x06, 0x05, 0x05, 0x06, 0x0C, 0x08, 0x09,
Jean-Francois Moine36e819d2009-01-07 16:49:57 -0300189 0x07, 0x0a, 0x0e, 0x0c, 0x0f, 0x0e, 0x0e, 0x0c,
190 0x0d, 0x0d, 0x0f, 0x11, 0x16, 0x13, 0x0f, 0x10,
191 0x15, 0x11, 0x0d, 0x0d, 0x13, 0x1a, 0x13, 0x15,
192 0x17, 0x18, 0x19, 0x19, 0x19, 0x0f, 0x12, 0x1b,
193 0x1d, 0x1b, 0x18, 0x1d, 0x16, 0x18, 0x19, 0x18,
Jean-Francois Moine63eb9542008-04-12 09:58:09 -03001941,
195 0x04, 0x04, 0x04, 0x06, 0x05, 0x06, 0x0B, 0x06,
Jean-Francois Moine36e819d2009-01-07 16:49:57 -0300196 0x06, 0x0B, 0x18, 0x10, 0x0d, 0x10, 0x18, 0x18,
Jean-Francois Moine63eb9542008-04-12 09:58:09 -0300197 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
198 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
199 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
200 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
201 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
202 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
Jean-Francois Moine36e819d2009-01-07 16:49:57 -0300203#elif QUANT_VAL == 8
Jean-Francois Moine63eb9542008-04-12 09:58:09 -0300204/* index 8 - ?? */
Jean-Francois Moine63eb9542008-04-12 09:58:09 -03002050,
206 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
207 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x05,
208 0x03, 0x03, 0x03, 0x03, 0x03, 0x06, 0x04, 0x05,
209 0x04, 0x05, 0x07, 0x06, 0x08, 0x08, 0x07, 0x06,
Jean-Francois Moine36e819d2009-01-07 16:49:57 -0300210 0x07, 0x07, 0x08, 0x09, 0x0c, 0x0a, 0x08, 0x09,
211 0x0B, 0x09, 0x07, 0x07, 0x0a, 0x0e, 0x0a, 0x0b,
212 0x0c, 0x0c, 0x0d, 0x0d, 0x0d, 0x08, 0x0a, 0x0e,
213 0x0f, 0x0e, 0x0d, 0x0f, 0x0c, 0x0d, 0x0d, 0x0c,
Jean-Francois Moine63eb9542008-04-12 09:58:09 -03002141,
215 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x06, 0x03,
Jean-Francois Moine36e819d2009-01-07 16:49:57 -0300216 0x03, 0x06, 0x0c, 0x08, 0x07, 0x08, 0x0c, 0x0c,
217 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
218 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
219 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
220 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
221 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
222 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
223#else
224#error "Invalid quantization table"
225#endif
Jean-Francois Moine63eb9542008-04-12 09:58:09 -0300226
Jean-Francois Moine36e819d2009-01-07 16:49:57 -0300227/* huffman table */
Jean-Francois Moine63eb9542008-04-12 09:58:09 -0300228 0xff, 0xc4, 0x01, 0xa2,
229 0x00, 0x00, 0x01, 0x05, 0x01, 0x01, 0x01, 0x01,
230 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
231 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06,
232 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x01, 0x00, 0x03,
233 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
234 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
235 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
236 0x0a, 0x0b, 0x10, 0x00, 0x02, 0x01, 0x03, 0x03,
237 0x02, 0x04, 0x03, 0x05, 0x05, 0x04, 0x04, 0x00,
238 0x00, 0x01, 0x7d, 0x01, 0x02, 0x03, 0x00, 0x04,
239 0x11, 0x05, 0x12, 0x21, 0x31, 0x41, 0x06, 0x13,
240 0x51, 0x61, 0x07, 0x22, 0x71, 0x14, 0x32, 0x81,
241 0x91, 0xa1, 0x08, 0x23, 0x42, 0xb1, 0xc1, 0x15,
242 0x52, 0xd1, 0xf0, 0x24, 0x33, 0x62, 0x72, 0x82,
243 0x09, 0x0a, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x25,
244 0x26, 0x27, 0x28, 0x29, 0x2a, 0x34, 0x35, 0x36,
245 0x37, 0x38, 0x39, 0x3a, 0x43, 0x44, 0x45, 0x46,
246 0x47, 0x48, 0x49, 0x4a, 0x53, 0x54, 0x55, 0x56,
247 0x57, 0x58, 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66,
248 0x67, 0x68, 0x69, 0x6a, 0x73, 0x74, 0x75, 0x76,
249 0x77, 0x78, 0x79, 0x7a, 0x83, 0x84, 0x85, 0x86,
250 0x87, 0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95,
251 0x96, 0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4,
252 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3,
253 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2,
254 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca,
255 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9,
256 0xda, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
257 0xe8, 0xe9, 0xea, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5,
258 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0x11, 0x00, 0x02,
259 0x01, 0x02, 0x04, 0x04, 0x03, 0x04, 0x07, 0x05,
260 0x04, 0x04, 0x00, 0x01, 0x02, 0x77, 0x00, 0x01,
261 0x02, 0x03, 0x11, 0x04, 0x05, 0x21, 0x31, 0x06,
262 0x12, 0x41, 0x51, 0x07, 0x61, 0x71, 0x13, 0x22,
263 0x32, 0x81, 0x08, 0x14, 0x42, 0x91, 0xa1, 0xb1,
264 0xc1, 0x09, 0x23, 0x33, 0x52, 0xf0, 0x15, 0x62,
265 0x72, 0xd1, 0x0a, 0x16, 0x24, 0x34, 0xe1, 0x25,
266 0xf1, 0x17, 0x18, 0x19, 0x1a, 0x26, 0x27, 0x28,
267 0x29, 0x2a, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a,
268 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a,
269 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a,
270 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a,
271 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a,
272 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89,
273 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98,
274 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
275 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6,
276 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5,
277 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4,
278 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe2, 0xe3,
279 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xf2,
280 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa,
281#ifdef CONEX_CAM
282/* the Conexant frames start with SOF0 */
283#else
284 0xff, 0xc0, 0x00, 0x11, /* SOF0 (start of frame 0 */
285 0x08, /* data precision */
286#endif
287};
288
289#ifndef CONEX_CAM
290/* variable part:
291 * 0x01, 0xe0, height
292 * 0x02, 0x80, width
293 * 0x03, component number
294 * 0x01,
295 * 0x21, samples Y
296 */
297
298/* end of header */
Jean-Francois Moine36e819d2009-01-07 16:49:57 -0300299static u8 eoh[] = {
Jean-Francois Moine63eb9542008-04-12 09:58:09 -0300300 0x00, /* quant Y */
301 0x02, 0x11, 0x01, /* samples CbCr - quant CbCr */
302 0x03, 0x11, 0x01,
303
Jean-Francois Moined43fa322008-06-12 10:58:58 -0300304 0xff, 0xda, 0x00, 0x0c, /* SOS (start of scan) */
Jean-Francois Moine63eb9542008-04-12 09:58:09 -0300305 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00
306};
307#endif
308
309/* -- output the JPEG header -- */
310static void jpeg_put_header(struct gspca_dev *gspca_dev,
311 struct gspca_frame *frame,
Jean-Francois Moine63eb9542008-04-12 09:58:09 -0300312 int samplesY)
313{
314#ifndef CONEX_CAM
Jean-Francois Moine36e819d2009-01-07 16:49:57 -0300315 u8 tmpbuf[8];
Jean-Francois Moine63eb9542008-04-12 09:58:09 -0300316#endif
317
318 gspca_frame_add(gspca_dev, FIRST_PACKET, frame,
Jean-Francois Moine36e819d2009-01-07 16:49:57 -0300319 jpeg_head, sizeof jpeg_head);
Jean-Francois Moine63eb9542008-04-12 09:58:09 -0300320#ifndef CONEX_CAM
321 tmpbuf[0] = gspca_dev->height >> 8;
322 tmpbuf[1] = gspca_dev->height & 0xff;
323 tmpbuf[2] = gspca_dev->width >> 8;
324 tmpbuf[3] = gspca_dev->width & 0xff;
325 tmpbuf[4] = 0x03; /* component number */
326 tmpbuf[5] = 0x01; /* first component */
327 tmpbuf[6] = samplesY;
328 gspca_frame_add(gspca_dev, INTER_PACKET, frame,
329 tmpbuf, 7);
330 gspca_frame_add(gspca_dev, INTER_PACKET, frame,
331 eoh, sizeof eoh);
332#endif
333}
334#endif