videodev2.h
上传用户:kjfoods
上传日期:2020-07-06
资源大小:29949k
文件大小:29k
源码类别:

midi

开发平台:

Unix_Linux

  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. /*
  17.  *    M I S C E L L A N E O U S
  18.  */
  19. /*  Four-character-code (FOURCC) */
  20. #define v4l2_fourcc(a,b,c,d)
  21.         (((__u32)(a)<<0)|((__u32)(b)<<8)|((__u32)(c)<<16)|((__u32)(d)<<24))
  22. /*
  23.  *    E N U M S
  24.  */
  25. enum v4l2_field {
  26.     V4L2_FIELD_ANY        = 0, /* driver can choose from none,
  27.                       top, bottom, interlaced
  28.                       depending on whatever it thinks
  29.                       is approximate ... */
  30.     V4L2_FIELD_NONE       = 1, /* this device has no fields ... */
  31.     V4L2_FIELD_TOP        = 2, /* top field only */
  32.     V4L2_FIELD_BOTTOM     = 3, /* bottom field only */
  33.     V4L2_FIELD_INTERLACED = 4, /* both fields interlaced */
  34.     V4L2_FIELD_SEQ_TB     = 5, /* both fields sequential into one
  35.                       buffer, top-bottom order */
  36.     V4L2_FIELD_SEQ_BT     = 6, /* same as above + bottom-top order */
  37.     V4L2_FIELD_ALTERNATE  = 7, /* both fields alternating into
  38.                       separate buffers */
  39. };
  40. #define V4L2_FIELD_HAS_TOP(field)    
  41.     ((field) == V4L2_FIELD_TOP     ||
  42.      (field) == V4L2_FIELD_INTERLACED ||
  43.      (field) == V4L2_FIELD_SEQ_TB    ||
  44.      (field) == V4L2_FIELD_SEQ_BT)
  45. #define V4L2_FIELD_HAS_BOTTOM(field)    
  46.     ((field) == V4L2_FIELD_BOTTOM     ||
  47.      (field) == V4L2_FIELD_INTERLACED ||
  48.      (field) == V4L2_FIELD_SEQ_TB    ||
  49.      (field) == V4L2_FIELD_SEQ_BT)
  50. #define V4L2_FIELD_HAS_BOTH(field)    
  51.     ((field) == V4L2_FIELD_INTERLACED ||
  52.      (field) == V4L2_FIELD_SEQ_TB    ||
  53.      (field) == V4L2_FIELD_SEQ_BT)
  54. enum v4l2_buf_type {
  55.     V4L2_BUF_TYPE_VIDEO_CAPTURE  = 1,
  56.     V4L2_BUF_TYPE_VIDEO_OUTPUT   = 2,
  57.     V4L2_BUF_TYPE_VIDEO_OVERLAY  = 3,
  58.     V4L2_BUF_TYPE_VBI_CAPTURE    = 4,
  59.     V4L2_BUF_TYPE_VBI_OUTPUT     = 5,
  60.     V4L2_BUF_TYPE_PRIVATE        = 0x80,
  61. };
  62. enum v4l2_ctrl_type {
  63.     V4L2_CTRL_TYPE_INTEGER         = 1,
  64.     V4L2_CTRL_TYPE_BOOLEAN         = 2,
  65.     V4L2_CTRL_TYPE_MENU         = 3,
  66.     V4L2_CTRL_TYPE_BUTTON         = 4,
  67. };
  68. enum v4l2_tuner_type {
  69.     V4L2_TUNER_RADIO         = 1,
  70.     V4L2_TUNER_ANALOG_TV         = 2,
  71. };
  72. enum v4l2_memory {
  73.     V4L2_MEMORY_MMAP             = 1,
  74.     V4L2_MEMORY_USERPTR          = 2,
  75.     V4L2_MEMORY_OVERLAY          = 3,
  76. };
  77. /* see also http://vektor.theorem.ca/graphics/ycbcr/ */
  78. enum v4l2_colorspace {
  79.     /* ITU-R 601 -- broadcast NTSC/PAL */
  80.     V4L2_COLORSPACE_SMPTE170M     = 1,
  81.     /* 1125-Line (US) HDTV */
  82.     V4L2_COLORSPACE_SMPTE240M     = 2,
  83.     /* HD and modern captures. */
  84.     V4L2_COLORSPACE_REC709        = 3,
  85.     
  86.     /* broken BT878 extents (601, luma range 16-253 instead of 16-235) */
  87.     V4L2_COLORSPACE_BT878         = 4,
  88.     
  89.     /* These should be useful.  Assume 601 extents. */
  90.     V4L2_COLORSPACE_470_SYSTEM_M  = 5,
  91.     V4L2_COLORSPACE_470_SYSTEM_BG = 6,
  92.     
  93.     /* I know there will be cameras that send this.  So, this is
  94.      * unspecified chromaticities and full 0-255 on each of the
  95.      * Y'CbCr components
  96.      */
  97.     V4L2_COLORSPACE_JPEG          = 7,
  98.     
  99.     /* For RGB colourspaces, this is probably a good start. */
  100.     V4L2_COLORSPACE_SRGB          = 8,
  101. };
  102. struct v4l2_rect {
  103.     __s32   left;
  104.     __s32   top;
  105.     __s32   width;
  106.     __s32   height;
  107. };
  108. struct v4l2_fract {
  109.     __u32   numerator;
  110.     __u32   denominator;
  111. };
  112. /*
  113.  *    D R I V E R   C A P A B I L I T I E S
  114.  */
  115. struct v4l2_capability
  116. {
  117.     __u8    driver[16];    /* i.e. "bttv" */
  118.     __u8    card[32];    /* i.e. "Hauppauge WinTV" */
  119.     __u8    bus_info[32];    /* "PCI:" + pci_dev->slot_name */
  120.     __u32   version;        /* should use KERNEL_VERSION() */
  121.     __u32    capabilities;    /* Device capabilities */
  122.     __u32    reserved[4];
  123. };
  124. /* Values for 'capabilities' field */
  125. #define V4L2_CAP_VIDEO_CAPTURE    0x00000001  /* Is a video capture device */
  126. #define V4L2_CAP_VIDEO_OUTPUT    0x00000002  /* Is a video output device */
  127. #define V4L2_CAP_VIDEO_OVERLAY    0x00000004  /* Can do video overlay */
  128. #define V4L2_CAP_VBI_CAPTURE    0x00000010  /* Is a VBI capture device */
  129. #define V4L2_CAP_VBI_OUTPUT    0x00000020  /* Is a VBI output device */
  130. #define V4L2_CAP_RDS_CAPTURE    0x00000100  /* RDS data capture */
  131. #define V4L2_CAP_TUNER        0x00010000  /* Has a tuner */
  132. #define V4L2_CAP_AUDIO        0x00020000  /* has audio support */
  133. #define V4L2_CAP_READWRITE      0x01000000  /* read/write systemcalls */
  134. #define V4L2_CAP_ASYNCIO        0x02000000  /* async I/O */
  135. #define V4L2_CAP_STREAMING      0x04000000  /* streaming I/O ioctls */
  136. /*
  137.  *    V I D E O   I M A G E   F O R M A T
  138.  */
  139. struct v4l2_pix_format
  140. {
  141.     __u32                  width;
  142.     __u32                 height;
  143.     __u32                 pixelformat;
  144.     enum v4l2_field      field;
  145.     __u32                bytesperline;    /* for padding, zero if unused */
  146.     __u32                   sizeimage;
  147.         enum v4l2_colorspace    colorspace;
  148.     __u32            priv;        /* private data, depends on pixelformat */
  149. };
  150. /*           Pixel format    FOURCC                  depth  Description   */
  151. #define V4L2_PIX_FMT_RGB332  v4l2_fourcc('R','G','B','1') /*  8  RGB-3-3-2     */
  152. #define V4L2_PIX_FMT_RGB555  v4l2_fourcc('R','G','B','O') /* 16  RGB-5-5-5     */
  153. #define V4L2_PIX_FMT_RGB565  v4l2_fourcc('R','G','B','P') /* 16  RGB-5-6-5     */
  154. #define V4L2_PIX_FMT_RGB555X v4l2_fourcc('R','G','B','Q') /* 16  RGB-5-5-5 BE  */
  155. #define V4L2_PIX_FMT_RGB565X v4l2_fourcc('R','G','B','R') /* 16  RGB-5-6-5 BE  */
  156. #define V4L2_PIX_FMT_BGR24   v4l2_fourcc('B','G','R','3') /* 24  BGR-8-8-8     */
  157. #define V4L2_PIX_FMT_RGB24   v4l2_fourcc('R','G','B','3') /* 24  RGB-8-8-8     */
  158. #define V4L2_PIX_FMT_BGR32   v4l2_fourcc('B','G','R','4') /* 32  BGR-8-8-8-8   */
  159. #define V4L2_PIX_FMT_RGB32   v4l2_fourcc('R','G','B','4') /* 32  RGB-8-8-8-8   */
  160. #define V4L2_PIX_FMT_GREY    v4l2_fourcc('G','R','E','Y') /*  8  Greyscale     */
  161. #define V4L2_PIX_FMT_YVU410  v4l2_fourcc('Y','V','U','9') /*  9  YVU 4:1:0     */
  162. #define V4L2_PIX_FMT_YVU420  v4l2_fourcc('Y','V','1','2') /* 12  YVU 4:2:0     */
  163. #define V4L2_PIX_FMT_YUYV    v4l2_fourcc('Y','U','Y','V') /* 16  YUV 4:2:2     */
  164. #define V4L2_PIX_FMT_UYVY    v4l2_fourcc('U','Y','V','Y') /* 16  YUV 4:2:2     */
  165. #define V4L2_PIX_FMT_YUV422P v4l2_fourcc('4','2','2','P') /* 16  YVU422 planar */
  166. #define V4L2_PIX_FMT_YUV411P v4l2_fourcc('4','1','1','P') /* 16  YVU411 planar */
  167. #define V4L2_PIX_FMT_Y41P    v4l2_fourcc('Y','4','1','P') /* 12  YUV 4:1:1     */
  168. /* two planes -- one Y, one Cr + Cb interleaved  */
  169. #define V4L2_PIX_FMT_NV12    v4l2_fourcc('N','V','1','2') /* 12  Y/CbCr 4:2:0  */
  170. #define V4L2_PIX_FMT_NV21    v4l2_fourcc('N','V','2','1') /* 12  Y/CrCb 4:2:0  */
  171. /*  The following formats are not defined in the V4L2 specification */
  172. #define V4L2_PIX_FMT_YUV410  v4l2_fourcc('Y','U','V','9') /*  9  YUV 4:1:0     */
  173. #define V4L2_PIX_FMT_YUV420  v4l2_fourcc('Y','U','1','2') /* 12  YUV 4:2:0     */
  174. #define V4L2_PIX_FMT_YYUV    v4l2_fourcc('Y','Y','U','V') /* 16  YUV 4:2:2     */
  175. #define V4L2_PIX_FMT_HI240   v4l2_fourcc('H','I','2','4') /*  8  8-bit color   */
  176. /* compressed formats */
  177. #define V4L2_PIX_FMT_MJPEG    v4l2_fourcc('M','J','P','G') /* Motion-JPEG   */
  178. #define V4L2_PIX_FMT_JPEG     v4l2_fourcc('J','P','E','G') /* JFIF JPEG     */
  179. #define V4L2_PIX_FMT_DV       v4l2_fourcc('d','v','s','d') /* 1394          */
  180. #define V4L2_PIX_FMT_MPEG     v4l2_fourcc('M','P','E','G') /* MPEG          */
  181. /*  Vendor-specific formats   */
  182. #define V4L2_PIX_FMT_WNVA    v4l2_fourcc('W','N','V','A') /* Winnov hw compres */
  183. /*
  184.  *    F O R M A T   E N U M E R A T I O N
  185.  */
  186. struct v4l2_fmtdesc
  187. {
  188.     __u32                index;             /* Format number      */
  189.     enum v4l2_buf_type  type;              /* buffer type        */
  190.     __u32               flags;
  191.     __u8                description[32];   /* Description string */
  192.     __u32                pixelformat;       /* Format fourcc      */
  193.     __u32                reserved[4];
  194. };
  195. #define V4L2_FMT_FLAG_COMPRESSED 0x0001
  196. /*
  197.  *    T I M E C O D E
  198.  */
  199. struct v4l2_timecode
  200. {
  201.     __u32    type;
  202.     __u32    flags;
  203.     __u8    frames;
  204.     __u8    seconds;
  205.     __u8    minutes;
  206.     __u8    hours;
  207.     __u8    userbits[4];
  208. };
  209. /*  Type  */
  210. #define V4L2_TC_TYPE_24FPS        1
  211. #define V4L2_TC_TYPE_25FPS        2
  212. #define V4L2_TC_TYPE_30FPS        3
  213. #define V4L2_TC_TYPE_50FPS        4
  214. #define V4L2_TC_TYPE_60FPS        5
  215. /*  Flags  */
  216. #define V4L2_TC_FLAG_DROPFRAME        0x0001 /* "drop-frame" mode */
  217. #define V4L2_TC_FLAG_COLORFRAME        0x0002
  218. #define V4L2_TC_USERBITS_field        0x000C
  219. #define V4L2_TC_USERBITS_USERDEFINED    0x0000
  220. #define V4L2_TC_USERBITS_8BITCHARS    0x0008
  221. /* The above is based on SMPTE timecodes */
  222. /*
  223.  *    C O M P R E S S I O N   P A R A M E T E R S
  224.  */
  225. #if 0
  226. /* ### generic compression settings don't work, there is too much
  227.  * ### codec-specific stuff.  Maybe reuse that for MPEG codec settings
  228.  * ### later ... */
  229. struct v4l2_compression
  230. {
  231.     __u32    quality;
  232.     __u32    keyframerate;
  233.     __u32    pframerate;
  234.     __u32    reserved[5];
  235. };
  236. #endif
  237. struct v4l2_jpegcompression
  238. {
  239.     int quality;
  240.     int  APPn;              /* Number of APP segment to be written,
  241.                  * must be 0..15 */
  242.     int  APP_len;           /* Length of data in JPEG APPn segment */
  243.     char APP_data[60];      /* Data in the JPEG APPn segment. */
  244.     
  245.     int  COM_len;           /* Length of data in JPEG COM segment */
  246.     char COM_data[60];      /* Data in JPEG COM segment */
  247.     
  248.     __u32 jpeg_markers;     /* Which markers should go into the JPEG
  249.                  * output. Unless you exactly know what
  250.                  * you do, leave them untouched.
  251.                  * Inluding less markers will make the
  252.                  * resulting code smaller, but there will
  253.                  * be fewer aplications which can read it.
  254.                  * The presence of the APP and COM marker
  255.                  * is influenced by APP_len and COM_len
  256.                  * ONLY, not by this property! */
  257.     
  258. #define V4L2_JPEG_MARKER_DHT (1<<3)    /* Define Huffman Tables */
  259. #define V4L2_JPEG_MARKER_DQT (1<<4)    /* Define Quantization Tables */
  260. #define V4L2_JPEG_MARKER_DRI (1<<5)    /* Define Restart Interval */
  261. #define V4L2_JPEG_MARKER_COM (1<<6)    /* Comment segment */
  262. #define V4L2_JPEG_MARKER_APP (1<<7)    /* App segment, driver will
  263.                                         * allways use APP0 */
  264. };
  265. /*
  266.  *    M E M O R Y - M A P P I N G   B U F F E R S
  267.  */
  268. struct v4l2_requestbuffers
  269. {
  270.     __u32                    count;
  271.     enum v4l2_buf_type      type;
  272.     enum v4l2_memory        memory;
  273.     __u32                    reserved[2];
  274. };
  275. struct v4l2_buffer
  276. {
  277.     __u32            index;
  278.     enum v4l2_buf_type      type;
  279.     __u32            bytesused;
  280.     __u32            flags;
  281.     enum v4l2_field        field;
  282.     struct timeval        timestamp;
  283.     struct v4l2_timecode    timecode;
  284.     __u32            sequence;
  285.     /* memory location */
  286.     enum v4l2_memory        memory;
  287.     union {
  288.         __u32           offset;
  289.         unsigned long   userptr;
  290.     } m;
  291.     __u32            length;
  292.     __u32            reserved[2];
  293. };
  294. /*  Flags for 'flags' field */
  295. #define V4L2_BUF_FLAG_MAPPED    0x0001  /* Buffer is mapped (flag) */
  296. #define V4L2_BUF_FLAG_QUEUED    0x0002    /* Buffer is queued for processing */
  297. #define V4L2_BUF_FLAG_DONE    0x0004    /* Buffer is ready */
  298. #define V4L2_BUF_FLAG_KEYFRAME    0x0008    /* Image is a keyframe (I-frame) */
  299. #define V4L2_BUF_FLAG_PFRAME    0x0010    /* Image is a P-frame */
  300. #define V4L2_BUF_FLAG_BFRAME    0x0020    /* Image is a B-frame */
  301. #define V4L2_BUF_FLAG_TIMECODE    0x0100    /* timecode field is valid */
  302. /*
  303.  *    O V E R L A Y   P R E V I E W
  304.  */
  305. struct v4l2_framebuffer
  306. {
  307.     __u32            capability;
  308.     __u32            flags;
  309. /* FIXME: in theory we should pass something like PCI device + memory
  310.  * region + offset instead of some physical address */
  311.     void*                   base;
  312.     struct v4l2_pix_format    fmt;
  313. };
  314. /*  Flags for the 'capability' field. Read only */
  315. #define V4L2_FBUF_CAP_EXTERNOVERLAY    0x0001
  316. #define V4L2_FBUF_CAP_CHROMAKEY        0x0002
  317. #define V4L2_FBUF_CAP_LIST_CLIPPING     0x0004
  318. #define V4L2_FBUF_CAP_BITMAP_CLIPPING    0x0008
  319. /*  Flags for the 'flags' field. */
  320. #define V4L2_FBUF_FLAG_PRIMARY        0x0001
  321. #define V4L2_FBUF_FLAG_OVERLAY        0x0002
  322. #define V4L2_FBUF_FLAG_CHROMAKEY    0x0004
  323. struct v4l2_clip
  324. {
  325.     struct v4l2_rect        c;
  326.     struct v4l2_clip    *next;
  327. };
  328. struct v4l2_window
  329. {
  330.     struct v4l2_rect        w;
  331.     enum v4l2_field      field;
  332.     __u32            chromakey;
  333.     struct v4l2_clip    *clips;
  334.     __u32            clipcount;
  335.     void            *bitmap;
  336. };
  337. /*
  338.  *    C A P T U R E   P A R A M E T E R S
  339.  */
  340. struct v4l2_captureparm
  341. {
  342.     __u32           capability;      /*  Supported modes */
  343.     __u32           capturemode;      /*  Current mode */
  344.     struct v4l2_fract  timeperframe;  /*  Time per frame in .1us units */
  345.     __u32           extendedmode;  /*  Driver-specific extensions */
  346.     __u32              readbuffers;   /*  # of buffers for read */
  347.     __u32           reserved[4];
  348. };
  349. /*  Flags for 'capability' and 'capturemode' fields */
  350. #define V4L2_MODE_HIGHQUALITY    0x0001    /*  High quality imaging mode */
  351. #define V4L2_CAP_TIMEPERFRAME    0x1000    /*  timeperframe field is supported */
  352. struct v4l2_outputparm
  353. {
  354.     __u32           capability;     /*  Supported modes */
  355.     __u32           outputmode;     /*  Current mode */
  356.     struct v4l2_fract  timeperframe; /*  Time per frame in seconds */
  357.     __u32           extendedmode; /*  Driver-specific extensions */
  358.     __u32              writebuffers; /*  # of buffers for write */
  359.     __u32           reserved[4];
  360. };
  361. /*
  362.  *    I N P U T   I M A G E   C R O P P I N G
  363.  */
  364. struct v4l2_cropcap {
  365.     enum v4l2_buf_type      type;    
  366.         struct v4l2_rect        bounds;
  367.         struct v4l2_rect        defrect;
  368.         struct v4l2_fract       pixelaspect;
  369. };
  370. struct v4l2_crop {
  371.     enum v4l2_buf_type      type;
  372.     struct v4l2_rect        c;
  373. };
  374. /*
  375.  *      A N A L O G   V I D E O   S T A N D A R D
  376.  */
  377. typedef __u64 v4l2_std_id;
  378. /* one bit for each */
  379. #define V4L2_STD_PAL_B          ((v4l2_std_id)0x00000001)
  380. #define V4L2_STD_PAL_B1         ((v4l2_std_id)0x00000002)
  381. #define V4L2_STD_PAL_G          ((v4l2_std_id)0x00000004)
  382. #define V4L2_STD_PAL_H          ((v4l2_std_id)0x00000008)
  383. #define V4L2_STD_PAL_I          ((v4l2_std_id)0x00000010)
  384. #define V4L2_STD_PAL_D          ((v4l2_std_id)0x00000020)
  385. #define V4L2_STD_PAL_D1         ((v4l2_std_id)0x00000040)
  386. #define V4L2_STD_PAL_K          ((v4l2_std_id)0x00000080)
  387. #define V4L2_STD_PAL_M          ((v4l2_std_id)0x00000100)
  388. #define V4L2_STD_PAL_N          ((v4l2_std_id)0x00000200)
  389. #define V4L2_STD_PAL_Nc         ((v4l2_std_id)0x00000400)
  390. #define V4L2_STD_PAL_60         ((v4l2_std_id)0x00000800)
  391. #define V4L2_STD_NTSC_M         ((v4l2_std_id)0x00001000)
  392. #define V4L2_STD_NTSC_M_JP      ((v4l2_std_id)0x00002000)
  393. #define V4L2_STD_SECAM_B        ((v4l2_std_id)0x00010000)
  394. #define V4L2_STD_SECAM_D        ((v4l2_std_id)0x00020000)
  395. #define V4L2_STD_SECAM_G        ((v4l2_std_id)0x00040000)
  396. #define V4L2_STD_SECAM_H        ((v4l2_std_id)0x00080000)
  397. #define V4L2_STD_SECAM_K        ((v4l2_std_id)0x00100000)
  398. #define V4L2_STD_SECAM_K1       ((v4l2_std_id)0x00200000)
  399. #define V4L2_STD_SECAM_L        ((v4l2_std_id)0x00400000)
  400. /* ATSC/HDTV */
  401. #define V4L2_STD_ATSC_8_VSB     ((v4l2_std_id)0x01000000)
  402. #define V4L2_STD_ATSC_16_VSB    ((v4l2_std_id)0x02000000)
  403. /* some common needed stuff */
  404. #define V4L2_STD_PAL_BG        (V4L2_STD_PAL_B        |
  405.                  V4L2_STD_PAL_B1    |
  406.                  V4L2_STD_PAL_G)
  407. #define V4L2_STD_PAL_DK        (V4L2_STD_PAL_D        |
  408.                  V4L2_STD_PAL_D1    |
  409.                  V4L2_STD_PAL_K)
  410. #define V4L2_STD_PAL        (V4L2_STD_PAL_BG    |
  411.                  V4L2_STD_PAL_DK    |
  412.                  V4L2_STD_PAL_H        |
  413.                  V4L2_STD_PAL_I)
  414. #define V4L2_STD_NTSC           (V4L2_STD_NTSC_M    |
  415.                  V4L2_STD_NTSC_M_JP)
  416. #define V4L2_STD_SECAM        (V4L2_STD_SECAM_B    |
  417.                  V4L2_STD_SECAM_D    |
  418.                  V4L2_STD_SECAM_G    |
  419.                  V4L2_STD_SECAM_H    |
  420.                  V4L2_STD_SECAM_K    |
  421.                  V4L2_STD_SECAM_K1    |
  422.                  V4L2_STD_SECAM_L)
  423. #define V4L2_STD_525_60        (V4L2_STD_PAL_M        |
  424.                  V4L2_STD_PAL_60    |
  425.                  V4L2_STD_NTSC)
  426. #define V4L2_STD_625_50        (V4L2_STD_PAL        |
  427.                  V4L2_STD_PAL_N        |
  428.                  V4L2_STD_PAL_Nc    |
  429.                  V4L2_STD_SECAM)
  430. #define V4L2_STD_UNKNOWN        0
  431. #define V4L2_STD_ALL            (V4L2_STD_525_60    |
  432.                  V4L2_STD_625_50)
  433. struct v4l2_standard
  434. {
  435.     __u32                    index;
  436.     v4l2_std_id          id;
  437.     __u8             name[24];
  438.     struct v4l2_fract    frameperiod; /* Frames, not fields */
  439.     __u32             framelines;
  440.     __u32             reserved[4];
  441. };
  442. /*
  443.  *    V I D E O   I N P U T S
  444.  */
  445. struct v4l2_input
  446. {
  447.     __u32         index;        /*  Which input */
  448.     __u8         name[32];            /*  Label */
  449.     __u32         type;        /*  Type of input */
  450.     __u32         audioset;            /*  Associated audios (bitfield) */
  451.     __u32        tuner;             /*  Associated tuner */
  452.     v4l2_std_id  std;
  453.     __u32         status;
  454.     __u32         reserved[4];
  455. };
  456. /*  Values for the 'type' field */
  457. #define V4L2_INPUT_TYPE_TUNER        1
  458. #define V4L2_INPUT_TYPE_CAMERA        2
  459. /* field 'status' - general */
  460. #define V4L2_IN_ST_NO_POWER    0x00000001  /* Attached device is off */
  461. #define V4L2_IN_ST_NO_SIGNAL   0x00000002
  462. #define V4L2_IN_ST_NO_COLOR    0x00000004
  463. /* field 'status' - analog */
  464. #define V4L2_IN_ST_NO_H_LOCK   0x00000100  /* No horizontal sync lock */
  465. #define V4L2_IN_ST_COLOR_KILL  0x00000200  /* Color killer is active */
  466. /* field 'status' - digital */
  467. #define V4L2_IN_ST_NO_SYNC     0x00010000  /* No synchronization lock */
  468. #define V4L2_IN_ST_NO_EQU      0x00020000  /* No equalizer lock */
  469. #define V4L2_IN_ST_NO_CARRIER  0x00040000  /* Carrier recovery failed */
  470. /* field 'status' - VCR and set-top box */
  471. #define V4L2_IN_ST_MACROVISION 0x01000000  /* Macrovision detected */
  472. #define V4L2_IN_ST_NO_ACCESS   0x02000000  /* Conditional access denied */
  473. #define V4L2_IN_ST_VTR         0x04000000  /* VTR time constant */
  474. /*
  475.  *    V I D E O   O U T P U T S
  476.  */
  477. struct v4l2_output
  478. {
  479.     __u32         index;        /*  Which output */
  480.     __u8         name[32];            /*  Label */
  481.     __u32         type;        /*  Type of output */
  482.     __u32         audioset;            /*  Associated audios (bitfield) */
  483.     __u32         modulator;         /*  Associated modulator */
  484.     v4l2_std_id  std;
  485.     __u32         reserved[4];
  486. };
  487. /*  Values for the 'type' field */
  488. #define V4L2_OUTPUT_TYPE_MODULATOR        1
  489. #define V4L2_OUTPUT_TYPE_ANALOG            2
  490. #define V4L2_OUTPUT_TYPE_ANALOGVGAOVERLAY    3
  491. /*
  492.  *    C O N T R O L S
  493.  */
  494. struct v4l2_control
  495. {
  496.     __u32             id;
  497.     __s32             value;
  498. };
  499. /*  Used in the VIDIOC_QUERYCTRL ioctl for querying controls */
  500. struct v4l2_queryctrl
  501. {
  502.     __u32                 id;
  503.     enum v4l2_ctrl_type  type;
  504.     __u8             name[32];    /* Whatever */
  505.     __s32             minimum;    /* Note signedness */
  506.     __s32             maximum;
  507.     __s32                 step;
  508.     __s32             default_value;
  509.     __u32                flags;
  510.     __u32             reserved[2];
  511. };
  512. /*  Used in the VIDIOC_QUERYMENU ioctl for querying menu items */
  513. struct v4l2_querymenu
  514. {
  515.     __u32        id;
  516.     __u32        index;
  517.     __u8        name[32];    /* Whatever */
  518.     __u32        reserved;
  519. };
  520. /*  Control flags  */
  521. #define V4L2_CTRL_FLAG_DISABLED        0x0001
  522. #define V4L2_CTRL_FLAG_GRABBED        0x0002
  523. /*  Control IDs defined by V4L2 */
  524. #define V4L2_CID_BASE            0x00980900
  525. /*  IDs reserved for driver specific controls */
  526. #define V4L2_CID_PRIVATE_BASE        0x08000000
  527. #define V4L2_CID_BRIGHTNESS        (V4L2_CID_BASE+0)
  528. #define V4L2_CID_CONTRAST        (V4L2_CID_BASE+1)
  529. #define V4L2_CID_SATURATION        (V4L2_CID_BASE+2)
  530. #define V4L2_CID_HUE            (V4L2_CID_BASE+3)
  531. #define V4L2_CID_AUDIO_VOLUME        (V4L2_CID_BASE+5)
  532. #define V4L2_CID_AUDIO_BALANCE        (V4L2_CID_BASE+6)
  533. #define V4L2_CID_AUDIO_BASS        (V4L2_CID_BASE+7)
  534. #define V4L2_CID_AUDIO_TREBLE        (V4L2_CID_BASE+8)
  535. #define V4L2_CID_AUDIO_MUTE        (V4L2_CID_BASE+9)
  536. #define V4L2_CID_AUDIO_LOUDNESS        (V4L2_CID_BASE+10)
  537. #define V4L2_CID_BLACK_LEVEL        (V4L2_CID_BASE+11)
  538. #define V4L2_CID_AUTO_WHITE_BALANCE    (V4L2_CID_BASE+12)
  539. #define V4L2_CID_DO_WHITE_BALANCE    (V4L2_CID_BASE+13)
  540. #define V4L2_CID_RED_BALANCE        (V4L2_CID_BASE+14)
  541. #define V4L2_CID_BLUE_BALANCE        (V4L2_CID_BASE+15)
  542. #define V4L2_CID_GAMMA            (V4L2_CID_BASE+16)
  543. #define V4L2_CID_WHITENESS        (V4L2_CID_GAMMA) /* ? Not sure */
  544. #define V4L2_CID_EXPOSURE        (V4L2_CID_BASE+17)
  545. #define V4L2_CID_AUTOGAIN        (V4L2_CID_BASE+18)
  546. #define V4L2_CID_GAIN            (V4L2_CID_BASE+19)
  547. #define V4L2_CID_HFLIP            (V4L2_CID_BASE+20)
  548. #define V4L2_CID_VFLIP            (V4L2_CID_BASE+21)
  549. #define V4L2_CID_HCENTER        (V4L2_CID_BASE+22)
  550. #define V4L2_CID_VCENTER        (V4L2_CID_BASE+23)
  551. #define V4L2_CID_LASTP1            (V4L2_CID_BASE+24) /* last CID + 1 */
  552. /*
  553.  *    T U N I N G
  554.  */
  555. struct v4l2_tuner
  556. {
  557.     __u32                   index;
  558.     __u8            name[32];
  559.     enum v4l2_tuner_type    type;
  560.     __u32            capability;
  561.     __u32            rangelow;
  562.     __u32            rangehigh;
  563.     __u32            rxsubchans;
  564.     __u32            audmode;
  565.     __s32            signal;
  566.     __s32            afc;
  567.     __u32            reserved[4];
  568. };
  569. struct v4l2_modulator
  570. {
  571.     __u32            index;
  572.     __u8            name[32];
  573.     __u32            capability;
  574.     __u32            rangelow;
  575.     __u32            rangehigh;
  576.     __u32            txsubchans;
  577.     __u32            reserved[4];
  578. };
  579. /*  Flags for the 'capability' field */
  580. #define V4L2_TUNER_CAP_LOW        0x0001
  581. #define V4L2_TUNER_CAP_NORM        0x0002
  582. #define V4L2_TUNER_CAP_STEREO        0x0010
  583. #define V4L2_TUNER_CAP_LANG2        0x0020
  584. #define V4L2_TUNER_CAP_SAP        0x0020
  585. #define V4L2_TUNER_CAP_LANG1        0x0040
  586. /*  Flags for the 'rxsubchans' field */
  587. #define V4L2_TUNER_SUB_MONO        0x0001
  588. #define V4L2_TUNER_SUB_STEREO        0x0002
  589. #define V4L2_TUNER_SUB_LANG2        0x0004
  590. #define V4L2_TUNER_SUB_SAP        0x0004
  591. #define V4L2_TUNER_SUB_LANG1        0x0008
  592. /*  Values for the 'audmode' field */
  593. #define V4L2_TUNER_MODE_MONO        0x0000
  594. #define V4L2_TUNER_MODE_STEREO        0x0001
  595. #define V4L2_TUNER_MODE_LANG2        0x0002
  596. #define V4L2_TUNER_MODE_SAP        0x0002
  597. #define V4L2_TUNER_MODE_LANG1        0x0003
  598. struct v4l2_frequency
  599. {
  600.     __u32                  tuner;
  601.     enum v4l2_tuner_type  type;
  602.         __u32                  frequency;
  603.     __u32                  reserved[8];
  604. };
  605. /*
  606.  *    A U D I O
  607.  */
  608. struct v4l2_audio
  609. {
  610.     __u32    index;
  611.     __u8    name[32];
  612.     __u32    capability;
  613.     __u32    mode;
  614.     __u32    reserved[2];
  615. };
  616. /*  Flags for the 'capability' field */
  617. #define V4L2_AUDCAP_STEREO        0x00001
  618. #define V4L2_AUDCAP_AVL            0x00002
  619. /*  Flags for the 'mode' field */
  620. #define V4L2_AUDMODE_AVL        0x00001
  621. struct v4l2_audioout
  622. {
  623.     __u32    index;
  624.     __u8    name[32];
  625.     __u32    capability;
  626.     __u32    mode;
  627.     __u32    reserved[2];
  628. };
  629. /*
  630.  *    D A T A   S E R V I C E S   ( V B I )
  631.  *
  632.  *    Data services API by Michael Schimek
  633.  */
  634. struct v4l2_vbi_format
  635. {
  636.     __u32    sampling_rate;        /* in 1 Hz */
  637.     __u32    offset;
  638.     __u32    samples_per_line;
  639.     __u32    sample_format;        /* V4L2_PIX_FMT_* */
  640.     __s32    start[2];
  641.     __u32    count[2];
  642.     __u32    flags;            /* V4L2_VBI_* */
  643.     __u32    reserved[2];        /* must be zero */
  644. };
  645. /*  VBI flags  */
  646. #define V4L2_VBI_UNSYNC        (1<< 0)
  647. #define V4L2_VBI_INTERLACED    (1<< 1)
  648. /*
  649.  *    A G G R E G A T E   S T R U C T U R E S
  650.  */
  651. /*    Stream data format
  652.  */
  653. struct v4l2_format
  654. {
  655.     enum v4l2_buf_type type;
  656.     union
  657.     {
  658.         struct v4l2_pix_format    pix;  // V4L2_BUF_TYPE_VIDEO_CAPTURE
  659.         struct v4l2_window    win;  // V4L2_BUF_TYPE_VIDEO_OVERLAY
  660.         struct v4l2_vbi_format    vbi;  // V4L2_BUF_TYPE_VBI_CAPTURE
  661.         __u8    raw_data[200];        // user-defined
  662.     } fmt;
  663. };
  664. /*    Stream type-dependent parameters
  665.  */
  666. struct v4l2_streamparm
  667. {
  668.     enum v4l2_buf_type type;
  669.     union
  670.     {
  671.         struct v4l2_captureparm    capture;
  672.         struct v4l2_outputparm    output;
  673.         __u8    raw_data[200];  /* user-defined */
  674.     } parm;
  675. };
  676. /*
  677.  *    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
  678.  *
  679.  */
  680. #define VIDIOC_QUERYCAP        _IOR  ('V',  0, struct v4l2_capability)
  681. #define VIDIOC_RESERVED        _IO   ('V',  1)
  682. #define VIDIOC_ENUM_FMT         _IOWR ('V',  2, struct v4l2_fmtdesc)
  683. #define VIDIOC_G_FMT        _IOWR ('V',  4, struct v4l2_format)
  684. #define VIDIOC_S_FMT        _IOWR ('V',  5, struct v4l2_format)
  685. #if 0
  686. #define VIDIOC_G_COMP        _IOR  ('V',  6, struct v4l2_compression)
  687. #define VIDIOC_S_COMP        _IOW  ('V',  7, struct v4l2_compression)
  688. #endif
  689. #define VIDIOC_REQBUFS        _IOWR ('V',  8, struct v4l2_requestbuffers)
  690. #define VIDIOC_QUERYBUF        _IOWR ('V',  9, struct v4l2_buffer)
  691. #define VIDIOC_G_FBUF        _IOR  ('V', 10, struct v4l2_framebuffer)
  692. #define VIDIOC_S_FBUF        _IOW  ('V', 11, struct v4l2_framebuffer)
  693. #define VIDIOC_OVERLAY        _IOWR ('V', 14, int)
  694. #define VIDIOC_QBUF        _IOWR ('V', 15, struct v4l2_buffer)
  695. #define VIDIOC_DQBUF        _IOWR ('V', 17, struct v4l2_buffer)
  696. #define VIDIOC_STREAMON        _IOW  ('V', 18, int)
  697. #define VIDIOC_STREAMOFF    _IOW  ('V', 19, int)
  698. #define VIDIOC_G_PARM        _IOWR ('V', 21, struct v4l2_streamparm)
  699. #define VIDIOC_S_PARM        _IOW  ('V', 22, struct v4l2_streamparm)
  700. #define VIDIOC_G_STD        _IOR  ('V', 23, v4l2_std_id)
  701. #define VIDIOC_S_STD        _IOW  ('V', 24, v4l2_std_id)
  702. #define VIDIOC_ENUMSTD        _IOWR ('V', 25, struct v4l2_standard)
  703. #define VIDIOC_ENUMINPUT    _IOWR ('V', 26, struct v4l2_input)
  704. #define VIDIOC_G_CTRL        _IOWR ('V', 27, struct v4l2_control)
  705. #define VIDIOC_S_CTRL        _IOW  ('V', 28, struct v4l2_control)
  706. #define VIDIOC_G_TUNER        _IOWR ('V', 29, struct v4l2_tuner)
  707. #define VIDIOC_S_TUNER        _IOW  ('V', 30, struct v4l2_tuner)
  708. #define VIDIOC_G_AUDIO        _IOWR ('V', 33, struct v4l2_audio)
  709. #define VIDIOC_S_AUDIO        _IOW  ('V', 34, struct v4l2_audio)
  710. #define VIDIOC_QUERYCTRL    _IOWR ('V', 36, struct v4l2_queryctrl)
  711. #define VIDIOC_QUERYMENU    _IOWR ('V', 37, struct v4l2_querymenu)
  712. #define VIDIOC_G_INPUT        _IOR  ('V', 38, int)
  713. #define VIDIOC_S_INPUT        _IOWR ('V', 39, int)
  714. #define VIDIOC_G_OUTPUT        _IOR  ('V', 46, int)
  715. #define VIDIOC_S_OUTPUT        _IOWR ('V', 47, int)
  716. #define VIDIOC_ENUMOUTPUT    _IOWR ('V', 48, struct v4l2_output)
  717. #define VIDIOC_G_AUDOUT        _IOWR ('V', 49, struct v4l2_audioout)
  718. #define VIDIOC_S_AUDOUT        _IOW  ('V', 50, struct v4l2_audioout)
  719. #define VIDIOC_G_MODULATOR    _IOWR ('V', 54, struct v4l2_modulator)
  720. #define VIDIOC_S_MODULATOR    _IOW  ('V', 55, struct v4l2_modulator)
  721. #define VIDIOC_G_FREQUENCY    _IOWR ('V', 56, struct v4l2_frequency)
  722. #define VIDIOC_S_FREQUENCY    _IOW  ('V', 57, struct v4l2_frequency)
  723. #define VIDIOC_CROPCAP        _IOR  ('V', 58, struct v4l2_cropcap)
  724. #define VIDIOC_G_CROP        _IOWR ('V', 59, struct v4l2_crop)
  725. #define VIDIOC_S_CROP        _IOW  ('V', 60, struct v4l2_crop)
  726. #define VIDIOC_G_JPEGCOMP    _IOR  ('V', 61, struct v4l2_jpegcompression)
  727. #define VIDIOC_S_JPEGCOMP    _IOW  ('V', 62, struct v4l2_jpegcompression)
  728. #define VIDIOC_QUERYSTD          _IOR  ('V', 63, v4l2_std_id)
  729. #define VIDIOC_TRY_FMT          _IOWR ('V', 64, struct v4l2_format)
  730. #define BASE_VIDIOC_PRIVATE    192        /* 192-255 are private */
  731. #ifdef __KERNEL__
  732. /*
  733.  *
  734.  *    V 4 L 2   D R I V E R   H E L P E R   A P I
  735.  *
  736.  *    Some commonly needed functions for drivers (v4l2-common.o module)
  737.  */
  738. #include <linux/fs.h>
  739. /*  Video standard functions  */
  740. extern unsigned int v4l2_video_std_fps(struct v4l2_standard *vs);
  741. extern int v4l2_video_std_construct(struct v4l2_standard *vs,
  742.                     int id, char *name);
  743. /*  Compatibility layer interface  */
  744. typedef int (*v4l2_kioctl)(struct inode *inode, struct file *file,
  745.                unsigned int cmd, void *arg);
  746. int v4l_compat_translate_ioctl(struct inode *inode, struct file *file,
  747.                    int cmd, void *arg, v4l2_kioctl driver_ioctl);
  748. /* names for fancy debug output */
  749. extern char *v4l2_field_names[];
  750. extern char *v4l2_type_names[];
  751. extern char *v4l2_ioctl_names[];
  752. #endif /* __KERNEL__ */
  753. #endif /* __LINUX_VIDEODEV2_H */
  754. /*
  755.  * Local variables:
  756.  * c-basic-offset: 8
  757.  * End:
  758.  */