vsflinux的第一个公开的应用 -- 使用libuvc控制USB摄像头

[复制链接]
 楼主| vsfopen 发表于 2018-8-27 16:39 | 显示全部楼层 |阅读模式
libuvc.jpg
libuvc是基于libusb的USB摄像头驱动库,vsflinux之前就做好了libusb的移植,所以基本上直接可以编译运行libuvc。

当然,实际上libuvc的代码需要做如下修改:
1. USB事件的轮询方式
  1. void *_uvc_handle_events(void *arg) {
  2.   uvc_context_t *ctx = (uvc_context_t *) arg;

  3.   while (!ctx->kill_handler_thread)
  4. +  {
  5.     libusb_handle_events_completed(ctx->usb_ctx, &ctx->kill_handler_thread);
  6. +    usleep(1000);
  7. +  }
  8.   return NULL;
  9. }
在libuvc的轮询usb事件代码里,不使用死循环的方式轮询,增加了1ms延迟。当然最好的方式还是用poll的方式来等待事件,有事件的时候才需要轮询。

2. USB设备检测的时候,如果返回0表示没检测到USB设备,这里要返回
  1.   num_usb_devices = libusb_get_device_list(ctx->usb_ctx, &usb_dev_list);

  2. -  if (num_usb_devices < 0) {
  3. +  if (num_usb_devices <= 0) {
  4.     UVC_EXIT(UVC_ERROR_IO);
  5.     return UVC_ERROR_IO;
  6.   }
不过,我发现不少使用libusb的代码,如果返回0都会继续。不过毕竟MCU不同,不会有这么多USB设备一直接着。
 楼主| vsfopen 发表于 2019-12-13 00:58 | 显示全部楼层
VC环境里,需要额外修改的内容:
stream.c里,去掉检测到VC编译器后,引入的gettimeofday代码,因为linux子系统已经实现了这个函数,所以即使用VC,也不需要libuvc自己实现。
zisi311 发表于 2020-2-22 19:57 | 显示全部楼层
天冷了,大家都注意啊!

90

主题

325

帖子

8

粉丝

90

主题

325

帖子

8

粉丝
快速回复 在线客服 返回列表 返回顶部