linux usb otg uvc,OTG与gadget学习(九)—— 了解UVC及分析webcam的应用层程序uvc-gadget.c...

经过这几天的搜素及琢磨,终于知道linux的webcam是什么了。要实现一个gadget camera,需要应用层程序、驱动程序,以及host侧对应的gadget camera驱动。这三个部分,可以参考现有的做修改实现自己的usb webcam。

先分析下uvc-gadget.c,了解下整个框架流程,特别是怎么去处理图像数据、什么时候传输等。

一个应用程序,跟使用它一样,如有使用介绍,先看介绍

static void usage(const char *argv0)

{

fprintf(stderr, "Usage: %s [options]\n", argv0);

fprintf(stderr, "Available options are\n");

fprintf(stderr, " -bUse bulk mode\n");

fprintf(stderr, " -d deviceVideo device\n");

fprintf(stderr, " -hPrint this help screen and exit\n");

fprintf(stderr, " -i imageMJPEG image\n");

}      -b 使用bulk模式,一开始我以为跟bulk端点有关。

-d gadget驱动在用户空间的节点,注意这里是device侧驱动的节点

-i  MJPEG图片,JPG图片?

主函数:

int main(int argc, char *argv[])

{

char *device = "/dev/video0";

struct uvc_device *dev;

int bulk_mode = 0;

char *mjpeg_image = NULL;

fd_set fds;

int ret, opt;

while ((opt = getopt(argc, argv, "bd:hi:")) != -1) {

switch (opt) {

case 'b':

bulk_mode = 1;

break;

case 'd':

device = optarg;

break;

case 'h':

usage(argv[0]);

return 0;

case 'i':

mjpeg_image = optarg;

break;

default:

fprintf(stderr, "Invalid option '-%c'\n", opt);

usage(argv[0]);

return 1;

}

}

printf("[uvc_gadget]: open %s\n", device);

dev = uvc_open(device);

if (dev == NULL)

return 1;

printf("[uvc_gadget]: load %s\n", mjpeg_image);

image_load(dev, mjpeg_image);

dev->bulk = bulk_mode;

uvc_events_init(dev);

uvc_video_init(dev);

FD_ZERO(&fds);

FD_SET(dev->fd, &fds);

while (1) {

fd_set efds = fds;

fd_set wfds = fds;

ret = select(dev->fd + 1, NULL, &wfds, &efds, NULL);

if (FD_ISSET(dev->fd, &efds))

uvc_events_process(dev);

if (FD_ISSET(dev->fd, &wfds))

uvc_video_process(dev);

}

uvc_close(dev);

return 0;

}      默认使用/dev/video0,-b则bulk_mode=1,

uvc事件初始化、uvc video初始化,

然后循环处理uvc事件、uvc video。

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
f_uvc.c bulk是一个在Linux内核中的驱动程序文件,主要用于支持UVCUSB Video Class)相机设备的批量传输模式。 UVC是一种USB设备类别,它定义了一种标准的视频和音频数据传输协议,使得各种不同品牌和型号的相机设备可以在不同的操作系统上无需额外驱动程序的支持下工作。bulk模式是其中一种数据传输模式,它在相机设备和主机之间通过USB传输大块的数据。 在f_uvc.c文件中,bulk模式的实现涉及到多个功能,包括数据读取和写入、缓冲区管理、传输控制等等。该驱动程序首先通过USB接口与相机设备建立通信,然后使用bulk传输模式读取和写入视频和音频数据。 在批量传输模式中,相机设备将视频和音频数据存储在缓冲区中,然后通过USB传输给主机。f_uvc.c文件中的驱动程序通过管理这些缓冲区,确保数据的有效读取和写入。 此外,该驱动程序还负责控制传输速率和帧率,保证数据的稳定传输。它还提供了相机设备的配置选项,例如分辨率、亮度、对比度等,以便用户可以根据需要进行自定义设置。 综上所述,f_uvc.c bulk是一个Linux内核驱动程序文件,用于支持UVC相机设备的批量数据传输模式。它负责数据读取和写入、缓冲区管理、传输控制等功能,确保稳定和有效的数据传输。它还提供了配置选项,使用户可以按需自定义设置相机设备。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值