diff options
author | Jean-Francois Moine <moinejf@free.fr> | 2009-03-03 03:33:41 -0500 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2009-03-30 11:43:22 -0400 |
commit | 71cb2764fcc51bd9e1b95be5b0f2da6f026634c7 (patch) | |
tree | cad0450231d5b4e7db071396ea5a33dabd3e314e /drivers/media/video/gspca/jpeg.h | |
parent | c98afbfc20355dd04a7b817b232e06a4c3e73bac (diff) |
V4L/DVB (11039): gspca - most jpeg subdrivers: Change the JPEG header creation.
Signed-off-by: Jean-Francois Moine <moinejf@free.fr>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/video/gspca/jpeg.h')
-rw-r--r-- | drivers/media/video/gspca/jpeg.h | 250 |
1 files changed, 42 insertions, 208 deletions
diff --git a/drivers/media/video/gspca/jpeg.h b/drivers/media/video/gspca/jpeg.h index 7d2df9720025..de63c36806c0 100644 --- a/drivers/media/video/gspca/jpeg.h +++ b/drivers/media/video/gspca/jpeg.h | |||
@@ -27,42 +27,16 @@ | |||
27 | /* | 27 | /* |
28 | * generation options | 28 | * generation options |
29 | * CONEX_CAM Conexant if present | 29 | * CONEX_CAM Conexant if present |
30 | * QUANT_VAL quantization table (0..8) | ||
31 | */ | 30 | */ |
32 | 31 | ||
33 | /* | 32 | /* JPEG header */ |
34 | * JPEG header: | ||
35 | * - start of jpeg frame | ||
36 | * - quantization table | ||
37 | * - huffman table | ||
38 | * - start of SOF0 | ||
39 | */ | ||
40 | static const u8 jpeg_head[] = { | 33 | static const u8 jpeg_head[] = { |
41 | 0xff, 0xd8, /* jpeg */ | 34 | 0xff, 0xd8, /* jpeg */ |
35 | |||
36 | /* quantization table quality 50% */ | ||
42 | 0xff, 0xdb, 0x00, 0x84, /* DQT */ | 37 | 0xff, 0xdb, 0x00, 0x84, /* DQT */ |
43 | #if QUANT_VAL == 0 | ||
44 | /* index 0 - Q40*/ | ||
45 | 0, /* quantization table part 1 */ | ||
46 | 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, | ||
54 | 1, /* quantization table part 2 */ | ||
55 | 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 | ||
64 | /* index 1 - Q50 */ | ||
65 | 0, | 38 | 0, |
39 | #define JPEG_QT0_OFFSET 7 | ||
66 | 0x10, 0x0b, 0x0c, 0x0e, 0x0c, 0x0a, 0x10, 0x0e, | 40 | 0x10, 0x0b, 0x0c, 0x0e, 0x0c, 0x0a, 0x10, 0x0e, |
67 | 0x0d, 0x0e, 0x12, 0x11, 0x10, 0x13, 0x18, 0x28, | 41 | 0x0d, 0x0e, 0x12, 0x11, 0x10, 0x13, 0x18, 0x28, |
68 | 0x1a, 0x18, 0x16, 0x16, 0x18, 0x31, 0x23, 0x25, | 42 | 0x1a, 0x18, 0x16, 0x16, 0x18, 0x31, 0x23, 0x25, |
@@ -72,6 +46,7 @@ static const u8 jpeg_head[] = { | |||
72 | 0x5f, 0x62, 0x67, 0x68, 0x67, 0x3e, 0x4d, 0x71, | 46 | 0x5f, 0x62, 0x67, 0x68, 0x67, 0x3e, 0x4d, 0x71, |
73 | 0x79, 0x70, 0x64, 0x78, 0x5c, 0x65, 0x67, 0x63, | 47 | 0x79, 0x70, 0x64, 0x78, 0x5c, 0x65, 0x67, 0x63, |
74 | 1, | 48 | 1, |
49 | #define JPEG_QT1_OFFSET 72 | ||
75 | 0x11, 0x12, 0x12, 0x18, 0x15, 0x18, 0x2f, 0x1a, | 50 | 0x11, 0x12, 0x12, 0x18, 0x15, 0x18, 0x2f, 0x1a, |
76 | 0x1a, 0x2f, 0x63, 0x42, 0x38, 0x42, 0x63, 0x63, | 51 | 0x1a, 0x2f, 0x63, 0x42, 0x38, 0x42, 0x63, 0x63, |
77 | 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, | 52 | 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, |
@@ -80,149 +55,6 @@ static const u8 jpeg_head[] = { | |||
80 | 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, | 55 | 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, |
81 | 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, | 56 | 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, |
82 | 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, | 57 | 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, |
83 | #elif QUANT_VAL == 2 | ||
84 | /* index 2 Q60 */ | ||
85 | 0, | ||
86 | 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, | ||
94 | 1, | ||
95 | 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 | ||
104 | /* index 3 - Q70 */ | ||
105 | 0, | ||
106 | 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, | ||
114 | 1, | ||
115 | 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 | ||
124 | /* index 4 - Q80 */ | ||
125 | 0, | ||
126 | 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, | ||
134 | 1, | ||
135 | 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 | ||
144 | /* index 5 - Q85 */ | ||
145 | 0, | ||
146 | 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, | ||
154 | 1, | ||
155 | 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 | ||
164 | /* index 6 - 86 */ | ||
165 | 0, | ||
166 | 0x04, 0x03, 0x03, 0x04, 0x03, 0x03, 0x04, 0x04, | ||
167 | 0x04, 0x04, 0x05, 0x05, 0x04, 0x05, 0x07, 0x0B, | ||
168 | 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, | ||
174 | 1, | ||
175 | 0x05, 0x05, 0x05, 0x07, 0x06, 0x07, 0x0D, 0x07, | ||
176 | 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 | ||
184 | /* index 7 - 88 */ | ||
185 | 0, | ||
186 | 0x04, 0x03, 0x03, 0x03, 0x03, 0x02, 0x04, 0x03, | ||
187 | 0x03, 0x03, 0x04, 0x04, 0x04, 0x05, 0x06, 0x0a, | ||
188 | 0x06, 0x06, 0x05, 0x05, 0x06, 0x0C, 0x08, 0x09, | ||
189 | 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, | ||
194 | 1, | ||
195 | 0x04, 0x04, 0x04, 0x06, 0x05, 0x06, 0x0B, 0x06, | ||
196 | 0x06, 0x0B, 0x18, 0x10, 0x0d, 0x10, 0x18, 0x18, | ||
197 | 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, | ||
203 | #elif QUANT_VAL == 8 | ||
204 | /* index 8 - ?? */ | ||
205 | 0, | ||
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, | ||
210 | 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, | ||
214 | 1, | ||
215 | 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x06, 0x03, | ||
216 | 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 | ||
226 | 58 | ||
227 | /* huffman table */ | 59 | /* huffman table */ |
228 | 0xff, 0xc4, 0x01, 0xa2, | 60 | 0xff, 0xc4, 0x01, 0xa2, |
@@ -280,55 +112,57 @@ static const u8 jpeg_head[] = { | |||
280 | 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, | 112 | 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, |
281 | #ifdef CONEX_CAM | 113 | #ifdef CONEX_CAM |
282 | /* the Conexant frames start with SOF0 */ | 114 | /* the Conexant frames start with SOF0 */ |
115 | #define JPEG_HDR_SZ 556 | ||
283 | #else | 116 | #else |
284 | 0xff, 0xc0, 0x00, 0x11, /* SOF0 (start of frame 0 */ | 117 | 0xff, 0xc0, 0x00, 0x11, /* SOF0 (start of frame 0 */ |
285 | 0x08, /* data precision */ | 118 | 0x08, /* data precision */ |
286 | #endif | 119 | #define JPEG_HEIGHT_OFFSET 561 |
287 | }; | 120 | 0x01, 0xe0, /* height */ |
288 | 121 | 0x02, 0x80, /* width */ | |
289 | #ifndef CONEX_CAM | 122 | 0x03, /* component number */ |
290 | /* variable part: | 123 | 0x01, |
291 | * 0x01, 0xe0, height | 124 | 0x21, /* samples Y */ |
292 | * 0x02, 0x80, width | ||
293 | * 0x03, component number | ||
294 | * 0x01, | ||
295 | * 0x21, samples Y | ||
296 | */ | ||
297 | |||
298 | /* end of header */ | ||
299 | static u8 eoh[] = { | ||
300 | 0x00, /* quant Y */ | 125 | 0x00, /* quant Y */ |
301 | 0x02, 0x11, 0x01, /* samples CbCr - quant CbCr */ | 126 | 0x02, 0x11, 0x01, /* samples CbCr - quant CbCr */ |
302 | 0x03, 0x11, 0x01, | 127 | 0x03, 0x11, 0x01, |
303 | 128 | ||
304 | 0xff, 0xda, 0x00, 0x0c, /* SOS (start of scan) */ | 129 | 0xff, 0xda, 0x00, 0x0c, /* SOS (start of scan) */ |
305 | 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00 | 130 | 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00 |
306 | }; | 131 | #define JPEG_HDR_SZ 589 |
307 | #endif | 132 | #endif |
133 | }; | ||
308 | 134 | ||
309 | /* -- output the JPEG header -- */ | 135 | /* define the JPEG header */ |
310 | static void jpeg_put_header(struct gspca_dev *gspca_dev, | 136 | static void jpeg_define(u8 *jpeg_hdr, |
311 | struct gspca_frame *frame, | 137 | int height, |
312 | int samplesY) | 138 | int width, |
139 | int samplesY) | ||
313 | { | 140 | { |
141 | memcpy(jpeg_hdr, jpeg_head, sizeof jpeg_head); | ||
314 | #ifndef CONEX_CAM | 142 | #ifndef CONEX_CAM |
315 | u8 tmpbuf[8]; | 143 | jpeg_hdr[JPEG_HEIGHT_OFFSET + 0] = height >> 8; |
144 | jpeg_hdr[JPEG_HEIGHT_OFFSET + 1] = height & 0xff; | ||
145 | jpeg_hdr[JPEG_HEIGHT_OFFSET + 2] = width >> 8; | ||
146 | jpeg_hdr[JPEG_HEIGHT_OFFSET + 3] = width & 0xff; | ||
147 | jpeg_hdr[JPEG_HEIGHT_OFFSET + 6] = samplesY; | ||
316 | #endif | 148 | #endif |
149 | } | ||
317 | 150 | ||
318 | gspca_frame_add(gspca_dev, FIRST_PACKET, frame, | 151 | /* set the JPEG quality */ |
319 | jpeg_head, sizeof jpeg_head); | 152 | static void jpeg_set_qual(u8 *jpeg_hdr, |
320 | #ifndef CONEX_CAM | 153 | int quality) |
321 | tmpbuf[0] = gspca_dev->height >> 8; | 154 | { |
322 | tmpbuf[1] = gspca_dev->height & 0xff; | 155 | int i, sc; |
323 | tmpbuf[2] = gspca_dev->width >> 8; | 156 | |
324 | tmpbuf[3] = gspca_dev->width & 0xff; | 157 | if (quality < 50) |
325 | tmpbuf[4] = 0x03; /* component number */ | 158 | sc = 5000 / quality; |
326 | tmpbuf[5] = 0x01; /* first component */ | 159 | else |
327 | tmpbuf[6] = samplesY; | 160 | sc = 200 - quality * 2; |
328 | gspca_frame_add(gspca_dev, INTER_PACKET, frame, | 161 | for (i = 0; i < 64; i++) { |
329 | tmpbuf, 7); | 162 | jpeg_hdr[JPEG_QT0_OFFSET + i] = |
330 | gspca_frame_add(gspca_dev, INTER_PACKET, frame, | 163 | (jpeg_head[JPEG_QT0_OFFSET + i] * sc + 50) / 100; |
331 | eoh, sizeof eoh); | 164 | jpeg_hdr[JPEG_QT1_OFFSET + i] = |
332 | #endif | 165 | (jpeg_head[JPEG_QT1_OFFSET + i] * sc + 50) / 100; |
166 | } | ||
333 | } | 167 | } |
334 | #endif | 168 | #endif |