CTC++ Coverage Report - Execution Profile    #471/1532

Files Summary | Functions Summary | Execution Profile | Index | No Index
First | Previous | Next | Last


File: drivers/media/video/bttv-driver.c
Instrumentation mode: function-decision-multicondition
TER: 0 % ( 7/1803)

Start/ End/    
True False - Line Source

  1 /*
  2 
  3     bttv - Bt848 frame grabber driver
  4 
  5     Copyright (C) 1996,97,98 Ralph  Metzler <rjkm@thp.uni-koeln.de>
  6             & Marcus Metzler <mocm@thp.uni-koeln.de>
  7     (c) 1999-2002 Gerd Knorr <kraxel@bytesex.org>
  8 
  9     some v4l2 code lines are taken from Justin's bttv2 driver which is
  10     (c) 2000 Justin Schoeman <justin@suntiger.ee.up.ac.za>
  11 
  12     This program is free software; you can redistribute it and/or modify
  13     it under the terms of the GNU General Public License as published by
  14     the Free Software Foundation; either version 2 of the License, or
  15     (at your option) any later version.
  16 
  17     This program is distributed in the hope that it will be useful,
  18     but WITHOUT ANY WARRANTY; without even the implied warranty of
  19     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  20     GNU General Public License for more details.
  21 
  22     You should have received a copy of the GNU General Public License
  23     along with this program; if not, write to the Free Software
  24     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  25 */
  26 
  27 #include <linux/init.h>
  28 #include <linux/module.h>
  29 #include <linux/moduleparam.h>
  30 #include <linux/delay.h>
  31 #include <linux/errno.h>
  32 #include <linux/fs.h>
  33 #include <linux/kernel.h>
  34 #include <linux/sched.h>
  35 #include <linux/interrupt.h>
  36 #include <linux/kdev_t.h>
  37 #include "bttvp.h"
  38 #include <media/v4l2-common.h>
  39 
  40 #include <linux/dma-mapping.h>
  41 
  42 #include <asm/io.h>
  43 #include <asm/byteorder.h>
  44 
  45 #include "rds.h"
  46 
  47 
  48 unsigned int bttv_num;         /* number of Bt848s in use */
  49 struct bttv bttvs[BTTV_MAX];
  50 
  51 unsigned int bttv_debug;
  52 unsigned int bttv_verbose = 1;
  53 unsigned int bttv_gpio;
  54 
  55 /* config variables */
  56 #ifdef __BIG_ENDIAN
  57 static unsigned int bigendian=1;
  58 #else
  59 static unsigned int bigendian;
  60 #endif
  61 static unsigned int radio[BTTV_MAX];
  62 static unsigned int irq_debug;
  63 static unsigned int gbuffers = 8;
  64 static unsigned int gbufsize = 0x208000;
  65 
  66 static int video_nr = -1;
  67 static int radio_nr = -1;
  68 static int vbi_nr = -1;
  69 static int debug_latency;
  70 
  71 static unsigned int fdsr;
  72 
  73 /* options */
  74 static unsigned int combfilter;
  75 static unsigned int lumafilter;
  76 static unsigned int automute    = 1;
  77 static unsigned int chroma_agc;
  78 static unsigned int adc_crush   = 1;
  79 static unsigned int whitecrush_upper = 0xCF;
  80 static unsigned int whitecrush_lower = 0x7F;
  81 static unsigned int vcr_hack;
  82 static unsigned int irq_iswitch;
  83 static unsigned int uv_ratio    = 50;
  84 static unsigned int full_luma_range;
  85 static unsigned int coring;
  86 extern int no_overlay;
  87 
  88 /* API features (turn on/off stuff for testing) */
  89 static unsigned int v4l2        = 1;
  90 
  91 /* insmod args */
 
- 92 module_param(bttv_verbose,      int, 0644);
 - 92 return ( & ( bttv_verbose ) )
 
- 93 module_param(bttv_gpio,         int, 0644);
 - 93 return ( & ( bttv_gpio ) )
 
- 94 module_param(bttv_debug,        int, 0644);
 - 94 return ( & ( bttv_debug ) )
 
- 95 module_param(irq_debug,         int, 0644);
 - 95 return ( & ( irq_debug ) )
 
- 96 module_param(debug_latency,     int, 0644);
 - 96 return ( & ( debug_latency ) )
  97 
 
- 98 module_param(fdsr,              int, 0444);
 - 98 return ( & ( fdsr ) )
 
- 99 module_param(video_nr,          int, 0444);
 - 99 return ( & ( video_nr ) )
 
- 100 module_param(radio_nr,          int, 0444);
 - 100 return ( & ( radio_nr ) )
 
- 101 module_param(vbi_nr,            int, 0444);
 - 101 return ( & ( vbi_nr ) )
 
- 102 module_param(gbuffers,          int, 0444);
 - 102 return ( & ( gbuffers ) )
 
- 103 module_param(gbufsize,          int, 0444);
 - 103 return ( & ( gbufsize ) )
  104 
 
- 105 module_param(v4l2,              int, 0644);
 - 105 return ( & ( v4l2 ) )
 
- 106 module_param(bigendian,         int, 0644);
 - 106 return ( & ( bigendian ) )
 
- 107 module_param(irq_iswitch,       int, 0644);
 - 107 return ( & ( irq_iswitch ) )
 
- 108 module_param(combfilter,        int, 0444);
 - 108 return ( & ( combfilter ) )
 
- 109 module_param(lumafilter,        int, 0444);
 - 109 return ( & ( lumafilter ) )
 
- 110 module_param(automute,          int, 0444);
 - 110 return ( & ( automute ) )
 
- 111 module_param(chroma_agc,        int, 0444);
 - 111 return ( & ( chroma_agc ) )
 
- 112 module_param(adc_crush,         int, 0444);
 - 112 return ( & ( adc_crush ) )
 
- 113 module_param(whitecrush_upper,  int, 0444);
 - 113 return ( & ( whitecrush_upper ) )
 
- 114 module_param(whitecrush_lower,  int, 0444);
 - 114 return ( & ( whitecrush_lower ) )
 
- 115 module_param(vcr_hack,          int, 0444);
 - 115 return ( & ( vcr_hack ) )
 
- 116 module_param(uv_ratio,          int, 0444);
 - 116 return ( & ( uv_ratio ) )
 
- 117 module_param(full_luma_range,   int, 0444);
 - 117 return ( & ( full_luma_range ) )
 
- 118 module_param(coring,            int, 0444);
 - 118 return ( & ( coring ) )
  119 
  120 module_param_array(radio, int, NULL, 0444);
  121 
  122 MODULE_PARM_DESC(radio,"The TV card supports radio, default is 0 (no)");
  123 MODULE_PARM_DESC(bigendian,"byte order of the framebuffer, default is native endian");
  124 MODULE_PARM_DESC(bttv_verbose,"verbose startup messages, default is 1 (yes)");
  125 MODULE_PARM_DESC(bttv_gpio,"log gpio changes, default is 0 (no)");
  126 MODULE_PARM_DESC(bttv_debug,"debug messages, default is 0 (no)");
  127 MODULE_PARM_DESC(irq_debug,"irq handler debug messages, default is 0 (no)");
  128 MODULE_PARM_DESC(gbuffers,"number of capture buffers. range 2-32, default 8");
  129 MODULE_PARM_DESC(gbufsize,"size of the capture buffers, default is 0x208000");
  130 MODULE_PARM_DESC(automute,"mute audio on bad/missing video signal, default is 1 (yes)");
  131 MODULE_PARM_DESC(chroma_agc,"enables the AGC of chroma signal, default is 0 (no)");
  132 MODULE_PARM_DESC(adc_crush,"enables the luminance ADC crush, default is 1 (yes)");
  133 MODULE_PARM_DESC(whitecrush_upper,"sets the white crush upper value, default is 207");
  134 MODULE_PARM_DESC(whitecrush_lower,"sets the white crush lower value, default is 127");
  135 MODULE_PARM_DESC(vcr_hack,"enables the VCR hack (improves synch on poor VCR tapes), default is 0 (no)");
  136 MODULE_PARM_DESC(irq_iswitch,"switch inputs in irq handler");
  137 MODULE_PARM_DESC(uv_ratio,"ratio between u and v gains, default is 50");
  138 MODULE_PARM_DESC(full_luma_range,"use the full luma range, default is 0 (no)");
  139 MODULE_PARM_DESC(coring,"set the luma coring level, default is 0 (no)");
  140 
  141 MODULE_DESCRIPTION("bttv - v4l/v4l2 driver module for bt848/878 based cards");
  142 MODULE_AUTHOR("Ralph Metzler & Marcus Metzler & Gerd Knorr");
  143 MODULE_LICENSE("GPL");
  144 
  145 /* ----------------------------------------------------------------------- */
  146 /* sysfs                                                                   */
  147 
 
- 148 static ssize_t show_card(struct class_device *cd, char *buf)
  149 {
  150    struct video_device *vfd = to_video_device(cd);
  151    struct bttv *btv = dev_get_drvdata(vfd->dev);
    152    return sprintf(buf, "%d\n", btv ? btv->c.type : UNSET);
- 152 ternary-?: btv
 - 152 return sprintf ( buf , "%d\n" , btv ? btv -> c..
  153 }
  154 static CLASS_DEVICE_ATTR(card, S_IRUGO, show_card, NULL);
  155 
  156 /* ----------------------------------------------------------------------- */
  157 /* static data                                                             */
  158 
  159 /* special timing tables from conexant... */
  160 static u8 SRAM_Table[][60] =
  161 {
  162    /* PAL digital input over GPIO[7:0] */
  163    {
  164       45, // 45 bytes following
  165       0x36,0x11,0x01,0x00,0x90,0x02,0x05,0x10,0x04,0x16,
  166       0x12,0x05,0x11,0x00,0x04,0x12,0xC0,0x00,0x31,0x00,
  167       0x06,0x51,0x08,0x03,0x89,0x08,0x07,0xC0,0x44,0x00,
  168       0x81,0x01,0x01,0xA9,0x0D,0x02,0x02,0x50,0x03,0x37,
  169       0x37,0x00,0xAF,0x21,0x00
  170    },
  171    /* NTSC digital input over GPIO[7:0] */
  172    {
  173       51, // 51 bytes following
  174       0x0C,0xC0,0x00,0x00,0x90,0x02,0x03,0x10,0x03,0x06,
  175       0x10,0x04,0x12,0x12,0x05,0x02,0x13,0x04,0x19,0x00,
  176       0x04,0x39,0x00,0x06,0x59,0x08,0x03,0x83,0x08,0x07,
  177       0x03,0x50,0x00,0xC0,0x40,0x00,0x86,0x01,0x01,0xA6,
  178       0x0D,0x02,0x03,0x11,0x01,0x05,0x37,0x00,0xAC,0x21,
  179       0x00,
  180    },
  181    // TGB_NTSC392 // quartzsight
  182    // This table has been modified to be used for Fusion Rev D
  183    {
  184       0x2A, // size of table = 42
  185       0x06, 0x08, 0x04, 0x0a, 0xc0, 0x00, 0x18, 0x08, 0x03, 0x24,
  186       0x08, 0x07, 0x02, 0x90, 0x02, 0x08, 0x10, 0x04, 0x0c, 0x10,
  187       0x05, 0x2c, 0x11, 0x04, 0x55, 0x48, 0x00, 0x05, 0x50, 0x00,
  188       0xbf, 0x0c, 0x02, 0x2f, 0x3d, 0x00, 0x2f, 0x3f, 0x00, 0xc3,
  189       0x20, 0x00
  190    }
  191 };
  192 
  193 const struct bttv_tvnorm bttv_tvnorms[] = {
  194    /* PAL-BDGHI */
  195    /* max. active video is actually 922, but 924 is divisible by 4 and 3! */
  196    /* actually, max active PAL with HSCALE=0 is 948, NTSC is 768 - nil */
  197    {
  198       .v4l2_id        = V4L2_STD_PAL,
  199       .name           = "PAL",
  200       .Fsc            = 35468950,
  201       .swidth         = 924,
  202       .sheight        = 576,
  203       .totalwidth     = 1135,
  204       .adelay         = 0x7f,
  205       .bdelay         = 0x72,
  206       .iform          = (BT848_IFORM_PAL_BDGHI|BT848_IFORM_XT1),
  207       .scaledtwidth   = 1135,
  208       .hdelayx1       = 186,
  209       .hactivex1      = 924,
  210       .vdelay         = 0x20,
  211       .vbipack        = 255,
  212       .sram           = 0,
  213       /* ITU-R frame line number of the first VBI line
  214          we can capture, of the first and second field. */
  215       .vbistart   = { 7,320 },
  216    },{
  217       .v4l2_id        = V4L2_STD_NTSC_M | V4L2_STD_NTSC_M_KR,
  218       .name           = "NTSC",
  219       .Fsc            = 28636363,
  220       .swidth         = 768,
  221       .sheight        = 480,
  222       .totalwidth     = 910,
  223       .adelay         = 0x68,
  224       .bdelay         = 0x5d,
  225       .iform          = (BT848_IFORM_NTSC|BT848_IFORM_XT0),
  226       .scaledtwidth   = 910,
  227       .hdelayx1       = 128,
  228       .hactivex1      = 910,
  229       .vdelay         = 0x1a,
  230       .vbipack        = 144,
  231       .sram           = 1,
  232       .vbistart   = { 10, 273 },
  233    },{
  234       .v4l2_id        = V4L2_STD_SECAM,
  235       .name           = "SECAM",
  236       .Fsc            = 35468950,
  237       .swidth         = 924,
  238       .sheight        = 576,
  239       .totalwidth     = 1135,
  240       .adelay         = 0x7f,
  241       .bdelay         = 0xb0,
  242       .iform          = (BT848_IFORM_SECAM|BT848_IFORM_XT1),
  243       .scaledtwidth   = 1135,
  244       .hdelayx1       = 186,
  245       .hactivex1      = 922,
  246       .vdelay         = 0x20,
  247       .vbipack        = 255,
  248       .sram           = 0, /* like PAL, correct? */
  249       .vbistart   = { 7, 320 },
  250    },{
  251       .v4l2_id        = V4L2_STD_PAL_Nc,
  252       .name           = "PAL-Nc",
  253       .Fsc            = 28636363,
  254       .swidth         = 640,
  255       .sheight        = 576,
  256       .totalwidth     = 910,
  257       .adelay         = 0x68,
  258       .bdelay         = 0x5d,
  259       .iform          = (BT848_IFORM_PAL_NC|BT848_IFORM_XT0),
  260       .scaledtwidth   = 780,
  261       .hdelayx1       = 130,
  262       .hactivex1      = 734,
  263       .vdelay         = 0x1a,
  264       .vbipack        = 144,
  265       .sram           = -1,
  266       .vbistart   = { 7, 320 },
  267    },{
  268       .v4l2_id        = V4L2_STD_PAL_M,
  269       .name           = "PAL-M",
  270       .Fsc            = 28636363,
  271       .swidth         = 640,
  272       .sheight        = 480,
  273       .totalwidth     = 910,
  274       .adelay         = 0x68,
  275       .bdelay         = 0x5d,
  276       .iform          = (BT848_IFORM_PAL_M|BT848_IFORM_XT0),
  277       .scaledtwidth   = 780,
  278       .hdelayx1       = 135,
  279       .hactivex1      = 754,
  280       .vdelay         = 0x1a,
  281       .vbipack        = 144,
  282       .sram           = -1,
  283       .vbistart   = { 10, 273 },
  284    },{
  285       .v4l2_id        = V4L2_STD_PAL_N,
  286       .name           = "PAL-N",
  287       .Fsc            = 35468950,
  288       .swidth         = 768,
  289       .sheight        = 576,
  290       .totalwidth     = 1135,
  291       .adelay         = 0x7f,
  292       .bdelay         = 0x72,
  293       .iform          = (BT848_IFORM_PAL_N|BT848_IFORM_XT1),
  294       .scaledtwidth   = 944,
  295       .hdelayx1       = 186,
  296       .hactivex1      = 922,
  297       .vdelay         = 0x20,
  298       .vbipack        = 144,
  299       .sram           = -1,
  300       .vbistart   = { 7, 320},
  301    },{
  302       .v4l2_id        = V4L2_STD_NTSC_M_JP,
  303       .name           = "NTSC-JP",
  304       .Fsc            = 28636363,
  305       .swidth         = 640,
  306       .sheight        = 480,
  307       .totalwidth     = 910,
  308       .adelay         = 0x68,
  309       .bdelay         = 0x5d,
  310       .iform          = (BT848_IFORM_NTSC_J|BT848_IFORM_XT0),
  311       .scaledtwidth   = 780,
  312       .hdelayx1       = 135,
  313       .hactivex1      = 754,
  314       .vdelay         = 0x16,
  315       .vbipack        = 144,
  316       .sram           = -1,
  317       .vbistart   = {10, 273},
  318    },{
  319       /* that one hopefully works with the strange timing
  320        * which video recorders produce when playing a NTSC
  321        * tape on a PAL TV ... */
  322       .v4l2_id        = V4L2_STD_PAL_60,
  323       .name           = "PAL-60",
  324       .Fsc            = 35468950,
  325       .swidth         = 924,
  326       .sheight        = 480,
  327       .totalwidth     = 1135,
  328       .adelay         = 0x7f,
  329       .bdelay         = 0x72,
  330       .iform          = (BT848_IFORM_PAL_BDGHI|BT848_IFORM_XT1),
  331       .scaledtwidth   = 1135,
  332       .hdelayx1       = 186,
  333       .hactivex1      = 924,
  334       .vdelay         = 0x1a,
  335       .vbipack        = 255,
  336       .vtotal         = 524,
  337       .sram           = -1,
  338       .vbistart   = { 10, 273 },
  339    }
  340 };
  341 static const unsigned int BTTV_TVNORMS = ARRAY_SIZE(bttv_tvnorms);
  342 
  343 /* ----------------------------------------------------------------------- */
  344 /* bttv format list
  345    packed pixel formats must come first */
  346 static const struct bttv_format bttv_formats[] = {
  347    {
  348       .name     = "8 bpp, gray",
  349       .palette  = VIDEO_PALETTE_GREY,
  350       .fourcc   = V4L2_PIX_FMT_GREY,
  351       .btformat = BT848_COLOR_FMT_Y8,
  352       .depth    = 8,
  353       .flags    = FORMAT_FLAGS_PACKED,
  354    },{
  355       .name     = "8 bpp, dithered color",
  356       .palette  = VIDEO_PALETTE_HI240,
  357       .fourcc   = V4L2_PIX_FMT_HI240,
  358       .btformat = BT848_COLOR_FMT_RGB8,
  359       .depth    = 8,
  360       .flags    = FORMAT_FLAGS_PACKED | FORMAT_FLAGS_DITHER,
  361    },{
  362       .name     = "15 bpp RGB, le",
  363       .palette  = VIDEO_PALETTE_RGB555,
  364       .fourcc   = V4L2_PIX_FMT_RGB555,
  365       .btformat = BT848_COLOR_FMT_RGB15,
  366       .depth    = 16,
  367       .flags    = FORMAT_FLAGS_PACKED,
  368    },{
  369       .name     = "15 bpp RGB, be",
  370       .palette  = -1,
  371       .fourcc   = V4L2_PIX_FMT_RGB555X,
  372       .btformat = BT848_COLOR_FMT_RGB15,
  373       .btswap   = 0x03, /* byteswap */
  374       .depth    = 16,
  375       .flags    = FORMAT_FLAGS_PACKED,
  376    },{
  377       .name     = "16 bpp RGB, le",
  378       .palette  = VIDEO_PALETTE_RGB565,
  379       .fourcc   = V4L2_PIX_FMT_RGB565,
  380       .btformat = BT848_COLOR_FMT_RGB16,
  381       .depth    = 16,
  382       .flags    = FORMAT_FLAGS_PACKED,
  383    },{
  384       .name     = "16 bpp RGB, be",
  385       .palette  = -1,
  386       .fourcc   = V4L2_PIX_FMT_RGB565X,
  387       .btformat = BT848_COLOR_FMT_RGB16,
  388       .btswap   = 0x03, /* byteswap */
  389       .depth    = 16,
  390       .flags    = FORMAT_FLAGS_PACKED,
  391    },{
  392       .name     = "24 bpp RGB, le",
  393       .palette  = VIDEO_PALETTE_RGB24,
  394       .fourcc   = V4L2_PIX_FMT_BGR24,
  395       .btformat = BT848_COLOR_FMT_RGB24,
  396       .depth    = 24,
  397       .flags    = FORMAT_FLAGS_PACKED,
  398    },{
  399       .name     = "32 bpp RGB, le",
  400       .palette  = VIDEO_PALETTE_RGB32,
  401       .fourcc   = V4L2_PIX_FMT_BGR32,
  402       .btformat = BT848_COLOR_FMT_RGB32,
  403       .depth    = 32,
  404       .flags    = FORMAT_FLAGS_PACKED,
  405    },{
  406       .name     = "32 bpp RGB, be",
  407       .palette  = -1,
  408       .fourcc   = V4L2_PIX_FMT_RGB32,
  409       .btformat = BT848_COLOR_FMT_RGB32,
  410       .btswap   = 0x0f, /* byte+word swap */
  411       .depth    = 32,
  412       .flags    = FORMAT_FLAGS_PACKED,
  413    },{
  414       .name     = "4:2:2, packed, YUYV",
  415       .palette  = VIDEO_PALETTE_YUV422,
  416       .fourcc   = V4L2_PIX_FMT_YUYV,
  417       .btformat = BT848_COLOR_FMT_YUY2,
  418       .depth    = 16,
  419       .flags    = FORMAT_FLAGS_PACKED,
  420    },{
  421       .name     = "4:2:2, packed, YUYV",
  422       .palette  = VIDEO_PALETTE_YUYV,
  423       .fourcc   = V4L2_PIX_FMT_YUYV,
  424       .btformat = BT848_COLOR_FMT_YUY2,
  425       .depth    = 16,
  426       .flags    = FORMAT_FLAGS_PACKED,
  427    },{
  428       .name     = "4:2:2, packed, UYVY",
  429       .palette  = VIDEO_PALETTE_UYVY,
  430       .fourcc   = V4L2_PIX_FMT_UYVY,
  431       .btformat = BT848_COLOR_FMT_YUY2,
  432       .btswap   = 0x03, /* byteswap */
  433       .depth    = 16,
  434       .flags    = FORMAT_FLAGS_PACKED,
  435    },{
  436       .name     = "4:2:2, planar, Y-Cb-Cr",
  437       .palette  = VIDEO_PALETTE_YUV422P,
  438       .fourcc   = V4L2_PIX_FMT_YUV422P,
  439       .btformat = BT848_COLOR_FMT_YCrCb422,
  440       .depth    = 16,
  441       .flags    = FORMAT_FLAGS_PLANAR,
  442       .hshift   = 1,
  443       .vshift   = 0,
  444    },{
  445       .name     = "4:2:0, planar, Y-Cb-Cr",
  446       .palette  = VIDEO_PALETTE_YUV420P,
  447       .fourcc   = V4L2_PIX_FMT_YUV420,
  448       .btformat = BT848_COLOR_FMT_YCrCb422,
  449       .depth    = 12,
  450       .flags    = FORMAT_FLAGS_PLANAR,
  451       .hshift   = 1,
  452       .vshift   = 1,
  453    },{
  454       .name     = "4:2:0, planar, Y-Cr-Cb",
  455       .palette  = -1,
  456       .fourcc   = V4L2_PIX_FMT_YVU420,
  457       .btformat = BT848_COLOR_FMT_YCrCb422,
  458       .depth    = 12,
  459       .flags    = FORMAT_FLAGS_PLANAR | FORMAT_FLAGS_CrCb,
  460       .hshift   = 1,
  461       .vshift   = 1,
  462    },{
  463       .name     = "4:1:1, planar, Y-Cb-Cr",
  464       .palette  = VIDEO_PALETTE_YUV411P,
  465       .fourcc   = V4L2_PIX_FMT_YUV411P,
  466       .btformat = BT848_COLOR_FMT_YCrCb411,
  467       .depth    = 12,
  468       .flags    = FORMAT_FLAGS_PLANAR,
  469       .hshift   = 2,
  470       .vshift   = 0,
  471    },{
  472       .name     = "4:1:0, planar, Y-Cb-Cr",
  473       .palette  = VIDEO_PALETTE_YUV410P,
  474       .fourcc   = V4L2_PIX_FMT_YUV410,
  475       .btformat = BT848_COLOR_FMT_YCrCb411,
  476       .depth    = 9,
  477       .flags    = FORMAT_FLAGS_PLANAR,
  478       .hshift   = 2,
  479       .vshift   = 2,
  480    },{
  481       .name     = "4:1:0, planar, Y-Cr-Cb",
  482       .palette  = -1,
  483       .fourcc   = V4L2_PIX_FMT_YVU410,
  484       .btformat = BT848_COLOR_FMT_YCrCb411,
  485       .depth    = 9,
  486       .flags    = FORMAT_FLAGS_PLANAR | FORMAT_FLAGS_CrCb,
  487       .hshift   = 2,
  488       .vshift   = 2,
  489    },{
  490       .name     = "raw scanlines",
  491       .palette  = VIDEO_PALETTE_RAW,
  492       .fourcc   = -1,
  493       .btformat = BT848_COLOR_FMT_RAW,
  494       .depth    = 8,
  495       .flags    = FORMAT_FLAGS_RAW,
  496    }