Linux uvc網路攝影機驅動初探__Linux

來源:互聯網
上載者:User

本文基於AM6C平台Linux3.0.8核心。

1.drivers/media/video/uvc/Makefile

uvcvideo-objs  := uvc_driver.o uvc_queue.o uvc_v4l2.o uvc_video.o uvc_ctrl.o \          uvc_status.o uvc_isight.oobj-$(CONFIG_USB_VIDEO_CLASS) += uvcvideo.o

2.drivers/media/video/uvc/uvc_driver.c

module_init(uvc_init);static int __init uvc_init(void){  ......  result = usb_register(&uvc_driver.driver);  ......}struct uvc_driver uvc_driver = {    .driver = {        .name       = "uvcvideo",        .probe      = uvc_probe,                                                                                                                         .disconnect = uvc_disconnect,        .suspend    = uvc_suspend,        .resume     = uvc_resume,        .reset_resume   = uvc_reset_resume,        .id_table   = uvc_ids,        .supports_autosuspend = 1,    },};static int uvc_probe(struct usb_interface *intf,const struct usb_device_id *id){  ......  uvc_register_chains(dev);  ......}static int uvc_register_chains(struct uvc_device *dev){  ......  ret = uvc_register_terms(dev, chain);  ......}static int uvc_register_terms(struct uvc_device *dev,struct uvc_video_chain *chain){  ......  ret = uvc_register_video(dev, stream);  ......}static int uvc_register_video(struct uvc_device *dev,struct uvc_streaming *stream){  ......  vdev = video_device_alloc();  ......  vdev->v4l2_dev = &dev->vdev;  vdev->fops = &uvc_fops;  vdev->release = uvc_release;  ......  ret = video_register_device(vdev, VFL_TYPE_GRABBER, -1);  ......}

3.drivers/media/video/uvc/uvc_v4l2.c

const struct v4l2_file_operations uvc_fops = {    .owner      = THIS_MODULE,    .open       = uvc_v4l2_open,    .release    = uvc_v4l2_release,    .unlocked_ioctl = uvc_v4l2_ioctl,                                                                                                                .read       = uvc_v4l2_read,    .mmap       = uvc_v4l2_mmap,    .poll       = uvc_v4l2_poll,#ifndef CONFIG_MMU    .get_unmapped_area = uvc_v4l2_get_unmapped_area,#endif};static long uvc_v4l2_ioctl(struct file *file,unsigned int cmd, unsigned long arg){  ......  return video_usercopy(file, cmd, arg, uvc_v4l2_do_ioctl);}static long uvc_v4l2_do_ioctl(struct file *file, unsigned int cmd, void *arg){  ......  switch (cmd) {    case VIDIOC_QUERYCAP:......    case VIDIOC_QUERYCTRL:    case VIDIOC_G_CTRL:    case VIDIOC_S_CTRL:    case VIDIOC_QUERYMENU:    case VIDIOC_G_EXT_CTRLS:    case VIDIOC_S_EXT_CTRLS:    case VIDIOC_TRY_EXT_CTRLS:    case VIDIOC_ENUMINPUT:    case VIDIOC_G_INPUT:    case VIDIOC_S_INPUT:    case VIDIOC_ENUM_FMT:    case VIDIOC_TRY_FMT:    case VIDIOC_S_FMT:    case VIDIOC_G_FMT:    case VIDIOC_ENUM_FRAMESIZES:    case VIDIOC_ENUM_FRAMEINTERVALS:    case VIDIOC_G_PARM:    case VIDIOC_S_PARM:    case VIDIOC_CROPCAP:    case VIDIOC_G_CROP:    case VIDIOC_S_CROP:    case VIDIOC_REQBUFS:    case VIDIOC_QUERYBUF:    case VIDIOC_QBUF:    case VIDIOC_DQBUF:    case VIDIOC_STREAMON:    case VIDIOC_STREAMOFF:    case VIDIOC_ENUMSTD:    case VIDIOC_QUERYSTD:    case VIDIOC_G_STD:    case VIDIOC_S_STD:    case VIDIOC_OVERLAY:     case VIDIOC_ENUMAUDIO:    case VIDIOC_ENUMAUDOUT:    case VIDIOC_ENUMOUTPUT:    case __UVCIOC_CTRL_ADD:    case __UVCIOC_CTRL_MAP_OLD:    case __UVCIOC_CTRL_MAP:    case UVCIOC_CTRL_MAP:    case __UVCIOC_CTRL_GET:    case __UVCIOC_CTRL_SET:    case UVCIOC_CTRL_QUERY:    ......     }  ......}






相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.