blob: df3f17d361b17d3e9d13db0b0847e8b2d183df65 [file] [log] [blame]
R.M. Thomas702422b2010-06-18 12:29:49 -07001/******************************************************************************
2* *
3* easycap_settings.c *
4* *
5******************************************************************************/
6/*
7 *
8 * Copyright (C) 2010 R.M. Thomas <rmthomas@sciolus.org>
9 *
10 *
11 * This 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 * (at your option) any later version.
15 *
16 * The software 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 software; if not, write to the Free Software
23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
24 *
25*/
26/*****************************************************************************/
27
28#include "easycap.h"
29#include "easycap_debug.h"
30
31/*---------------------------------------------------------------------------*/
32/*
33 * THE LEAST SIGNIFICANT BIT OF easycap_standard.mask HAS MEANING:
34 * 0 => 25 fps
35 * 1 => 30 fps
Mike Thomas40b8d502010-11-07 20:02:15 +000036 *
37 * THE MOST SIGNIFICANT BIT OF easycap_standard.mask HAS MEANING:
38 * 0 => full framerate
39 * 1 => 20% framerate
R.M. Thomas702422b2010-06-18 12:29:49 -070040 */
41/*---------------------------------------------------------------------------*/
Mike Thomas3d423e92010-07-11 10:51:13 +010042const struct easycap_standard easycap_standard[] = {
R.M. Thomas702422b2010-06-18 12:29:49 -070043{
Mike Thomas40b8d502010-11-07 20:02:15 +000044.mask = 0x00FF & PAL_BGHIN ,
R.M. Thomas702422b2010-06-18 12:29:49 -070045.v4l2_standard = {
46 .index = PAL_BGHIN,
47 .id = (V4L2_STD_PAL_B | V4L2_STD_PAL_G | V4L2_STD_PAL_H | \
48 V4L2_STD_PAL_I | V4L2_STD_PAL_N),
49 .name = "PAL_BGHIN",
50 .frameperiod = {1, 25},
51 .framelines = 625,
52 .reserved = {0, 0, 0, 0}
53 }
54},
55/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
56{
Mike Thomas40b8d502010-11-07 20:02:15 +000057.mask = 0x00FF & NTSC_N_443 ,
R.M. Thomas702422b2010-06-18 12:29:49 -070058.v4l2_standard = {
59 .index = NTSC_N_443,
60 .id = V4L2_STD_UNKNOWN,
61 .name = "NTSC_N_443",
62 .frameperiod = {1, 25},
63 .framelines = 480,
64 .reserved = {0, 0, 0, 0}
65}
66},
67/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
68{
Mike Thomas40b8d502010-11-07 20:02:15 +000069.mask = 0x00FF & PAL_Nc ,
R.M. Thomas702422b2010-06-18 12:29:49 -070070.v4l2_standard = {
71 .index = PAL_Nc,
72 .id = V4L2_STD_PAL_Nc,
73 .name = "PAL_Nc",
74 .frameperiod = {1, 25},
75 .framelines = 625,
76 .reserved = {0, 0, 0, 0}
77}
78},
79/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
80{
Mike Thomas40b8d502010-11-07 20:02:15 +000081.mask = 0x00FF & NTSC_N ,
R.M. Thomas702422b2010-06-18 12:29:49 -070082.v4l2_standard = {
83 .index = NTSC_N,
84 .id = V4L2_STD_UNKNOWN,
85 .name = "NTSC_N",
86 .frameperiod = {1, 25},
87 .framelines = 525,
88 .reserved = {0, 0, 0, 0}
89}
90},
91/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
92{
Mike Thomas40b8d502010-11-07 20:02:15 +000093.mask = 0x00FF & SECAM ,
R.M. Thomas702422b2010-06-18 12:29:49 -070094.v4l2_standard = {
95 .index = SECAM,
96 .id = V4L2_STD_SECAM,
97 .name = "SECAM",
98 .frameperiod = {1, 25},
99 .framelines = 625,
100 .reserved = {0, 0, 0, 0}
101}
102},
103/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
104{
Mike Thomas40b8d502010-11-07 20:02:15 +0000105.mask = 0x00FF & NTSC_M ,
R.M. Thomas702422b2010-06-18 12:29:49 -0700106.v4l2_standard = {
107 .index = NTSC_M,
108 .id = V4L2_STD_NTSC_M,
109 .name = "NTSC_M",
110 .frameperiod = {1, 30},
111 .framelines = 525,
112 .reserved = {0, 0, 0, 0}
113}
114},
115/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
116{
Mike Thomas40b8d502010-11-07 20:02:15 +0000117.mask = 0x00FF & NTSC_M_JP ,
R.M. Thomas702422b2010-06-18 12:29:49 -0700118.v4l2_standard = {
119 .index = NTSC_M_JP,
120 .id = V4L2_STD_NTSC_M_JP,
121 .name = "NTSC_M_JP",
122 .frameperiod = {1, 30},
123 .framelines = 525,
124 .reserved = {0, 0, 0, 0}
125}
126},
127/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
128{
Mike Thomas40b8d502010-11-07 20:02:15 +0000129.mask = 0x00FF & PAL_60 ,
R.M. Thomas702422b2010-06-18 12:29:49 -0700130.v4l2_standard = {
131 .index = PAL_60,
132 .id = V4L2_STD_PAL_60,
133 .name = "PAL_60",
134 .frameperiod = {1, 30},
135 .framelines = 525,
136 .reserved = {0, 0, 0, 0}
137}
138},
139/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
140{
Mike Thomas40b8d502010-11-07 20:02:15 +0000141.mask = 0x00FF & NTSC_443 ,
R.M. Thomas702422b2010-06-18 12:29:49 -0700142.v4l2_standard = {
143 .index = NTSC_443,
144 .id = V4L2_STD_NTSC_443,
145 .name = "NTSC_443",
146 .frameperiod = {1, 30},
147 .framelines = 525,
148 .reserved = {0, 0, 0, 0}
149}
150},
151/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
152{
Mike Thomas40b8d502010-11-07 20:02:15 +0000153.mask = 0x00FF & PAL_M ,
R.M. Thomas702422b2010-06-18 12:29:49 -0700154.v4l2_standard = {
155 .index = PAL_M,
156 .id = V4L2_STD_PAL_M,
157 .name = "PAL_M",
158 .frameperiod = {1, 30},
159 .framelines = 525,
160 .reserved = {0, 0, 0, 0}
161}
162},
163/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
164{
Mike Thomas40b8d502010-11-07 20:02:15 +0000165.mask = 0x8000 | (0x00FF & PAL_BGHIN_SLOW),
166.v4l2_standard = {
167 .index = PAL_BGHIN_SLOW,
168 .id = (V4L2_STD_PAL_B | V4L2_STD_PAL_G | V4L2_STD_PAL_H | \
169 V4L2_STD_PAL_I | V4L2_STD_PAL_N | \
170 (((v4l2_std_id)0x01) << 32)),
171 .name = "PAL_BGHIN_SLOW",
172 .frameperiod = {1, 5},
173 .framelines = 625,
174 .reserved = {0, 0, 0, 0}
175}
176},
177/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
178{
179.mask = 0x8000 | (0x00FF & NTSC_N_443_SLOW),
180.v4l2_standard = {
181 .index = NTSC_N_443_SLOW,
182 .id = (V4L2_STD_UNKNOWN | (((v4l2_std_id)0x11) << 32)),
183 .name = "NTSC_N_443_SLOW",
184 .frameperiod = {1, 5},
185 .framelines = 480,
186 .reserved = {0, 0, 0, 0}
187}
188},
189/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
190{
191.mask = 0x8000 | (0x00FF & PAL_Nc_SLOW),
192.v4l2_standard = {
193 .index = PAL_Nc_SLOW,
194 .id = (V4L2_STD_PAL_Nc | (((v4l2_std_id)0x01) << 32)),
195 .name = "PAL_Nc_SLOW",
196 .frameperiod = {1, 5},
197 .framelines = 625,
198 .reserved = {0, 0, 0, 0}
199}
200},
201/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
202{
203.mask = 0x8000 | (0x00FF & NTSC_N_SLOW),
204.v4l2_standard = {
205 .index = NTSC_N_SLOW,
206 .id = (V4L2_STD_UNKNOWN | (((v4l2_std_id)0x21) << 32)),
207 .name = "NTSC_N_SLOW",
208 .frameperiod = {1, 5},
209 .framelines = 525,
210 .reserved = {0, 0, 0, 0}
211}
212},
213/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
214{
215.mask = 0x8000 | (0x00FF & SECAM_SLOW),
216.v4l2_standard = {
217 .index = SECAM_SLOW,
218 .id = (V4L2_STD_SECAM | (((v4l2_std_id)0x01) << 32)),
219 .name = "SECAM_SLOW",
220 .frameperiod = {1, 5},
221 .framelines = 625,
222 .reserved = {0, 0, 0, 0}
223}
224},
225/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
226{
227.mask = 0x8000 | (0x00FF & NTSC_M_SLOW),
228.v4l2_standard = {
229 .index = NTSC_M_SLOW,
230 .id = (V4L2_STD_NTSC_M | (((v4l2_std_id)0x01) << 32)),
231 .name = "NTSC_M_SLOW",
232 .frameperiod = {1, 6},
233 .framelines = 525,
234 .reserved = {0, 0, 0, 0}
235}
236},
237/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
238{
239.mask = 0x8000 | (0x00FF & NTSC_M_JP_SLOW),
240.v4l2_standard = {
241 .index = NTSC_M_JP_SLOW,
242 .id = (V4L2_STD_NTSC_M_JP | (((v4l2_std_id)0x01) << 32)),
243 .name = "NTSC_M_JP_SLOW",
244 .frameperiod = {1, 6},
245 .framelines = 525,
246 .reserved = {0, 0, 0, 0}
247}
248},
249/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
250{
251.mask = 0x8000 | (0x00FF & PAL_60_SLOW),
252.v4l2_standard = {
253 .index = PAL_60_SLOW,
254 .id = (V4L2_STD_PAL_60 | (((v4l2_std_id)0x01) << 32)),
255 .name = "PAL_60_SLOW",
256 .frameperiod = {1, 6},
257 .framelines = 525,
258 .reserved = {0, 0, 0, 0}
259}
260},
261/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
262{
263.mask = 0x8000 | (0x00FF & NTSC_443_SLOW),
264.v4l2_standard = {
265 .index = NTSC_443_SLOW,
266 .id = (V4L2_STD_NTSC_443 | (((v4l2_std_id)0x01) << 32)),
267 .name = "NTSC_443_SLOW",
268 .frameperiod = {1, 6},
269 .framelines = 525,
270 .reserved = {0, 0, 0, 0}
271}
272},
273/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
274{
275.mask = 0x8000 | (0x00FF & PAL_M_SLOW),
276.v4l2_standard = {
277 .index = PAL_M_SLOW,
278 .id = (V4L2_STD_PAL_M | (((v4l2_std_id)0x01) << 32)),
279 .name = "PAL_M_SLOW",
280 .frameperiod = {1, 6},
281 .framelines = 525,
282 .reserved = {0, 0, 0, 0}
283}
284},
285/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
286{
R.M. Thomas702422b2010-06-18 12:29:49 -0700287.mask = 0xFFFF
288}
289};
290/*---------------------------------------------------------------------------*/
291/*
292 * THE 16-BIT easycap_format.mask HAS MEANING:
293 * (least significant) BIT 0: 0 => PAL, 25 FPS; 1 => NTSC, 30 FPS
Mike Thomas40b8d502010-11-07 20:02:15 +0000294 * BITS 2-4: RESERVED FOR DIFFERENTIATING STANDARDS
295 * BITS 5-7: NUMBER OF BYTES PER PIXEL
R.M. Thomas702422b2010-06-18 12:29:49 -0700296 * BIT 8: 0 => NATIVE BYTE ORDER; 1 => SWAPPED
297 * BITS 9-10: RESERVED FOR OTHER BYTE PERMUTATIONS
Mike Thomas40b8d502010-11-07 20:02:15 +0000298 * BIT 11: 0 => UNDECIMATED; 1 => DECIMATED
299 * BIT 12: 0 => OFFER FRAMES; 1 => OFFER FIELDS
300 * BIT 13: 0 => FULL FRAMERATE; 1 => REDUCED
301 * (most significant) BITS 14-15: RESERVED FOR OTHER FIELD/FRAME OPTIONS
R.M. Thomas702422b2010-06-18 12:29:49 -0700302 * IT FOLLOWS THAT:
Mike Thomas40b8d502010-11-07 20:02:15 +0000303 * bytesperpixel IS ((0x00E0 & easycap_format.mask) >> 5)
R.M. Thomas702422b2010-06-18 12:29:49 -0700304 * byteswaporder IS true IF (0 != (0x0100 & easycap_format.mask))
305 *
306 * decimatepixel IS true IF (0 != (0x0800 & easycap_format.mask))
307 *
308 * offerfields IS true IF (0 != (0x1000 & easycap_format.mask))
309 */
310/*---------------------------------------------------------------------------*/
311
312struct easycap_format easycap_format[1 + SETTINGS_MANY];
313
314int
315fillin_formats(void)
316{
317int i, j, k, m, n;
318__u32 width, height, pixelformat, bytesperline, sizeimage;
319__u32 field, colorspace;
320__u16 mask1, mask2, mask3, mask4;
321char name1[32], name2[32], name3[32], name4[32];
322
323for (i = 0, n = 0; i < STANDARD_MANY; i++) {
324 mask1 = 0x0000;
325 switch (i) {
326 case PAL_BGHIN: {
Mike Thomas40b8d502010-11-07 20:02:15 +0000327 mask1 = 0x1F & PAL_BGHIN;
R.M. Thomas702422b2010-06-18 12:29:49 -0700328 strcpy(&name1[0], "PAL_BGHIN");
329 colorspace = V4L2_COLORSPACE_470_SYSTEM_BG;
330 break;
331 }
332 case SECAM: {
Mike Thomas40b8d502010-11-07 20:02:15 +0000333 mask1 = 0x1F & SECAM;
R.M. Thomas702422b2010-06-18 12:29:49 -0700334 strcpy(&name1[0], "SECAM");
335 colorspace = V4L2_COLORSPACE_470_SYSTEM_BG;
336 break;
337 }
338 case PAL_Nc: {
Mike Thomas40b8d502010-11-07 20:02:15 +0000339 mask1 = 0x1F & PAL_Nc;
R.M. Thomas702422b2010-06-18 12:29:49 -0700340 strcpy(&name1[0], "PAL_Nc");
341 colorspace = V4L2_COLORSPACE_470_SYSTEM_BG;
342 break;
343 }
344 case PAL_60: {
Mike Thomas40b8d502010-11-07 20:02:15 +0000345 mask1 = 0x1F & PAL_60;
R.M. Thomas702422b2010-06-18 12:29:49 -0700346 strcpy(&name1[0], "PAL_60");
347 colorspace = V4L2_COLORSPACE_470_SYSTEM_BG;
348 break;
349 }
350 case PAL_M: {
Mike Thomas40b8d502010-11-07 20:02:15 +0000351 mask1 = 0x1F & PAL_M;
R.M. Thomas702422b2010-06-18 12:29:49 -0700352 strcpy(&name1[0], "PAL_M");
353 colorspace = V4L2_COLORSPACE_470_SYSTEM_BG;
354 break;
355 }
356 case NTSC_M: {
Mike Thomas40b8d502010-11-07 20:02:15 +0000357 mask1 = 0x1F & NTSC_M;
R.M. Thomas702422b2010-06-18 12:29:49 -0700358 strcpy(&name1[0], "NTSC_M");
359 colorspace = V4L2_COLORSPACE_470_SYSTEM_M;
360 break;
361 }
362 case NTSC_443: {
Mike Thomas40b8d502010-11-07 20:02:15 +0000363 mask1 = 0x1F & NTSC_443;
R.M. Thomas702422b2010-06-18 12:29:49 -0700364 strcpy(&name1[0], "NTSC_443");
365 colorspace = V4L2_COLORSPACE_470_SYSTEM_M;
366 break;
367 }
368 case NTSC_M_JP: {
Mike Thomas40b8d502010-11-07 20:02:15 +0000369 mask1 = 0x1F & NTSC_M_JP;
R.M. Thomas702422b2010-06-18 12:29:49 -0700370 strcpy(&name1[0], "NTSC_M_JP");
371 colorspace = V4L2_COLORSPACE_470_SYSTEM_M;
372 break;
373 }
374 case NTSC_N: {
Mike Thomas40b8d502010-11-07 20:02:15 +0000375 mask1 = 0x1F & NTSC_M;
R.M. Thomas702422b2010-06-18 12:29:49 -0700376 strcpy(&name1[0], "NTSC_N");
377 colorspace = V4L2_COLORSPACE_470_SYSTEM_M;
378 break;
379 }
380 case NTSC_N_443: {
Mike Thomas40b8d502010-11-07 20:02:15 +0000381 mask1 = 0x1F & NTSC_N_443;
R.M. Thomas702422b2010-06-18 12:29:49 -0700382 strcpy(&name1[0], "NTSC_N_443");
383 colorspace = V4L2_COLORSPACE_470_SYSTEM_M;
384 break;
385 }
Mike Thomas40b8d502010-11-07 20:02:15 +0000386 case PAL_BGHIN_SLOW: {
387 mask1 = 0x001F & PAL_BGHIN_SLOW;
388 mask1 |= 0x0200;
389 strcpy(&name1[0], "PAL_BGHIN_SLOW");
390 colorspace = V4L2_COLORSPACE_470_SYSTEM_BG;
391 break;
392 }
393 case SECAM_SLOW: {
394 mask1 = 0x001F & SECAM_SLOW;
395 mask1 |= 0x0200;
396 strcpy(&name1[0], "SECAM_SLOW");
397 colorspace = V4L2_COLORSPACE_470_SYSTEM_BG;
398 break;
399 }
400 case PAL_Nc_SLOW: {
401 mask1 = 0x001F & PAL_Nc_SLOW;
402 mask1 |= 0x0200;
403 strcpy(&name1[0], "PAL_Nc_SLOW");
404 colorspace = V4L2_COLORSPACE_470_SYSTEM_BG;
405 break;
406 }
407 case PAL_60_SLOW: {
408 mask1 = 0x001F & PAL_60_SLOW;
409 mask1 |= 0x0200;
410 strcpy(&name1[0], "PAL_60_SLOW");
411 colorspace = V4L2_COLORSPACE_470_SYSTEM_BG;
412 break;
413 }
414 case PAL_M_SLOW: {
415 mask1 = 0x001F & PAL_M_SLOW;
416 mask1 |= 0x0200;
417 strcpy(&name1[0], "PAL_M_SLOW");
418 colorspace = V4L2_COLORSPACE_470_SYSTEM_BG;
419 break;
420 }
421 case NTSC_M_SLOW: {
422 mask1 = 0x001F & NTSC_M_SLOW;
423 mask1 |= 0x0200;
424 strcpy(&name1[0], "NTSC_M_SLOW");
425 colorspace = V4L2_COLORSPACE_470_SYSTEM_M;
426 break;
427 }
428 case NTSC_443_SLOW: {
429 mask1 = 0x001F & NTSC_443_SLOW;
430 mask1 |= 0x0200;
431 strcpy(&name1[0], "NTSC_443_SLOW");
432 colorspace = V4L2_COLORSPACE_470_SYSTEM_M;
433 break;
434 }
435 case NTSC_M_JP_SLOW: {
436 mask1 = 0x001F & NTSC_M_JP_SLOW;
437 mask1 |= 0x0200;
438 strcpy(&name1[0], "NTSC_M_JP_SLOW");
439 colorspace = V4L2_COLORSPACE_470_SYSTEM_M;
440 break;
441 }
442 case NTSC_N_SLOW: {
443 mask1 = 0x001F & NTSC_N_SLOW;
444 mask1 |= 0x0200;
445 strcpy(&name1[0], "NTSC_N_SLOW");
446 colorspace = V4L2_COLORSPACE_470_SYSTEM_M;
447 break;
448 }
449 case NTSC_N_443_SLOW: {
450 mask1 = 0x001F & NTSC_N_443_SLOW;
451 mask1 |= 0x0200;
452 strcpy(&name1[0], "NTSC_N_443_SLOW");
453 colorspace = V4L2_COLORSPACE_470_SYSTEM_M;
454 break;
455 }
R.M. Thomas702422b2010-06-18 12:29:49 -0700456 default:
457 return -1;
458 }
459
460 for (j = 0; j < RESOLUTION_MANY; j++) {
461 mask2 = 0x0000;
462 switch (j) {
463 case AT_720x576: {
464 if (0x1 & mask1)
465 continue;
466 strcpy(&name2[0], "_AT_720x576");
467 width = 720; height = 576; break;
468 }
469 case AT_704x576: {
470 if (0x1 & mask1)
471 continue;
472 strcpy(&name2[0], "_AT_704x576");
473 width = 704; height = 576; break;
474 }
475 case AT_640x480: {
476 strcpy(&name2[0], "_AT_640x480");
477 width = 640; height = 480; break;
478 }
479 case AT_720x480: {
480 if (!(0x1 & mask1))
481 continue;
482 strcpy(&name2[0], "_AT_720x480");
483 width = 720; height = 480; break;
484 }
485 case AT_360x288: {
486 if (0x1 & mask1)
487 continue;
488 strcpy(&name2[0], "_AT_360x288");
489 width = 360; height = 288; mask2 = 0x0800; break;
490 }
491 case AT_320x240: {
492 strcpy(&name2[0], "_AT_320x240");
493 width = 320; height = 240; mask2 = 0x0800; break;
494 }
495 case AT_360x240: {
496 if (!(0x1 & mask1))
497 continue;
498 strcpy(&name2[0], "_AT_360x240");
499 width = 360; height = 240; mask2 = 0x0800; break;
500 }
501 default:
502 return -2;
503 }
504
505 for (k = 0; k < PIXELFORMAT_MANY; k++) {
506 mask3 = 0x0000;
507 switch (k) {
508 case FMT_UYVY: {
509 strcpy(&name3[0], "_" STRINGIZE(FMT_UYVY));
510 pixelformat = V4L2_PIX_FMT_UYVY;
Mike Thomas40b8d502010-11-07 20:02:15 +0000511 mask3 |= (0x02 << 5);
R.M. Thomas702422b2010-06-18 12:29:49 -0700512 break;
513 }
514 case FMT_YUY2: {
515 strcpy(&name3[0], "_" STRINGIZE(FMT_YUY2));
516 pixelformat = V4L2_PIX_FMT_YUYV;
Mike Thomas40b8d502010-11-07 20:02:15 +0000517 mask3 |= (0x02 << 5);
R.M. Thomas702422b2010-06-18 12:29:49 -0700518 mask3 |= 0x0100;
519 break;
520 }
521 case FMT_RGB24: {
522 strcpy(&name3[0], "_" STRINGIZE(FMT_RGB24));
523 pixelformat = V4L2_PIX_FMT_RGB24;
Mike Thomas40b8d502010-11-07 20:02:15 +0000524 mask3 |= (0x03 << 5);
R.M. Thomas702422b2010-06-18 12:29:49 -0700525 break;
526 }
527 case FMT_RGB32: {
528 strcpy(&name3[0], "_" STRINGIZE(FMT_RGB32));
529 pixelformat = V4L2_PIX_FMT_RGB32;
Mike Thomas40b8d502010-11-07 20:02:15 +0000530 mask3 |= (0x04 << 5);
R.M. Thomas702422b2010-06-18 12:29:49 -0700531 break;
532 }
533 case FMT_BGR24: {
534 strcpy(&name3[0], "_" STRINGIZE(FMT_BGR24));
535 pixelformat = V4L2_PIX_FMT_BGR24;
Mike Thomas40b8d502010-11-07 20:02:15 +0000536 mask3 |= (0x03 << 5);
R.M. Thomas702422b2010-06-18 12:29:49 -0700537 mask3 |= 0x0100;
538 break;
539 }
540 case FMT_BGR32: {
541 strcpy(&name3[0], "_" STRINGIZE(FMT_BGR32));
542 pixelformat = V4L2_PIX_FMT_BGR32;
Mike Thomas40b8d502010-11-07 20:02:15 +0000543 mask3 |= (0x04 << 5);
R.M. Thomas702422b2010-06-18 12:29:49 -0700544 mask3 |= 0x0100;
545 break;
546 }
547 default:
548 return -3;
549 }
550 bytesperline = width * ((mask3 & 0x00F0) >> 4);
551 sizeimage = bytesperline * height;
552
553 for (m = 0; m < INTERLACE_MANY; m++) {
554 mask4 = 0x0000;
555 switch (m) {
556 case FIELD_NONE: {
557 strcpy(&name4[0], "-n");
558 field = V4L2_FIELD_NONE;
559 break;
560 }
561 case FIELD_INTERLACED: {
562 strcpy(&name4[0], "-i");
R.M. Thomas702422b2010-06-18 12:29:49 -0700563 mask4 |= 0x1000;
Mike Thomas40b8d502010-11-07 20:02:15 +0000564 field = V4L2_FIELD_INTERLACED;
R.M. Thomas702422b2010-06-18 12:29:49 -0700565 break;
566 }
567 default:
568 return -4;
569 }
570 if (SETTINGS_MANY <= n)
571 return -5;
572 strcpy(&easycap_format[n].name[0], &name1[0]);
573 strcat(&easycap_format[n].name[0], &name2[0]);
574 strcat(&easycap_format[n].name[0], &name3[0]);
575 strcat(&easycap_format[n].name[0], &name4[0]);
576 easycap_format[n].mask = \
577 mask1 | mask2 | mask3 | mask4;
578 easycap_format[n].v4l2_format\
579 .type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
580 easycap_format[n].v4l2_format\
581 .fmt.pix.width = width;
582 easycap_format[n].v4l2_format\
583 .fmt.pix.height = height;
584 easycap_format[n].v4l2_format\
585 .fmt.pix.pixelformat = pixelformat;
586 easycap_format[n].v4l2_format\
587 .fmt.pix.field = field;
588 easycap_format[n].v4l2_format\
589 .fmt.pix.bytesperline = bytesperline;
590 easycap_format[n].v4l2_format\
591 .fmt.pix.sizeimage = sizeimage;
592 easycap_format[n].v4l2_format\
593 .fmt.pix.colorspace = colorspace;
594 easycap_format[n].v4l2_format\
595 .fmt.pix.priv = 0;
596 n++;
597 }
598 }
599 }
600}
601if ((1 + SETTINGS_MANY) <= n)
602 return -6;
603easycap_format[n].mask = 0xFFFF;
604return n;
605}
606/*---------------------------------------------------------------------------*/
607struct v4l2_queryctrl easycap_control[] = \
Mike Thomasce36ced2010-11-07 19:56:40 +0000608{{
R.M. Thomas702422b2010-06-18 12:29:49 -0700609.id = V4L2_CID_BRIGHTNESS,
610.type = V4L2_CTRL_TYPE_INTEGER,
611.name = "Brightness",
612.minimum = 0,
613.maximum = 255,
614.step = 1,
615.default_value = SAA_0A_DEFAULT,
616.flags = 0,
617.reserved = {0, 0}
618},
619/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
620{
621.id = V4L2_CID_CONTRAST,
622.type = V4L2_CTRL_TYPE_INTEGER,
623.name = "Contrast",
624.minimum = 0,
625.maximum = 255,
626.step = 1,
627.default_value = SAA_0B_DEFAULT + 128,
628.flags = 0,
629.reserved = {0, 0}
630},
631/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
632{
633.id = V4L2_CID_SATURATION,
634.type = V4L2_CTRL_TYPE_INTEGER,
635.name = "Saturation",
636.minimum = 0,
637.maximum = 255,
638.step = 1,
639.default_value = SAA_0C_DEFAULT + 128,
640.flags = 0,
641.reserved = {0, 0}
642},
643/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
644{
645.id = V4L2_CID_HUE,
646.type = V4L2_CTRL_TYPE_INTEGER,
647.name = "Hue",
648.minimum = 0,
649.maximum = 255,
650.step = 1,
651.default_value = SAA_0D_DEFAULT + 128,
652.flags = 0,
653.reserved = {0, 0}
654},
655/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
656{
657.id = V4L2_CID_AUDIO_VOLUME,
658.type = V4L2_CTRL_TYPE_INTEGER,
659.name = "Volume",
660.minimum = 0,
661.maximum = 31,
662.step = 1,
663.default_value = 16,
664.flags = 0,
665.reserved = {0, 0}
666},
667/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
668{
669.id = V4L2_CID_AUDIO_MUTE,
670.type = V4L2_CTRL_TYPE_BOOLEAN,
671.name = "Mute",
672.default_value = true,
673.flags = 0,
674.reserved = {0, 0}
675},
676/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
677{
678.id = 0xFFFFFFFF
679}
Mike Thomasce36ced2010-11-07 19:56:40 +0000680};
R.M. Thomas702422b2010-06-18 12:29:49 -0700681/*****************************************************************************/