{"rsdb":{"rid":"235727","subhead":"","postdate":"0","aid":"162844","fid":"105","uid":"1","topic":"1","content":"
\n
\n  \n <\/div> \n
\n

\u5728\u5e94\u7528\u7a0b\u5e8f\u83b7\u53d6\u89c6\u9891\u6570\u636e\u7684\u6d41\u7a0b\u4e2d\uff0c\u90fd\u662f\u901a\u8fc7 ioctl \u547d\u4ee4\u4e0e\u9a71\u52a8\u7a0b\u5e8f\u8fdb\u884c\u4ea4\u4e92\uff0c\u5e38\u89c1\u7684 ioctl \u547d\u4ee4\u6709\uff1a<\/p> \n

\n
\n
 1<\/span> VIDIOC_QUERYCAP     \/*<\/span> \u83b7\u53d6\u8bbe\u5907\u652f\u6301\u7684\u64cd\u4f5c <\/span>*\/<\/span>\r\n 2<\/span> VIDIOC_G_FMT        \/*<\/span> \u83b7\u53d6\u8bbe\u7f6e\u652f\u6301\u7684\u89c6\u9891\u683c\u5f0f <\/span>*\/<\/span>\r\n 3<\/span> VIDIOC_S_FMT        \/*<\/span> \u8bbe\u7f6e\u6355\u83b7\u89c6\u9891\u7684\u683c\u5f0f <\/span>*\/<\/span>\r\n 4<\/span> VIDIOC_REQBUFS      \/*<\/span> \u5411\u9a71\u52a8\u63d0\u51fa\u7533\u8bf7\u5185\u5b58\u7684\u8bf7\u6c42 <\/span>*\/<\/span>\r\n 5<\/span> VIDIOC_QUERYBUF     \/*<\/span> \u5411\u9a71\u52a8\u67e5\u8be2\u7533\u8bf7\u5230\u7684\u5185\u5b58 <\/span>*\/<\/span>\r\n 6<\/span> VIDIOC_QBUF         \/*<\/span> \u5c06\u7a7a\u95f2\u7684\u5185\u5b58\u52a0\u5165\u53ef\u6355\u83b7\u89c6\u9891\u7684\u961f\u5217 <\/span>*\/<\/span>\r\n 7<\/span> VIDIOC_DQBUF        \/*<\/span> \u5c06\u5df2\u7ecf\u6355\u83b7\u597d\u89c6\u9891\u7684\u5185\u5b58\u62c9\u51fa\u5df2\u6355\u83b7\u89c6\u9891\u7684\u961f\u5217 <\/span>*\/<\/span>\r\n 8<\/span> VIDIOC_STREAMON     \/*<\/span> \u6253\u5f00\u89c6\u9891\u6d41 <\/span>*\/<\/span>\r\n 9<\/span> VIDIOC_STREAMOFF    \/*<\/span> \u5173\u95ed\u89c6\u9891\u6d41 <\/span>*\/<\/span>\r\n10<\/span> VIDIOC_QUERYCTRL    \/*<\/span> \u67e5\u8be2\u9a71\u52a8\u662f\u5426\u652f\u6301\u8be5\u547d\u4ee4 <\/span>*\/<\/span>\r\n11<\/span> VIDIOC_G_CTRL       \/*<\/span> \u83b7\u53d6\u5f53\u524d\u547d\u4ee4\u503c <\/span>*\/<\/span>\r\n12<\/span> VIDIOC_S_CTRL       \/*<\/span> \u8bbe\u7f6e\u65b0\u7684\u547d\u4ee4\u503c <\/span>*\/<\/span>\r\n13<\/span> VIDIOC_G_TUNER      \/*<\/span> \u83b7\u53d6\u8c03\u8c10\u5668\u4fe1\u606f <\/span>*\/<\/span>\r\n14<\/span> VIDIOC_S_TUNER      \/*<\/span> \u8bbe\u7f6e\u8c03\u8c10\u5668\u4fe1\u606f <\/span>*\/<\/span>\r\n15<\/span> VIDIOC_G_FREQUENCY  \/*<\/span> \u83b7\u53d6\u8c03\u8c10\u5668\u9891\u7387 <\/span>*\/<\/span>\r\n16<\/span> VIDIOC_S_FREQUENCY  \/*<\/span> \u8bbe\u7f6e\u8c03\u8c10\u5668\u9891\u7387 <\/span>*\/<\/span><\/pre> \n   <\/div> \n   

 <\/p> \n

 <\/p> \n

1\u3001struct v4l2_capability \u4e0e VIDIOC_QUERYCAP<\/strong><\/h3> \n

VIDIOC_QUERYCAP \u547d\u4ee4\u901a\u8fc7\u7ed3\u6784 v4l2_capability \u83b7\u53d6\u8bbe\u5907\u652f\u6301\u7684\u64cd\u4f5c\u6a21\u5f0f\uff1a<\/p> \n

\n
1<\/span> struct<\/span> v4l2_capability {\r\n<\/span>2<\/span>     __u8    driver[16<\/span>];     \/*<\/span> i.e. "bttv" <\/span>*\/<\/span>\r\n3<\/span>     __u8    card[32<\/span>];       \/*<\/span> i.e. "Hauppauge WinTV" <\/span>*\/<\/span>\r\n4<\/span>     __u8    bus_info[32<\/span>];   \/*<\/span> "PCI:" + pci_name(pci_dev) <\/span>*\/<\/span>\r\n5<\/span>     __u32   version;        \/*<\/span> should use KERNEL_VERSION() <\/span>*\/<\/span>\r\n6<\/span>     __u32    capabilities;   \/*<\/span> Device capabilities <\/span>*\/<\/span>\r\n7<\/span>     __u32    reserved[4<\/span>];\r\n<\/span>8<\/span> };<\/pre> \n   <\/div> \n   

\u5176\u4e2d\u57df capabilities \u4ee3\u8868\u8bbe\u5907\u652f\u6301\u7684\u64cd\u4f5c\u6a21\u5f0f\uff0c\u5e38\u89c1\u7684\u503c\u6709 V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING \u8868\u793a\u662f\u4e00\u4e2a\u89c6\u9891\u6355\u6349\u8bbe\u5907\u5e76\u4e14\u5177\u6709\u6570\u636e\u6d41\u63a7\u5236\u6a21\u5f0f\uff1b\u53e6\u5916 driver \u57df\u9700\u8981\u548c struct video_device \u4e2d\u7684 name \u5339\u914d\u3002<\/p> \n

 <\/p> \n

2\u3001struct v4l2_format \u4e0e VIDIOC_G_FMT\u3001VIDIOC_S_FMT\u3001VIDIOC_TRY_FMT<\/strong><\/h3> \n

\u901a\u5e38\u7528 VIDIOC_S_FMT \u547d\u4ee4\u901a\u8fc7\u7ed3\u6784 v4l2_format \u521d\u59cb\u5316\u6355\u83b7\u89c6\u9891\u7684\u683c\u5f0f\uff0c\u5982\u679c\u8981\u6539\u53d8\u683c\u5f0f\u5219\u7528 VIDIOC_TRY_FMT \u547d\u4ee4\uff1a<\/p> \n

\n
 1<\/span> struct<\/span> v4l2_format {\r\n<\/span> 2<\/span>     enum<\/span> v4l2_buf_type type;\r\n<\/span> 3<\/span>     union {\r\n<\/span> 4<\/span>         struct<\/span> v4l2_pix_format         pix;     \/*<\/span> V4L2_BUF_TYPE_VIDEO_CAPTURE <\/span>*\/<\/span>\r\n 5<\/span>         struct<\/span> v4l2_window             win;     \/*<\/span> V4L2_BUF_TYPE_VIDEO_OVERLAY <\/span>*\/<\/span>\r\n 6<\/span>         struct<\/span> v4l2_vbi_format         vbi;     \/*<\/span> V4L2_BUF_TYPE_VBI_CAPTURE <\/span>*\/<\/span>\r\n 7<\/span>         struct<\/span> v4l2_sliced_vbi_format  sliced;  \/*<\/span> V4L2_BUF_TYPE_SLICED_VBI_CAPTURE <\/span>*\/<\/span>\r\n 8<\/span>         __u8   raw_data[200<\/span>];                   \/*<\/span> user-defined <\/span>*\/<\/span>\r\n 9<\/span>     } fmt;\r\n<\/span>10<\/span> };\r\n<\/span>11<\/span> \u5176\u4e2d\r\n<\/span>12<\/span> enum<\/span> v4l2_buf_type {\r\n<\/span>13<\/span>     V4L2_BUF_TYPE_VIDEO_CAPTURE        = 1<\/span>,\r\n<\/span>14<\/span>     V4L2_BUF_TYPE_VIDEO_OUTPUT         = 2<\/span>,\r\n<\/span>15<\/span>     V4L2_BUF_TYPE_VIDEO_OVERLAY        = 3<\/span>,\r\n<\/span>16<\/span>     ...\r\n<\/span>17<\/span>     V4L2_BUF_TYPE_PRIVATE              = 0x80<\/span>,\r\n<\/span>18<\/span> };\r\n<\/span>19<\/span> \r\n20<\/span> struct<\/span> v4l2_pix_format {\r\n<\/span>21<\/span>     __u32                   width;\r\n<\/span>22<\/span>     __u32                   height;\r\n<\/span>23<\/span>     __u32                   pixelformat;\r\n<\/span>24<\/span>     enum<\/span> v4l2_field         field;\r\n<\/span>25<\/span>     __u32                   bytesperline;   \/*<\/span> for padding, zero if unused <\/span>*\/<\/span>\r\n26<\/span>     __u32                   sizeimage;\r\n<\/span>27<\/span>     enum<\/span> v4l2_colorspace    colorspace;\r\n<\/span>28<\/span>     __u32                   priv;           \/*<\/span> private data, depends on pixelformat <\/span>*\/<\/span>\r\n29<\/span> };<\/pre> \n   <\/div> \n   

 <\/p> \n

\n  \u5e38\u89c1\u7684\u6355\u83b7\u6a21\u5f0f\u4e3a V4L2_BUF_TYPE_VIDEO_CAPTURE \u5373\u89c6\u9891\u6355\u6349\u6a21\u5f0f\uff0c\u5728\u6b64\u6a21\u5f0f\u4e0b fmt \u8054\u5408\u4f53\u91c7\u7528\u57df v4l2_pix_format\uff1a\u5176\u4e2d width \u4e3a\u89c6\u9891\u7684\u5bbd\u3001height \u4e3a\u89c6\u9891\u7684\u9ad8\u3001pixelformat \u4e3a\u89c6\u9891\u6570\u636e\u683c\u5f0f\uff08\u5e38\u89c1\u7684\u503c\u6709 V4L2_PIX_FMT_YUV422P | V4L2_PIX_FMT_RGB565\uff09\u3001bytesperline \u4e3a\u4e00\u884c\u56fe\u50cf\u5360\u7528\u7684\u5b57\u8282\u6570\u3001sizeimage \u5219\u4e3a\u56fe\u50cf\u5360\u7528\u7684\u603b\u5b57\u8282\u6570\u3001colorspace \u6307\u5b9a\u8bbe\u5907\u7684\u989c\u8272\u7a7a\u95f4\u3002\n <\/div> \n

 <\/p> \n <\/div> \n <\/div> \n

\n <\/p> \n

3\u3001struct v4l2_requestbuffers \u4e0e VIDIOC_REQBUFS<\/strong><\/strong><\/h3> \n

VIDIOC_REQBUFS \u547d\u4ee4\u901a\u8fc7\u7ed3\u6784 v4l2_requestbuffers \u8bf7\u6c42\u9a71\u52a8\u7533\u8bf7\u4e00\u7247\u8fde\u7eed\u7684\u5185\u5b58\u7528\u4e8e\u7f13\u5b58\u89c6\u9891\u4fe1\u606f\uff1a<\/p> \n

\n
 1<\/span> struct<\/span> v4l2_requestbuffers {\r\n<\/span> 2<\/span>     __u32                   count;\r\n<\/span> 3<\/span>     enum<\/span> v4l2_buf_type      type;\r\n<\/span> 4<\/span>     enum<\/span> v4l2_memory        memory;\r\n<\/span> 5<\/span>     __u32                   reserved[2<\/span>];\r\n<\/span> 6<\/span> };\r\n<\/span> 7<\/span> \u5176\u4e2d\r\n<\/span> 8<\/span> enum<\/span> v4l2_memory {\r\n<\/span> 9<\/span>     V4L2_MEMORY_MMAP             = 1<\/span>,\r\n<\/span>10<\/span>     V4L2_MEMORY_USERPTR          = 2<\/span>,\r\n<\/span>11<\/span>     V4L2_MEMORY_OVERLAY          = 3<\/span>,\r\n<\/span>12<\/span> };<\/pre> \n <\/div> \n 

count \u6307\u5b9a\u6839\u636e\u56fe\u50cf\u5360\u7528\u7a7a\u95f4\u5927\u5c0f\u7533\u8bf7\u7684\u7f13\u5b58\u533a\u4e2a\u6570\uff0ctype \u4e3a\u89c6\u9891\u6355\u83b7\u6a21\u5f0f\uff0cmemory \u4e3a\u5185\u5b58\u533a\u7684\u4f7f\u7528\u65b9\u5f0f\u3002<\/p> \n

\n  \n <\/div> \n

4\u3001struct v4l2_buffer<\/strong>\u4e0e VIDIOC_QUERYBUF<\/strong><\/strong><\/h3> \n

VIDIOC_QUERYBUF \u547d\u4ee4\u901a\u8fc7\u7ed3\u6784 v4l2_buffer \u67e5\u8be2\u9a71\u52a8\u7533\u8bf7\u7684\u5185\u5b58\u533a\u4fe1\u606f\uff1a<\/p> \n

\n
 1<\/span> struct<\/span> v4l2_buffer {\r\n<\/span> 2<\/span>     __u32                   index;\r\n<\/span> 3<\/span>     enum<\/span> v4l2_buf_type      type;\r\n<\/span> 4<\/span>     __u32                   bytesused;\r\n<\/span> 5<\/span>     __u32                   flags;\r\n<\/span> 6<\/span>     enum<\/span> v4l2_field         field;\r\n<\/span> 7<\/span>     struct<\/span> time","orderid":"0","title":"V4l2\u7684\u7ed3\u6784\u4f53 --- ioctl\u3010\u8f6c\u3011(\u4e00)","smalltitle":"","mid":"0","fname":"\u5176\u5b83","special_id":"0","bak_id":"0","info":"0","hits":"9392","pages":"4","comments":"0","posttime":"2017-10-13 10:36:00","list":"1507862160","username":"admin","author":"","copyfrom":"","copyfromurl":"","titlecolor":"","fonttype":"0","titleicon":"0","picurl":"https:\/\/www.cppentry.com\/upload_files\/","ispic":"0","yz":"1","yzer":"","yztime":"0","levels":"0","levelstime":"0","keywords":"V4l2<\/A> \u7ed3\u6784<\/A> ---<\/A> ioctl<\/A>","jumpurl":"","iframeurl":"","style":"","template":"a:3:{s:4:\"head\";s:0:\"\";s:4:\"foot\";s:0:\"\";s:8:\"bencandy\";s:0:\"\";}","target":"0","ip":"113.108.110.181","lastfid":"0","money":"0","buyuser":"","passwd":"","allowdown":"","allowview":"","editer":"","edittime":"0","begintime":"0","endtime":"0","description":"V4l2\u7684\u7ed3\u6784\u4f53 --- ioctl\u3010\u8f6c\u3011","lastview":"1706814211","digg_num":"6805","digg_time":"0","forbidcomment":"0","ifvote":"0","heart":"","htmlname":"","city_id":"0"},"page":"1"}