打印

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

[复制链接]
4029|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
vsfopen|  楼主 | 2018-8-27 16:39 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

libuvc是基于libusb的USB摄像头驱动库,vsflinux之前就做好了libusb的移植,所以基本上直接可以编译运行libuvc。

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

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

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

-  if (num_usb_devices < 0) {
+  if (num_usb_devices <= 0) {
    UVC_EXIT(UVC_ERROR_IO);
    return UVC_ERROR_IO;
  }
不过,我发现不少使用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

粉丝