home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / linux / videodev2.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  36.0 KB  |  1,165 lines

  1. #ifndef __LINUX_VIDEODEV2_H
  2. #define __LINUX_VIDEODEV2_H
  3. /*
  4.  *    Video for Linux Two
  5.  *
  6.  *    Header file for v4l or V4L2 drivers and applications, for
  7.  *    Linux kernels 2.2.x or 2.4.x.
  8.  *
  9.  *    See http://bytesex.org/v4l/ for API specs and other
  10.  *    v4l2 documentation.
  11.  *
  12.  *    Author: Bill Dirks <bdirks@pacbell.net>
  13.  *        Justin Schoeman
  14.  *        et al.
  15.  */
  16. #ifdef __KERNEL__
  17. #include <linux/time.h> /* need struct timeval */
  18. #include <linux/poll.h>
  19. #include <linux/device.h>
  20. #include <linux/mutex.h>
  21. #endif
  22. #include <linux/compiler.h> /* need __user */
  23.  
  24.  
  25. #define OBSOLETE_OWNER 1 /* It will be removed for 2.6.17 */
  26. #define HAVE_V4L2 1
  27.  
  28. /*
  29.  * Common stuff for both V4L1 and V4L2
  30.  * Moved from videodev.h
  31.  */
  32.  
  33. #define VIDEO_MAX_FRAME               32
  34.  
  35. #define VID_TYPE_CAPTURE    1    /* Can capture */
  36. #define VID_TYPE_TUNER        2    /* Can tune */
  37. #define VID_TYPE_TELETEXT    4    /* Does teletext */
  38. #define VID_TYPE_OVERLAY    8    /* Overlay onto frame buffer */
  39. #define VID_TYPE_CHROMAKEY    16    /* Overlay by chromakey */
  40. #define VID_TYPE_CLIPPING    32    /* Can clip */
  41. #define VID_TYPE_FRAMERAM    64    /* Uses the frame buffer memory */
  42. #define VID_TYPE_SCALES        128    /* Scalable */
  43. #define VID_TYPE_MONOCHROME    256    /* Monochrome only */
  44. #define VID_TYPE_SUBCAPTURE    512    /* Can capture subareas of the image */
  45. #define VID_TYPE_MPEG_DECODER    1024    /* Can decode MPEG streams */
  46. #define VID_TYPE_MPEG_ENCODER    2048    /* Can encode MPEG streams */
  47. #define VID_TYPE_MJPEG_DECODER    4096    /* Can decode MJPEG streams */
  48. #define VID_TYPE_MJPEG_ENCODER    8192    /* Can encode MJPEG streams */
  49.  
  50. #ifdef __KERNEL__
  51.  
  52. /* Minor device allocation */
  53. #define MINOR_VFL_TYPE_GRABBER_MIN   0
  54. #define MINOR_VFL_TYPE_GRABBER_MAX  63
  55. #define MINOR_VFL_TYPE_RADIO_MIN    64
  56. #define MINOR_VFL_TYPE_RADIO_MAX   127
  57. #define MINOR_VFL_TYPE_VTX_MIN     192
  58. #define MINOR_VFL_TYPE_VTX_MAX     223
  59. #define MINOR_VFL_TYPE_VBI_MIN     224
  60. #define MINOR_VFL_TYPE_VBI_MAX     255
  61.  
  62. #define VFL_TYPE_GRABBER    0
  63. #define VFL_TYPE_VBI        1
  64. #define VFL_TYPE_RADIO        2
  65. #define VFL_TYPE_VTX        3
  66.  
  67. struct video_device
  68. {
  69.     /* device info */
  70.     struct device *dev;
  71.     char name[32];
  72.     int type;       /* v4l1 */
  73.     int type2;      /* v4l2 */
  74.     int hardware;
  75.     int minor;
  76.  
  77.     /* device ops + callbacks */
  78.     const struct file_operations *fops;
  79.     void (*release)(struct video_device *vfd);
  80.  
  81.  
  82. #if OBSOLETE_OWNER /* to be removed in 2.6.15 */
  83.     /* obsolete -- fops->owner is used instead */
  84.     struct module *owner;
  85.     /* dev->driver_data will be used instead some day.
  86.      * Use the video_{get|set}_drvdata() helper functions,
  87.      * so the switch over will be transparent for you.
  88.      * Or use {pci|usb}_{get|set}_drvdata() directly. */
  89.     void *priv;
  90. #endif
  91.  
  92.     /* for videodev.c intenal usage -- please don't touch */
  93.     int users;                     /* video_exclusive_{open|close} ... */
  94.     struct mutex lock;             /* ... helper function uses these   */
  95.     char devfs_name[64];           /* devfs */
  96.     struct class_device class_dev; /* sysfs */
  97. };
  98.  
  99. #define VIDEO_MAJOR    81
  100.  
  101. extern int video_register_device(struct video_device *, int type, int nr);
  102. extern void video_unregister_device(struct video_device *);
  103. extern int video_usercopy(struct inode *inode, struct file *file,
  104.               unsigned int cmd, unsigned long arg,
  105.               int (*func)(struct inode *inode, struct file *file,
  106.                       unsigned int cmd, void *arg));
  107.  
  108. /* helper functions to alloc / release struct video_device, the
  109.    later can be used for video_device->release() */
  110. struct video_device *video_device_alloc(void);
  111. void video_device_release(struct video_device *vfd);
  112.  
  113. #endif
  114.  
  115. /*
  116.  *    M I S C E L L A N E O U S
  117.  */
  118.  
  119. /*  Four-character-code (FOURCC) */
  120. #define v4l2_fourcc(a,b,c,d)\
  121.     (((__u32)(a)<<0)|((__u32)(b)<<8)|((__u32)(c)<<16)|((__u32)(d)<<24))
  122.  
  123. /*
  124.  *    E N U M S
  125.  */
  126. enum v4l2_field {
  127.     V4L2_FIELD_ANY        = 0, /* driver can choose from none,
  128.                       top, bottom, interlaced
  129.                       depending on whatever it thinks
  130.                       is approximate ... */
  131.     V4L2_FIELD_NONE       = 1, /* this device has no fields ... */
  132.     V4L2_FIELD_TOP        = 2, /* top field only */
  133.     V4L2_FIELD_BOTTOM     = 3, /* bottom field only */
  134.     V4L2_FIELD_INTERLACED = 4, /* both fields interlaced */
  135.     V4L2_FIELD_SEQ_TB     = 5, /* both fields sequential into one
  136.                       buffer, top-bottom order */
  137.     V4L2_FIELD_SEQ_BT     = 6, /* same as above + bottom-top order */
  138.     V4L2_FIELD_ALTERNATE  = 7, /* both fields alternating into
  139.                       separate buffers */
  140. };
  141. #define V4L2_FIELD_HAS_TOP(field)    \
  142.     ((field) == V4L2_FIELD_TOP     ||\
  143.      (field) == V4L2_FIELD_INTERLACED ||\
  144.      (field) == V4L2_FIELD_SEQ_TB    ||\
  145.      (field) == V4L2_FIELD_SEQ_BT)
  146. #define V4L2_FIELD_HAS_BOTTOM(field)    \
  147.     ((field) == V4L2_FIELD_BOTTOM     ||\
  148.      (field) == V4L2_FIELD_INTERLACED ||\
  149.      (field) == V4L2_FIELD_SEQ_TB    ||\
  150.      (field) == V4L2_FIELD_SEQ_BT)
  151. #define V4L2_FIELD_HAS_BOTH(field)    \
  152.     ((field) == V4L2_FIELD_INTERLACED ||\
  153.      (field) == V4L2_FIELD_SEQ_TB    ||\
  154.      (field) == V4L2_FIELD_SEQ_BT)
  155.  
  156. enum v4l2_buf_type {
  157.     V4L2_BUF_TYPE_VIDEO_CAPTURE      = 1,
  158.     V4L2_BUF_TYPE_VIDEO_OUTPUT       = 2,
  159.     V4L2_BUF_TYPE_VIDEO_OVERLAY      = 3,
  160.     V4L2_BUF_TYPE_VBI_CAPTURE        = 4,
  161.     V4L2_BUF_TYPE_VBI_OUTPUT         = 5,
  162. #if 1
  163.     /* Experimental Sliced VBI */
  164.     V4L2_BUF_TYPE_SLICED_VBI_CAPTURE = 6,
  165.     V4L2_BUF_TYPE_SLICED_VBI_OUTPUT  = 7,
  166. #endif
  167.     V4L2_BUF_TYPE_PRIVATE            = 0x80,
  168. };
  169.  
  170. enum v4l2_ctrl_type {
  171.     V4L2_CTRL_TYPE_INTEGER         = 1,
  172.     V4L2_CTRL_TYPE_BOOLEAN         = 2,
  173.     V4L2_CTRL_TYPE_MENU         = 3,
  174.     V4L2_CTRL_TYPE_BUTTON         = 4,
  175. };
  176.  
  177. enum v4l2_tuner_type {
  178.     V4L2_TUNER_RADIO         = 1,
  179.     V4L2_TUNER_ANALOG_TV         = 2,
  180.     V4L2_TUNER_DIGITAL_TV         = 3,
  181. };
  182.  
  183. enum v4l2_memory {
  184.     V4L2_MEMORY_MMAP             = 1,
  185.     V4L2_MEMORY_USERPTR          = 2,
  186.     V4L2_MEMORY_OVERLAY          = 3,
  187. };
  188.  
  189. /* see also http://vektor.theorem.ca/graphics/ycbcr/ */
  190. enum v4l2_colorspace {
  191.     /* ITU-R 601 -- broadcast NTSC/PAL */
  192.     V4L2_COLORSPACE_SMPTE170M     = 1,
  193.  
  194.     /* 1125-Line (US) HDTV */
  195.     V4L2_COLORSPACE_SMPTE240M     = 2,
  196.  
  197.     /* HD and modern captures. */
  198.     V4L2_COLORSPACE_REC709        = 3,
  199.  
  200.     /* broken BT878 extents (601, luma range 16-253 instead of 16-235) */
  201.     V4L2_COLORSPACE_BT878         = 4,
  202.  
  203.     /* These should be useful.  Assume 601 extents. */
  204.     V4L2_COLORSPACE_470_SYSTEM_M  = 5,
  205.     V4L2_COLORSPACE_470_SYSTEM_BG = 6,
  206.  
  207.     /* I know there will be cameras that send this.  So, this is
  208.      * unspecified chromaticities and full 0-255 on each of the
  209.      * Y'CbCr components
  210.      */
  211.     V4L2_COLORSPACE_JPEG          = 7,
  212.  
  213.     /* For RGB colourspaces, this is probably a good start. */
  214.     V4L2_COLORSPACE_SRGB          = 8,
  215. };
  216.  
  217. enum v4l2_priority {
  218.     V4L2_PRIORITY_UNSET       = 0,  /* not initialized */
  219.     V4L2_PRIORITY_BACKGROUND  = 1,
  220.     V4L2_PRIORITY_INTERACTIVE = 2,
  221.     V4L2_PRIORITY_RECORD      = 3,
  222.     V4L2_PRIORITY_DEFAULT     = V4L2_PRIORITY_INTERACTIVE,
  223. };
  224.  
  225. struct v4l2_rect {
  226.     __s32   left;
  227.     __s32   top;
  228.     __s32   width;
  229.     __s32   height;
  230. };
  231.  
  232. struct v4l2_fract {
  233.     __u32   numerator;
  234.     __u32   denominator;
  235. };
  236.  
  237. /*
  238.  *    D R I V E R   C A P A B I L I T I E S
  239.  */
  240. struct v4l2_capability
  241. {
  242.     __u8    driver[16];    /* i.e. "bttv" */
  243.     __u8    card[32];    /* i.e. "Hauppauge WinTV" */
  244.     __u8    bus_info[32];    /* "PCI:" + pci_name(pci_dev) */
  245.     __u32   version;        /* should use KERNEL_VERSION() */
  246.     __u32    capabilities;    /* Device capabilities */
  247.     __u32    reserved[4];
  248. };
  249.  
  250. /* Values for 'capabilities' field */
  251. #define V4L2_CAP_VIDEO_CAPTURE        0x00000001  /* Is a video capture device */
  252. #define V4L2_CAP_VIDEO_OUTPUT        0x00000002  /* Is a video output device */
  253. #define V4L2_CAP_VIDEO_OVERLAY        0x00000004  /* Can do video overlay */
  254. #define V4L2_CAP_VBI_CAPTURE        0x00000010  /* Is a raw VBI capture device */
  255. #define V4L2_CAP_VBI_OUTPUT        0x00000020  /* Is a raw VBI output device */
  256. #if 1
  257. #define V4L2_CAP_SLICED_VBI_CAPTURE    0x00000040  /* Is a sliced VBI capture device */
  258. #define V4L2_CAP_SLICED_VBI_OUTPUT    0x00000080  /* Is a sliced VBI output device */
  259. #endif
  260. #define V4L2_CAP_RDS_CAPTURE        0x00000100  /* RDS data capture */
  261.  
  262. #define V4L2_CAP_TUNER            0x00010000  /* has a tuner */
  263. #define V4L2_CAP_AUDIO            0x00020000  /* has audio support */
  264. #define V4L2_CAP_RADIO            0x00040000  /* is a radio device */
  265.  
  266. #define V4L2_CAP_READWRITE              0x01000000  /* read/write systemcalls */
  267. #define V4L2_CAP_ASYNCIO                0x02000000  /* async I/O */
  268. #define V4L2_CAP_STREAMING              0x04000000  /* streaming I/O ioctls */
  269.  
  270. /*
  271.  *    V I D E O   I M A G E   F O R M A T
  272.  */
  273.  
  274. struct v4l2_pix_format
  275. {
  276.     __u32                 width;
  277.     __u32            height;
  278.     __u32            pixelformat;
  279.     enum v4l2_field      field;
  280.     __u32                bytesperline;    /* for padding, zero if unused */
  281.     __u32                  sizeimage;
  282.     enum v4l2_colorspace    colorspace;
  283.     __u32            priv;        /* private data, depends on pixelformat */
  284. };
  285.  
  286. /*           Pixel format    FOURCC                  depth  Description   */
  287. #define V4L2_PIX_FMT_RGB332  v4l2_fourcc('R','G','B','1') /*  8  RGB-3-3-2     */
  288. #define V4L2_PIX_FMT_RGB555  v4l2_fourcc('R','G','B','O') /* 16  RGB-5-5-5     */
  289. #define V4L2_PIX_FMT_RGB565  v4l2_fourcc('R','G','B','P') /* 16  RGB-5-6-5     */
  290. #define V4L2_PIX_FMT_RGB555X v4l2_fourcc('R','G','B','Q') /* 16  RGB-5-5-5 BE  */
  291. #define V4L2_PIX_FMT_RGB565X v4l2_fourcc('R','G','B','R') /* 16  RGB-5-6-5 BE  */
  292. #define V4L2_PIX_FMT_BGR24   v4l2_fourcc('B','G','R','3') /* 24  BGR-8-8-8     */
  293. #define V4L2_PIX_FMT_RGB24   v4l2_fourcc('R','G','B','3') /* 24  RGB-8-8-8     */
  294. #define V4L2_PIX_FMT_BGR32   v4l2_fourcc('B','G','R','4') /* 32  BGR-8-8-8-8   */
  295. #define V4L2_PIX_FMT_RGB32   v4l2_fourcc('R','G','B','4') /* 32  RGB-8-8-8-8   */
  296. #define V4L2_PIX_FMT_GREY    v4l2_fourcc('G','R','E','Y') /*  8  Greyscale     */
  297. #define V4L2_PIX_FMT_YVU410  v4l2_fourcc('Y','V','U','9') /*  9  YVU 4:1:0     */
  298. #define V4L2_PIX_FMT_YVU420  v4l2_fourcc('Y','V','1','2') /* 12  YVU 4:2:0     */
  299. #define V4L2_PIX_FMT_YUYV    v4l2_fourcc('Y','U','Y','V') /* 16  YUV 4:2:2     */
  300. #define V4L2_PIX_FMT_UYVY    v4l2_fourcc('U','Y','V','Y') /* 16  YUV 4:2:2     */
  301. #define V4L2_PIX_FMT_YUV422P v4l2_fourcc('4','2','2','P') /* 16  YVU422 planar */
  302. #define V4L2_PIX_FMT_YUV411P v4l2_fourcc('4','1','1','P') /* 16  YVU411 planar */
  303. #define V4L2_PIX_FMT_Y41P    v4l2_fourcc('Y','4','1','P') /* 12  YUV 4:1:1     */
  304.  
  305. /* two planes -- one Y, one Cr + Cb interleaved  */
  306. #define V4L2_PIX_FMT_NV12    v4l2_fourcc('N','V','1','2') /* 12  Y/CbCr 4:2:0  */
  307. #define V4L2_PIX_FMT_NV21    v4l2_fourcc('N','V','2','1') /* 12  Y/CrCb 4:2:0  */
  308.  
  309. /*  The following formats are not defined in the V4L2 specification */
  310. #define V4L2_PIX_FMT_YUV410  v4l2_fourcc('Y','U','V','9') /*  9  YUV 4:1:0     */
  311. #define V4L2_PIX_FMT_YUV420  v4l2_fourcc('Y','U','1','2') /* 12  YUV 4:2:0     */
  312. #define V4L2_PIX_FMT_YYUV    v4l2_fourcc('Y','Y','U','V') /* 16  YUV 4:2:2     */
  313. #define V4L2_PIX_FMT_HI240   v4l2_fourcc('H','I','2','4') /*  8  8-bit color   */
  314.  
  315. /* see http://www.siliconimaging.com/RGB%20Bayer.htm */
  316. #define V4L2_PIX_FMT_SBGGR8  v4l2_fourcc('B','A','8','1') /*  8  BGBG.. GRGR.. */
  317.  
  318. /* compressed formats */
  319. #define V4L2_PIX_FMT_MJPEG    v4l2_fourcc('M','J','P','G') /* Motion-JPEG   */
  320. #define V4L2_PIX_FMT_JPEG     v4l2_fourcc('J','P','E','G') /* JFIF JPEG     */
  321. #define V4L2_PIX_FMT_DV       v4l2_fourcc('d','v','s','d') /* 1394          */
  322. #define V4L2_PIX_FMT_MPEG     v4l2_fourcc('M','P','E','G') /* MPEG          */
  323.  
  324. /*  Vendor-specific formats   */
  325. #define V4L2_PIX_FMT_WNVA     v4l2_fourcc('W','N','V','A') /* Winnov hw compress */
  326. #define V4L2_PIX_FMT_SN9C10X  v4l2_fourcc('S','9','1','0') /* SN9C10x compression */
  327. #define V4L2_PIX_FMT_PWC1     v4l2_fourcc('P','W','C','1') /* pwc older webcam */
  328. #define V4L2_PIX_FMT_PWC2     v4l2_fourcc('P','W','C','2') /* pwc newer webcam */
  329. #define V4L2_PIX_FMT_ET61X251 v4l2_fourcc('E','6','2','5') /* ET61X251 compression */
  330.  
  331. /*
  332.  *    F O R M A T   E N U M E R A T I O N
  333.  */
  334. struct v4l2_fmtdesc
  335. {
  336.     __u32            index;             /* Format number      */
  337.     enum v4l2_buf_type  type;              /* buffer type        */
  338.     __u32               flags;
  339.     __u8            description[32];   /* Description string */
  340.     __u32            pixelformat;       /* Format fourcc      */
  341.     __u32            reserved[4];
  342. };
  343.  
  344. #define V4L2_FMT_FLAG_COMPRESSED 0x0001
  345.  
  346.  
  347. /*
  348.  *    T I M E C O D E
  349.  */
  350. struct v4l2_timecode
  351. {
  352.     __u32    type;
  353.     __u32    flags;
  354.     __u8    frames;
  355.     __u8    seconds;
  356.     __u8    minutes;
  357.     __u8    hours;
  358.     __u8    userbits[4];
  359. };
  360.  
  361. /*  Type  */
  362. #define V4L2_TC_TYPE_24FPS        1
  363. #define V4L2_TC_TYPE_25FPS        2
  364. #define V4L2_TC_TYPE_30FPS        3
  365. #define V4L2_TC_TYPE_50FPS        4
  366. #define V4L2_TC_TYPE_60FPS        5
  367.  
  368. /*  Flags  */
  369. #define V4L2_TC_FLAG_DROPFRAME        0x0001 /* "drop-frame" mode */
  370. #define V4L2_TC_FLAG_COLORFRAME        0x0002
  371. #define V4L2_TC_USERBITS_field        0x000C
  372. #define V4L2_TC_USERBITS_USERDEFINED    0x0000
  373. #define V4L2_TC_USERBITS_8BITCHARS    0x0008
  374. /* The above is based on SMPTE timecodes */
  375.  
  376.  
  377. /*
  378.  *    M P E G   C O M P R E S S I O N   P A R A M E T E R S
  379.  *
  380.  *  ### WARNING: this is still work-in-progress right now, most likely
  381.  *  ###          there will be some incompatible changes.
  382.  *
  383.  */
  384.  
  385.  
  386. enum v4l2_bitrate_mode {
  387.     V4L2_BITRATE_NONE = 0,    /* not specified */
  388.     V4L2_BITRATE_CBR,    /* constant bitrate */
  389.     V4L2_BITRATE_VBR,    /* variable bitrate */
  390. };
  391. struct v4l2_bitrate {
  392.     /* rates are specified in kbit/sec */
  393.     enum v4l2_bitrate_mode    mode;
  394.     __u32            min;
  395.     __u32            target;  /* use this one for CBR */
  396.     __u32            max;
  397. };
  398.  
  399. enum v4l2_mpeg_streamtype {
  400.     V4L2_MPEG_SS_1,        /* MPEG-1 system stream */
  401.     V4L2_MPEG_PS_2,        /* MPEG-2 program stream */
  402.     V4L2_MPEG_TS_2,        /* MPEG-2 transport stream */
  403.     V4L2_MPEG_PS_DVD,          /* MPEG-2 program stream with DVD header fixups */
  404. };
  405. enum v4l2_mpeg_audiotype {
  406.     V4L2_MPEG_AU_2_I,    /* MPEG-2 layer 1 */
  407.     V4L2_MPEG_AU_2_II,    /* MPEG-2 layer 2 */
  408.     V4L2_MPEG_AU_2_III,    /* MPEG-2 layer 3 */
  409.     V4L2_MPEG_AC3,        /* AC3 */
  410.     V4L2_MPEG_LPCM,        /* LPCM */
  411. };
  412. enum v4l2_mpeg_videotype {
  413.     V4L2_MPEG_VI_1,        /* MPEG-1 */
  414.     V4L2_MPEG_VI_2,        /* MPEG-2 */
  415. };
  416. enum v4l2_mpeg_aspectratio {
  417.     V4L2_MPEG_ASPECT_SQUARE = 1,   /* square pixel */
  418.     V4L2_MPEG_ASPECT_4_3    = 2,   /*  4 : 3       */
  419.     V4L2_MPEG_ASPECT_16_9   = 3,   /* 16 : 9       */
  420.     V4L2_MPEG_ASPECT_1_221  = 4,   /*  1 : 2,21    */
  421. };
  422.  
  423. struct v4l2_mpeg_compression {
  424.     /* general */
  425.     enum v4l2_mpeg_streamtype    st_type;
  426.     struct v4l2_bitrate        st_bitrate;
  427.  
  428.     /* transport streams */
  429.     __u16                ts_pid_pmt;
  430.     __u16                ts_pid_audio;
  431.     __u16                ts_pid_video;
  432.     __u16                ts_pid_pcr;
  433.  
  434.     /* program stream */
  435.     __u16                ps_size;
  436.     __u16                reserved_1;    /* align */
  437.  
  438.     /* audio */
  439.     enum v4l2_mpeg_audiotype    au_type;
  440.     struct v4l2_bitrate        au_bitrate;
  441.     __u32                au_sample_rate;
  442.     __u8                            au_pesid;
  443.     __u8                            reserved_2[3]; /* align */
  444.  
  445.     /* video */
  446.     enum v4l2_mpeg_videotype    vi_type;
  447.     enum v4l2_mpeg_aspectratio    vi_aspect_ratio;
  448.     struct v4l2_bitrate        vi_bitrate;
  449.     __u32                vi_frame_rate;
  450.     __u16                vi_frames_per_gop;
  451.     __u16                vi_bframes_count;
  452.     __u8                            vi_pesid;
  453.     __u8                            reserved_3[3]; /* align */
  454.  
  455.     /* misc flags */
  456.     __u32                           closed_gops:1;
  457.     __u32                           pulldown:1;
  458.     __u32                           reserved_4:30; /* align */
  459.  
  460.     /* I don't expect the above being perfect yet ;) */
  461.     __u32                reserved_5[8];
  462. };
  463.  
  464. struct v4l2_jpegcompression
  465. {
  466.     int quality;
  467.  
  468.     int  APPn;              /* Number of APP segment to be written,
  469.                  * must be 0..15 */
  470.     int  APP_len;           /* Length of data in JPEG APPn segment */
  471.     char APP_data[60];      /* Data in the JPEG APPn segment. */
  472.  
  473.     int  COM_len;           /* Length of data in JPEG COM segment */
  474.     char COM_data[60];      /* Data in JPEG COM segment */
  475.  
  476.     __u32 jpeg_markers;     /* Which markers should go into the JPEG
  477.                  * output. Unless you exactly know what
  478.                  * you do, leave them untouched.
  479.                  * Inluding less markers will make the
  480.                  * resulting code smaller, but there will
  481.                  * be fewer aplications which can read it.
  482.                  * The presence of the APP and COM marker
  483.                  * is influenced by APP_len and COM_len
  484.                  * ONLY, not by this property! */
  485.  
  486. #define V4L2_JPEG_MARKER_DHT (1<<3)    /* Define Huffman Tables */
  487. #define V4L2_JPEG_MARKER_DQT (1<<4)    /* Define Quantization Tables */
  488. #define V4L2_JPEG_MARKER_DRI (1<<5)    /* Define Restart Interval */
  489. #define V4L2_JPEG_MARKER_COM (1<<6)    /* Comment segment */
  490. #define V4L2_JPEG_MARKER_APP (1<<7)    /* App segment, driver will
  491.                     * allways use APP0 */
  492. };
  493.  
  494.  
  495. /*
  496.  *    M E M O R Y - M A P P I N G   B U F F E R S
  497.  */
  498. struct v4l2_requestbuffers
  499. {
  500.     __u32            count;
  501.     enum v4l2_buf_type      type;
  502.     enum v4l2_memory        memory;
  503.     __u32            reserved[2];
  504. };
  505.  
  506. struct v4l2_buffer
  507. {
  508.     __u32            index;
  509.     enum v4l2_buf_type      type;
  510.     __u32            bytesused;
  511.     __u32            flags;
  512.     enum v4l2_field        field;
  513.     struct timeval        timestamp;
  514.     struct v4l2_timecode    timecode;
  515.     __u32            sequence;
  516.  
  517.     /* memory location */
  518.     enum v4l2_memory        memory;
  519.     union {
  520.         __u32           offset;
  521.         unsigned long   userptr;
  522.     } m;
  523.     __u32            length;
  524.     __u32            input;
  525.     __u32            reserved;
  526. };
  527.  
  528. /*  Flags for 'flags' field */
  529. #define V4L2_BUF_FLAG_MAPPED    0x0001  /* Buffer is mapped (flag) */
  530. #define V4L2_BUF_FLAG_QUEUED    0x0002    /* Buffer is queued for processing */
  531. #define V4L2_BUF_FLAG_DONE    0x0004    /* Buffer is ready */
  532. #define V4L2_BUF_FLAG_KEYFRAME    0x0008    /* Image is a keyframe (I-frame) */
  533. #define V4L2_BUF_FLAG_PFRAME    0x0010    /* Image is a P-frame */
  534. #define V4L2_BUF_FLAG_BFRAME    0x0020    /* Image is a B-frame */
  535. #define V4L2_BUF_FLAG_TIMECODE    0x0100    /* timecode field is valid */
  536. #define V4L2_BUF_FLAG_INPUT     0x0200  /* input field is valid */
  537.  
  538. /*
  539.  *    O V E R L A Y   P R E V I E W
  540.  */
  541. struct v4l2_framebuffer
  542. {
  543.     __u32            capability;
  544.     __u32            flags;
  545. /* FIXME: in theory we should pass something like PCI device + memory
  546.  * region + offset instead of some physical address */
  547.     void*                   base;
  548.     struct v4l2_pix_format    fmt;
  549. };
  550. /*  Flags for the 'capability' field. Read only */
  551. #define V4L2_FBUF_CAP_EXTERNOVERLAY    0x0001
  552. #define V4L2_FBUF_CAP_CHROMAKEY        0x0002
  553. #define V4L2_FBUF_CAP_LIST_CLIPPING     0x0004
  554. #define V4L2_FBUF_CAP_BITMAP_CLIPPING    0x0008
  555. /*  Flags for the 'flags' field. */
  556. #define V4L2_FBUF_FLAG_PRIMARY        0x0001
  557. #define V4L2_FBUF_FLAG_OVERLAY        0x0002
  558. #define V4L2_FBUF_FLAG_CHROMAKEY    0x0004
  559.  
  560. struct v4l2_clip
  561. {
  562.     struct v4l2_rect        c;
  563.     struct v4l2_clip    __user *next;
  564. };
  565.  
  566. struct v4l2_window
  567. {
  568.     struct v4l2_rect        w;
  569.     enum v4l2_field      field;
  570.     __u32            chromakey;
  571.     struct v4l2_clip    __user *clips;
  572.     __u32            clipcount;
  573.     void            __user *bitmap;
  574. };
  575.  
  576.  
  577. /*
  578.  *    C A P T U R E   P A R A M E T E R S
  579.  */
  580. struct v4l2_captureparm
  581. {
  582.     __u32           capability;      /*  Supported modes */
  583.     __u32           capturemode;      /*  Current mode */
  584.     struct v4l2_fract  timeperframe;  /*  Time per frame in .1us units */
  585.     __u32           extendedmode;  /*  Driver-specific extensions */
  586.     __u32              readbuffers;   /*  # of buffers for read */
  587.     __u32           reserved[4];
  588. };
  589. /*  Flags for 'capability' and 'capturemode' fields */
  590. #define V4L2_MODE_HIGHQUALITY    0x0001    /*  High quality imaging mode */
  591. #define V4L2_CAP_TIMEPERFRAME    0x1000    /*  timeperframe field is supported */
  592.  
  593. struct v4l2_outputparm
  594. {
  595.     __u32           capability;     /*  Supported modes */
  596.     __u32           outputmode;     /*  Current mode */
  597.     struct v4l2_fract  timeperframe; /*  Time per frame in seconds */
  598.     __u32           extendedmode; /*  Driver-specific extensions */
  599.     __u32              writebuffers; /*  # of buffers for write */
  600.     __u32           reserved[4];
  601. };
  602.  
  603. /*
  604.  *    I N P U T   I M A G E   C R O P P I N G
  605.  */
  606.  
  607. struct v4l2_cropcap {
  608.     enum v4l2_buf_type      type;
  609.     struct v4l2_rect        bounds;
  610.     struct v4l2_rect        defrect;
  611.     struct v4l2_fract       pixelaspect;
  612. };
  613.  
  614. struct v4l2_crop {
  615.     enum v4l2_buf_type      type;
  616.     struct v4l2_rect        c;
  617. };
  618.  
  619. /*
  620.  *      A N A L O G   V I D E O   S T A N D A R D
  621.  */
  622.  
  623. typedef __u64 v4l2_std_id;
  624.  
  625. /* one bit for each */
  626. #define V4L2_STD_PAL_B          ((v4l2_std_id)0x00000001)
  627. #define V4L2_STD_PAL_B1         ((v4l2_std_id)0x00000002)
  628. #define V4L2_STD_PAL_G          ((v4l2_std_id)0x00000004)
  629. #define V4L2_STD_PAL_H          ((v4l2_std_id)0x00000008)
  630. #define V4L2_STD_PAL_I          ((v4l2_std_id)0x00000010)
  631. #define V4L2_STD_PAL_D          ((v4l2_std_id)0x00000020)
  632. #define V4L2_STD_PAL_D1         ((v4l2_std_id)0x00000040)
  633. #define V4L2_STD_PAL_K          ((v4l2_std_id)0x00000080)
  634.  
  635. #define V4L2_STD_PAL_M          ((v4l2_std_id)0x00000100)
  636. #define V4L2_STD_PAL_N          ((v4l2_std_id)0x00000200)
  637. #define V4L2_STD_PAL_Nc         ((v4l2_std_id)0x00000400)
  638. #define V4L2_STD_PAL_60         ((v4l2_std_id)0x00000800)
  639.  
  640. #define V4L2_STD_NTSC_M         ((v4l2_std_id)0x00001000)
  641. #define V4L2_STD_NTSC_M_JP      ((v4l2_std_id)0x00002000)
  642. #define V4L2_STD_NTSC_443       ((v4l2_std_id)0x00004000)
  643. #define V4L2_STD_NTSC_M_KR      ((v4l2_std_id)0x00008000)
  644.  
  645. #define V4L2_STD_SECAM_B        ((v4l2_std_id)0x00010000)
  646. #define V4L2_STD_SECAM_D        ((v4l2_std_id)0x00020000)
  647. #define V4L2_STD_SECAM_G        ((v4l2_std_id)0x00040000)
  648. #define V4L2_STD_SECAM_H        ((v4l2_std_id)0x00080000)
  649. #define V4L2_STD_SECAM_K        ((v4l2_std_id)0x00100000)
  650. #define V4L2_STD_SECAM_K1       ((v4l2_std_id)0x00200000)
  651. #define V4L2_STD_SECAM_L        ((v4l2_std_id)0x00400000)
  652. #define V4L2_STD_SECAM_LC       ((v4l2_std_id)0x00800000)
  653.  
  654. /* ATSC/HDTV */
  655. #define V4L2_STD_ATSC_8_VSB     ((v4l2_std_id)0x01000000)
  656. #define V4L2_STD_ATSC_16_VSB    ((v4l2_std_id)0x02000000)
  657.  
  658. /* some merged standards */
  659. #define V4L2_STD_MN    (V4L2_STD_PAL_M|V4L2_STD_PAL_N|V4L2_STD_PAL_Nc|V4L2_STD_NTSC)
  660. #define V4L2_STD_B    (V4L2_STD_PAL_B|V4L2_STD_PAL_B1|V4L2_STD_SECAM_B)
  661. #define V4L2_STD_GH    (V4L2_STD_PAL_G|V4L2_STD_PAL_H|V4L2_STD_SECAM_G|V4L2_STD_SECAM_H)
  662. #define V4L2_STD_DK    (V4L2_STD_PAL_DK|V4L2_STD_SECAM_DK)
  663.  
  664. /* some common needed stuff */
  665. #define V4L2_STD_PAL_BG        (V4L2_STD_PAL_B        |\
  666.                  V4L2_STD_PAL_B1    |\
  667.                  V4L2_STD_PAL_G)
  668. #define V4L2_STD_PAL_DK        (V4L2_STD_PAL_D        |\
  669.                  V4L2_STD_PAL_D1    |\
  670.                  V4L2_STD_PAL_K)
  671. #define V4L2_STD_PAL        (V4L2_STD_PAL_BG    |\
  672.                  V4L2_STD_PAL_DK    |\
  673.                  V4L2_STD_PAL_H        |\
  674.                  V4L2_STD_PAL_I)
  675. #define V4L2_STD_NTSC           (V4L2_STD_NTSC_M    |\
  676.                  V4L2_STD_NTSC_M_JP     |\
  677.                  V4L2_STD_NTSC_M_KR)
  678. #define V4L2_STD_SECAM_DK          (V4L2_STD_SECAM_D    |\
  679.                  V4L2_STD_SECAM_K    |\
  680.                  V4L2_STD_SECAM_K1)
  681. #define V4L2_STD_SECAM        (V4L2_STD_SECAM_B    |\
  682.                  V4L2_STD_SECAM_G    |\
  683.                  V4L2_STD_SECAM_H    |\
  684.                  V4L2_STD_SECAM_DK    |\
  685.                  V4L2_STD_SECAM_L       |\
  686.                  V4L2_STD_SECAM_LC)
  687.  
  688. #define V4L2_STD_525_60        (V4L2_STD_PAL_M        |\
  689.                  V4L2_STD_PAL_60    |\
  690.                  V4L2_STD_NTSC        |\
  691.                  V4L2_STD_NTSC_443)
  692. #define V4L2_STD_625_50        (V4L2_STD_PAL        |\
  693.                  V4L2_STD_PAL_N        |\
  694.                  V4L2_STD_PAL_Nc    |\
  695.                  V4L2_STD_SECAM)
  696. #define V4L2_STD_ATSC           (V4L2_STD_ATSC_8_VSB    |\
  697.                  V4L2_STD_ATSC_16_VSB)
  698.  
  699. #define V4L2_STD_UNKNOWN        0
  700. #define V4L2_STD_ALL            (V4L2_STD_525_60    |\
  701.                  V4L2_STD_625_50)
  702.  
  703. struct v4l2_standard
  704. {
  705.     __u32             index;
  706.     v4l2_std_id          id;
  707.     __u8             name[24];
  708.     struct v4l2_fract    frameperiod; /* Frames, not fields */
  709.     __u32             framelines;
  710.     __u32             reserved[4];
  711. };
  712.  
  713.  
  714. /*
  715.  *    V I D E O   I N P U T S
  716.  */
  717. struct v4l2_input
  718. {
  719.     __u32         index;        /*  Which input */
  720.     __u8         name[32];        /*  Label */
  721.     __u32         type;        /*  Type of input */
  722.     __u32         audioset;        /*  Associated audios (bitfield) */
  723.     __u32        tuner;             /*  Associated tuner */
  724.     v4l2_std_id  std;
  725.     __u32         status;
  726.     __u32         reserved[4];
  727. };
  728. /*  Values for the 'type' field */
  729. #define V4L2_INPUT_TYPE_TUNER        1
  730. #define V4L2_INPUT_TYPE_CAMERA        2
  731.  
  732. /* field 'status' - general */
  733. #define V4L2_IN_ST_NO_POWER    0x00000001  /* Attached device is off */
  734. #define V4L2_IN_ST_NO_SIGNAL   0x00000002
  735. #define V4L2_IN_ST_NO_COLOR    0x00000004
  736.  
  737. /* field 'status' - analog */
  738. #define V4L2_IN_ST_NO_H_LOCK   0x00000100  /* No horizontal sync lock */
  739. #define V4L2_IN_ST_COLOR_KILL  0x00000200  /* Color killer is active */
  740.  
  741. /* field 'status' - digital */
  742. #define V4L2_IN_ST_NO_SYNC     0x00010000  /* No synchronization lock */
  743. #define V4L2_IN_ST_NO_EQU      0x00020000  /* No equalizer lock */
  744. #define V4L2_IN_ST_NO_CARRIER  0x00040000  /* Carrier recovery failed */
  745.  
  746. /* field 'status' - VCR and set-top box */
  747. #define V4L2_IN_ST_MACROVISION 0x01000000  /* Macrovision detected */
  748. #define V4L2_IN_ST_NO_ACCESS   0x02000000  /* Conditional access denied */
  749. #define V4L2_IN_ST_VTR         0x04000000  /* VTR time constant */
  750.  
  751. /*
  752.  *    V I D E O   O U T P U T S
  753.  */
  754. struct v4l2_output
  755. {
  756.     __u32         index;        /*  Which output */
  757.     __u8         name[32];        /*  Label */
  758.     __u32         type;        /*  Type of output */
  759.     __u32         audioset;        /*  Associated audios (bitfield) */
  760.     __u32         modulator;         /*  Associated modulator */
  761.     v4l2_std_id  std;
  762.     __u32         reserved[4];
  763. };
  764. /*  Values for the 'type' field */
  765. #define V4L2_OUTPUT_TYPE_MODULATOR        1
  766. #define V4L2_OUTPUT_TYPE_ANALOG            2
  767. #define V4L2_OUTPUT_TYPE_ANALOGVGAOVERLAY    3
  768.  
  769. /*
  770.  *    C O N T R O L S
  771.  */
  772. struct v4l2_control
  773. {
  774.     __u32             id;
  775.     __s32             value;
  776. };
  777.  
  778. /*  Used in the VIDIOC_QUERYCTRL ioctl for querying controls */
  779. struct v4l2_queryctrl
  780. {
  781.     __u32             id;
  782.     enum v4l2_ctrl_type  type;
  783.     __u8             name[32];    /* Whatever */
  784.     __s32             minimum;    /* Note signedness */
  785.     __s32             maximum;
  786.     __s32             step;
  787.     __s32             default_value;
  788.     __u32                flags;
  789.     __u32             reserved[2];
  790. };
  791.  
  792. /*  Used in the VIDIOC_QUERYMENU ioctl for querying menu items */
  793. struct v4l2_querymenu
  794. {
  795.     __u32        id;
  796.     __u32        index;
  797.     __u8        name[32];    /* Whatever */
  798.     __u32        reserved;
  799. };
  800.  
  801. /*  Control flags  */
  802. #define V4L2_CTRL_FLAG_DISABLED        0x0001
  803. #define V4L2_CTRL_FLAG_GRABBED        0x0002
  804.  
  805. /*  Control IDs defined by V4L2 */
  806. #define V4L2_CID_BASE            0x00980900
  807. /*  IDs reserved for driver specific controls */
  808. #define V4L2_CID_PRIVATE_BASE        0x08000000
  809.  
  810. #define V4L2_CID_BRIGHTNESS        (V4L2_CID_BASE+0)
  811. #define V4L2_CID_CONTRAST        (V4L2_CID_BASE+1)
  812. #define V4L2_CID_SATURATION        (V4L2_CID_BASE+2)
  813. #define V4L2_CID_HUE            (V4L2_CID_BASE+3)
  814. #define V4L2_CID_AUDIO_VOLUME        (V4L2_CID_BASE+5)
  815. #define V4L2_CID_AUDIO_BALANCE        (V4L2_CID_BASE+6)
  816. #define V4L2_CID_AUDIO_BASS        (V4L2_CID_BASE+7)
  817. #define V4L2_CID_AUDIO_TREBLE        (V4L2_CID_BASE+8)
  818. #define V4L2_CID_AUDIO_MUTE        (V4L2_CID_BASE+9)
  819. #define V4L2_CID_AUDIO_LOUDNESS        (V4L2_CID_BASE+10)
  820. #define V4L2_CID_BLACK_LEVEL        (V4L2_CID_BASE+11)
  821. #define V4L2_CID_AUTO_WHITE_BALANCE    (V4L2_CID_BASE+12)
  822. #define V4L2_CID_DO_WHITE_BALANCE    (V4L2_CID_BASE+13)
  823. #define V4L2_CID_RED_BALANCE        (V4L2_CID_BASE+14)
  824. #define V4L2_CID_BLUE_BALANCE        (V4L2_CID_BASE+15)
  825. #define V4L2_CID_GAMMA            (V4L2_CID_BASE+16)
  826. #define V4L2_CID_WHITENESS        (V4L2_CID_GAMMA) /* ? Not sure */
  827. #define V4L2_CID_EXPOSURE        (V4L2_CID_BASE+17)
  828. #define V4L2_CID_AUTOGAIN        (V4L2_CID_BASE+18)
  829. #define V4L2_CID_GAIN            (V4L2_CID_BASE+19)
  830. #define V4L2_CID_HFLIP            (V4L2_CID_BASE+20)
  831. #define V4L2_CID_VFLIP            (V4L2_CID_BASE+21)
  832. #define V4L2_CID_HCENTER        (V4L2_CID_BASE+22)
  833. #define V4L2_CID_VCENTER        (V4L2_CID_BASE+23)
  834. #define V4L2_CID_LASTP1            (V4L2_CID_BASE+24) /* last CID + 1 */
  835.  
  836. /*
  837.  *    T U N I N G
  838.  */
  839. struct v4l2_tuner
  840. {
  841.     __u32                   index;
  842.     __u8            name[32];
  843.     enum v4l2_tuner_type    type;
  844.     __u32            capability;
  845.     __u32            rangelow;
  846.     __u32            rangehigh;
  847.     __u32            rxsubchans;
  848.     __u32            audmode;
  849.     __s32            signal;
  850.     __s32            afc;
  851.     __u32            reserved[4];
  852. };
  853.  
  854. struct v4l2_modulator
  855. {
  856.     __u32            index;
  857.     __u8            name[32];
  858.     __u32            capability;
  859.     __u32            rangelow;
  860.     __u32            rangehigh;
  861.     __u32            txsubchans;
  862.     __u32            reserved[4];
  863. };
  864.  
  865. /*  Flags for the 'capability' field */
  866. #define V4L2_TUNER_CAP_LOW        0x0001
  867. #define V4L2_TUNER_CAP_NORM        0x0002
  868. #define V4L2_TUNER_CAP_STEREO        0x0010
  869. #define V4L2_TUNER_CAP_LANG2        0x0020
  870. #define V4L2_TUNER_CAP_SAP        0x0020
  871. #define V4L2_TUNER_CAP_LANG1        0x0040
  872.  
  873. /*  Flags for the 'rxsubchans' field */
  874. #define V4L2_TUNER_SUB_MONO        0x0001
  875. #define V4L2_TUNER_SUB_STEREO        0x0002
  876. #define V4L2_TUNER_SUB_LANG2        0x0004
  877. #define V4L2_TUNER_SUB_SAP        0x0004
  878. #define V4L2_TUNER_SUB_LANG1        0x0008
  879.  
  880. /*  Values for the 'audmode' field */
  881. #define V4L2_TUNER_MODE_MONO        0x0000
  882. #define V4L2_TUNER_MODE_STEREO        0x0001
  883. #define V4L2_TUNER_MODE_LANG2        0x0002
  884. #define V4L2_TUNER_MODE_SAP        0x0002
  885. #define V4L2_TUNER_MODE_LANG1        0x0003
  886. #define V4L2_TUNER_MODE_LANG1_LANG2    0x0004
  887.  
  888. struct v4l2_frequency
  889. {
  890.     __u32              tuner;
  891.     enum v4l2_tuner_type  type;
  892.     __u32              frequency;
  893.     __u32              reserved[8];
  894. };
  895.  
  896. /*
  897.  *    A U D I O
  898.  */
  899. struct v4l2_audio
  900. {
  901.     __u32    index;
  902.     __u8    name[32];
  903.     __u32    capability;
  904.     __u32    mode;
  905.     __u32    reserved[2];
  906. };
  907. /*  Flags for the 'capability' field */
  908. #define V4L2_AUDCAP_STEREO        0x00001
  909. #define V4L2_AUDCAP_AVL            0x00002
  910.  
  911. /*  Flags for the 'mode' field */
  912. #define V4L2_AUDMODE_AVL        0x00001
  913.  
  914. struct v4l2_audioout
  915. {
  916.     __u32    index;
  917.     __u8    name[32];
  918.     __u32    capability;
  919.     __u32    mode;
  920.     __u32    reserved[2];
  921. };
  922.  
  923. /*
  924.  *    D A T A   S E R V I C E S   ( V B I )
  925.  *
  926.  *    Data services API by Michael Schimek
  927.  */
  928.  
  929. /* Raw VBI */
  930.  
  931. struct v4l2_vbi_format
  932. {
  933.     __u32    sampling_rate;        /* in 1 Hz */
  934.     __u32    offset;
  935.     __u32    samples_per_line;
  936.     __u32    sample_format;        /* V4L2_PIX_FMT_* */
  937.     __s32    start[2];
  938.     __u32    count[2];
  939.     __u32    flags;            /* V4L2_VBI_* */
  940.     __u32    reserved[2];        /* must be zero */
  941. };
  942.  
  943. /*  VBI flags  */
  944. #define V4L2_VBI_UNSYNC        (1<< 0)
  945. #define V4L2_VBI_INTERLACED    (1<< 1)
  946.  
  947. #if 1
  948. /* Sliced VBI
  949.  *
  950.  *    This implements is a proposal V4L2 API to allow SLICED VBI
  951.  * required for some hardware encoders. It should change without
  952.  * notice in the definitive implementation.
  953.  */
  954.  
  955. struct v4l2_sliced_vbi_format
  956. {
  957.     __u16   service_set;
  958.     /* service_lines[0][...] specifies lines 0-23 (1-23 used) of the first field
  959.        service_lines[1][...] specifies lines 0-23 (1-23 used) of the second field
  960.                  (equals frame lines 313-336 for 625 line video
  961.                   standards, 263-286 for 525 line standards) */
  962.     __u16   service_lines[2][24];
  963.     __u32   io_size;
  964.     __u32   reserved[2];            /* must be zero */
  965. };
  966.  
  967. /* Teletext World System Teletext
  968.    (WST), defined on ITU-R BT.653-2 */
  969. #define V4L2_SLICED_TELETEXT_B          (0x0001)
  970. /* Video Program System, defined on ETS 300 231*/
  971. #define V4L2_SLICED_VPS                 (0x0400)
  972. /* Closed Caption, defined on EIA-608 */
  973. #define V4L2_SLICED_CAPTION_525         (0x1000)
  974. /* Wide Screen System, defined on ITU-R BT1119.1 */
  975. #define V4L2_SLICED_WSS_625             (0x4000)
  976.  
  977. #define V4L2_SLICED_VBI_525             (V4L2_SLICED_CAPTION_525)
  978. #define V4L2_SLICED_VBI_625             (V4L2_SLICED_TELETEXT_B | V4L2_SLICED_VPS | V4L2_SLICED_WSS_625)
  979.  
  980.  
  981. struct v4l2_sliced_vbi_cap
  982. {
  983.     __u16   service_set;
  984.     /* service_lines[0][...] specifies lines 0-23 (1-23 used) of the first field
  985.        service_lines[1][...] specifies lines 0-23 (1-23 used) of the second field
  986.                  (equals frame lines 313-336 for 625 line video
  987.                   standards, 263-286 for 525 line standards) */
  988.     __u16   service_lines[2][24];
  989.     __u32   reserved[4];    /* must be 0 */
  990. };
  991.  
  992. struct v4l2_sliced_vbi_data
  993. {
  994.     __u32   id;
  995.     __u32   field;          /* 0: first field, 1: second field */
  996.     __u32   line;           /* 1-23 */
  997.     __u32   reserved;       /* must be 0 */
  998.     __u8    data[48];
  999. };
  1000. #endif
  1001.  
  1002. /*
  1003.  *    A G G R E G A T E   S T R U C T U R E S
  1004.  */
  1005.  
  1006. /*    Stream data format
  1007.  */
  1008. struct v4l2_format
  1009. {
  1010.     enum v4l2_buf_type type;
  1011.     union
  1012.     {
  1013.         struct v4l2_pix_format        pix;     // V4L2_BUF_TYPE_VIDEO_CAPTURE
  1014.         struct v4l2_window        win;     // V4L2_BUF_TYPE_VIDEO_OVERLAY
  1015.         struct v4l2_vbi_format        vbi;     // V4L2_BUF_TYPE_VBI_CAPTURE
  1016. #if 1
  1017.         struct v4l2_sliced_vbi_format    sliced;  // V4L2_BUF_TYPE_SLICED_VBI_CAPTURE
  1018. #endif
  1019.         __u8    raw_data[200];                   // user-defined
  1020.     } fmt;
  1021. };
  1022.  
  1023.  
  1024. /*    Stream type-dependent parameters
  1025.  */
  1026. struct v4l2_streamparm
  1027. {
  1028.     enum v4l2_buf_type type;
  1029.     union
  1030.     {
  1031.         struct v4l2_captureparm    capture;
  1032.         struct v4l2_outputparm    output;
  1033.         __u8    raw_data[200];  /* user-defined */
  1034.     } parm;
  1035. };
  1036.  
  1037.  
  1038.  
  1039. /*
  1040.  *    I O C T L   C O D E S   F O R   V I D E O   D E V I C E S
  1041.  *
  1042.  */
  1043. #define VIDIOC_QUERYCAP        _IOR  ('V',  0, struct v4l2_capability)
  1044. #define VIDIOC_RESERVED        _IO   ('V',  1)
  1045. #define VIDIOC_ENUM_FMT         _IOWR ('V',  2, struct v4l2_fmtdesc)
  1046. #define VIDIOC_G_FMT        _IOWR ('V',  4, struct v4l2_format)
  1047. #define VIDIOC_S_FMT        _IOWR ('V',  5, struct v4l2_format)
  1048. #define VIDIOC_G_MPEGCOMP       _IOR  ('V',  6, struct v4l2_mpeg_compression)
  1049. #define VIDIOC_S_MPEGCOMP         _IOW  ('V',  7, struct v4l2_mpeg_compression)
  1050. #define VIDIOC_REQBUFS        _IOWR ('V',  8, struct v4l2_requestbuffers)
  1051. #define VIDIOC_QUERYBUF        _IOWR ('V',  9, struct v4l2_buffer)
  1052. #define VIDIOC_G_FBUF        _IOR  ('V', 10, struct v4l2_framebuffer)
  1053. #define VIDIOC_S_FBUF        _IOW  ('V', 11, struct v4l2_framebuffer)
  1054. #define VIDIOC_OVERLAY        _IOW  ('V', 14, int)
  1055. #define VIDIOC_QBUF        _IOWR ('V', 15, struct v4l2_buffer)
  1056. #define VIDIOC_DQBUF        _IOWR ('V', 17, struct v4l2_buffer)
  1057. #define VIDIOC_STREAMON        _IOW  ('V', 18, int)
  1058. #define VIDIOC_STREAMOFF    _IOW  ('V', 19, int)
  1059. #define VIDIOC_G_PARM        _IOWR ('V', 21, struct v4l2_streamparm)
  1060. #define VIDIOC_S_PARM        _IOWR ('V', 22, struct v4l2_streamparm)
  1061. #define VIDIOC_G_STD        _IOR  ('V', 23, v4l2_std_id)
  1062. #define VIDIOC_S_STD        _IOW  ('V', 24, v4l2_std_id)
  1063. #define VIDIOC_ENUMSTD        _IOWR ('V', 25, struct v4l2_standard)
  1064. #define VIDIOC_ENUMINPUT    _IOWR ('V', 26, struct v4l2_input)
  1065. #define VIDIOC_G_CTRL        _IOWR ('V', 27, struct v4l2_control)
  1066. #define VIDIOC_S_CTRL        _IOWR ('V', 28, struct v4l2_control)
  1067. #define VIDIOC_G_TUNER        _IOWR ('V', 29, struct v4l2_tuner)
  1068. #define VIDIOC_S_TUNER        _IOW  ('V', 30, struct v4l2_tuner)
  1069. #define VIDIOC_G_AUDIO        _IOR  ('V', 33, struct v4l2_audio)
  1070. #define VIDIOC_S_AUDIO        _IOW  ('V', 34, struct v4l2_audio)
  1071. #define VIDIOC_QUERYCTRL    _IOWR ('V', 36, struct v4l2_queryctrl)
  1072. #define VIDIOC_QUERYMENU    _IOWR ('V', 37, struct v4l2_querymenu)
  1073. #define VIDIOC_G_INPUT        _IOR  ('V', 38, int)
  1074. #define VIDIOC_S_INPUT        _IOWR ('V', 39, int)
  1075. #define VIDIOC_G_OUTPUT        _IOR  ('V', 46, int)
  1076. #define VIDIOC_S_OUTPUT        _IOWR ('V', 47, int)
  1077. #define VIDIOC_ENUMOUTPUT    _IOWR ('V', 48, struct v4l2_output)
  1078. #define VIDIOC_G_AUDOUT        _IOR  ('V', 49, struct v4l2_audioout)
  1079. #define VIDIOC_S_AUDOUT        _IOW  ('V', 50, struct v4l2_audioout)
  1080. #define VIDIOC_G_MODULATOR    _IOWR ('V', 54, struct v4l2_modulator)
  1081. #define VIDIOC_S_MODULATOR    _IOW  ('V', 55, struct v4l2_modulator)
  1082. #define VIDIOC_G_FREQUENCY    _IOWR ('V', 56, struct v4l2_frequency)
  1083. #define VIDIOC_S_FREQUENCY    _IOW  ('V', 57, struct v4l2_frequency)
  1084. #define VIDIOC_CROPCAP        _IOWR ('V', 58, struct v4l2_cropcap)
  1085. #define VIDIOC_G_CROP        _IOWR ('V', 59, struct v4l2_crop)
  1086. #define VIDIOC_S_CROP        _IOW  ('V', 60, struct v4l2_crop)
  1087. #define VIDIOC_G_JPEGCOMP    _IOR  ('V', 61, struct v4l2_jpegcompression)
  1088. #define VIDIOC_S_JPEGCOMP    _IOW  ('V', 62, struct v4l2_jpegcompression)
  1089. #define VIDIOC_QUERYSTD          _IOR  ('V', 63, v4l2_std_id)
  1090. #define VIDIOC_TRY_FMT          _IOWR ('V', 64, struct v4l2_format)
  1091. #define VIDIOC_ENUMAUDIO    _IOWR ('V', 65, struct v4l2_audio)
  1092. #define VIDIOC_ENUMAUDOUT    _IOWR ('V', 66, struct v4l2_audioout)
  1093. #define VIDIOC_G_PRIORITY       _IOR  ('V', 67, enum v4l2_priority)
  1094. #define VIDIOC_S_PRIORITY       _IOW  ('V', 68, enum v4l2_priority)
  1095. #if 1
  1096. #define VIDIOC_G_SLICED_VBI_CAP _IOR  ('V', 69, struct v4l2_sliced_vbi_cap)
  1097. #endif
  1098. #define VIDIOC_LOG_STATUS       _IO   ('V', 70)
  1099.  
  1100. /* for compatibility, will go away some day */
  1101. #define VIDIOC_OVERLAY_OLD         _IOWR ('V', 14, int)
  1102. #define VIDIOC_S_PARM_OLD          _IOW  ('V', 22, struct v4l2_streamparm)
  1103. #define VIDIOC_S_CTRL_OLD          _IOW  ('V', 28, struct v4l2_control)
  1104. #define VIDIOC_G_AUDIO_OLD         _IOWR ('V', 33, struct v4l2_audio)
  1105. #define VIDIOC_G_AUDOUT_OLD        _IOWR ('V', 49, struct v4l2_audioout)
  1106. #define VIDIOC_CROPCAP_OLD         _IOR  ('V', 58, struct v4l2_cropcap)
  1107.  
  1108. #define BASE_VIDIOC_PRIVATE    192        /* 192-255 are private */
  1109.  
  1110.  
  1111. #ifdef __KERNEL__
  1112. /*
  1113.  *
  1114.  *    V 4 L 2   D R I V E R   H E L P E R   A P I
  1115.  *
  1116.  *    Some commonly needed functions for drivers (v4l2-common.o module)
  1117.  */
  1118. #include <linux/fs.h>
  1119.  
  1120. /*  Video standard functions  */
  1121. extern unsigned int v4l2_video_std_fps(struct v4l2_standard *vs);
  1122. extern int v4l2_video_std_construct(struct v4l2_standard *vs,
  1123.                     int id, char *name);
  1124.  
  1125. /* prority handling */
  1126. struct v4l2_prio_state {
  1127.     atomic_t prios[4];
  1128. };
  1129. int v4l2_prio_init(struct v4l2_prio_state *global);
  1130. int v4l2_prio_change(struct v4l2_prio_state *global, enum v4l2_priority *local,
  1131.              enum v4l2_priority new);
  1132. int v4l2_prio_open(struct v4l2_prio_state *global, enum v4l2_priority *local);
  1133. int v4l2_prio_close(struct v4l2_prio_state *global, enum v4l2_priority *local);
  1134. enum v4l2_priority v4l2_prio_max(struct v4l2_prio_state *global);
  1135. int v4l2_prio_check(struct v4l2_prio_state *global, enum v4l2_priority *local);
  1136.  
  1137. /* names for fancy debug output */
  1138. extern char *v4l2_field_names[];
  1139. extern char *v4l2_type_names[];
  1140.  
  1141. /*  Compatibility layer interface  --  v4l1-compat module */
  1142. typedef int (*v4l2_kioctl)(struct inode *inode, struct file *file,
  1143.                unsigned int cmd, void *arg);
  1144.  
  1145. #ifdef CONFIG_VIDEO_V4L1_COMPAT
  1146. int v4l_compat_translate_ioctl(struct inode *inode, struct file *file,
  1147.                    int cmd, void *arg, v4l2_kioctl driver_ioctl);
  1148. #else
  1149. #define v4l_compat_translate_ioctl(inode,file,cmd,arg,ioctl) -EINVAL
  1150. #endif
  1151.  
  1152. /* 32 Bits compatibility layer for 64 bits processors */
  1153. extern long v4l_compat_ioctl32(struct file *file, unsigned int cmd,
  1154.                 unsigned long arg);
  1155.  
  1156.  
  1157. #endif /* __KERNEL__ */
  1158. #endif /* __LINUX_VIDEODEV2_H */
  1159.  
  1160. /*
  1161.  * Local variables:
  1162.  * c-basic-offset: 8
  1163.  * End:
  1164.  */
  1165.