libuvc是基于libusb的USB UVC(USB Video Class)驱动,VSF系统具备完善的fd事件机制(libuvc需要),也支持相对完整的libusb库。所以移植libuvc相对而言,应该会比较简单。
VSF以及linux子系统,参考:https://whycan.com/t_8363.html
按照移植步骤的话,第一步是在linux下编译libuvc,使用自动生成的libuvc_config.h:
<code>
#ifndef LIBUVC_CONFIG_H
#define LIBUVC_CONFIG_H
#define LIBUVC_VERSION_MAJOR 0
#define LIBUVC_VERSION_MINOR 0
#define LIBUVC_VERSION_PATCH 6
#define LIBUVC_VERSION_STR "0.0.6"
#define LIBUVC_VERSION_INT \
((0 << 16) | \
(0 << 8) | \
(6))
/** @brief Test whether libuvc is new enough
* This macro evaluates true if and only if the current version is
* at least as new as the version specified.
*/
#define LIBUVC_VERSION_GTE(major, minor, patch) \
(LIBUVC_VERSION_INT >= (((major) << 16) | ((minor) << 8) | (patch)))
/* #undef LIBUVC_HAS_JPEG */
#endif // !def(LIBUVC_CONFIG_H)
</code>
第二部,建立visual studio测试工程,从vsf.linux/project/vc拷贝一份到vc_libuvc。
在工程里,加入libuvc的源码:
加入包含路径:
其中,libuvc\raw是libuvc目录。libuvc\port是libuvc的移植目录,里面存放linux下编译libuvc时自动生成的libuvc_config.h(按照linux下编译libuvc生成的目录结构)。
宏配置,使能APP_USE_LIBUVC_DEMO:
libuvc的main入口修改:
linux fhs里,安装libuvc demo(在vsf_main.c中的vsf_linux_create_fhs函数):
这里就是绑定uvc可执行文件为uvc_main(之前的libuvc example的入口)。
第三部,编译
提示错误:
1. frame-mjpeg.c里,jpeglib.h头文件没找到。
不支持mjpeg,frame_mjpeg.c不参与编译。
2. 一些库函数冲突,看了一下,是因为包含了windows的头文件,在libuvc_config.h中加入如下内容:
第四部,资源优化
既然在windows上移植,暂时不需要优化,先跑通功能。
第五步,动态加载
暂不考虑,先跑通功能。
额外的异步,windows下的winusb驱动,需要定义具体设备ID,修改vsf_usr_cfg_win.h:
这里使用的UVC摄像头的PID/VID就是04F2/B130。
windows上,需要用zadig为这个摄像头安装winusb驱动。
摄像头接入PC后,编译运行:
这里的提示,就是UVC摄像头已经识别,使用了libusb的驱动。
运行demo(命令行输入uvc,按回车):
UVC识别OK,不过后面有运行错误,IO Error,libuvc开源的,所以可以简单调试一下。
调试发现,是如下位置出错:
上USB协议分析仪,截取报文:
看错误,是UVC摄像头的问题,几个UVC的标准请求没有响应。
等新的UVC摄像头,到了之后再测试。
最近编辑记录 vsf (2022-06-20 17:00:32)
离线
vsf还是走自己的应用路线吧,移植linux应用想扩大生态是徒劳的。我能在linux上跑,为什么还需要vsf呢?
最近编辑记录 kekemuyu (2022-06-28 21:04:11)
离线
vsf还是走自己的应用路线吧,移植linux应用想扩大生态是徒劳的。我能在linux上跑,为什么还需要vsf呢?
这个就是VSF的路线,如果你都直接用linux了,那没必要上VSF,多此一举。
VSF里用linux的应用代码,目前已经有几个项目在出货了,这个是因为项目需求才做的(客户给钱了,我们就开发),只是现在才开始推而已。其实,早在几年前就做了这个,在我们自己的项目里用的,之后还移植到ESP32里:https://whycan.com/t_5718.html
一般是在wifi soc上用的,这些芯片里,跑原版linux代价太大,而且都不一定可以跑得动的。
wifi soc里的使用,参考这里:https://whycan.com/t_8363.html
最近编辑记录 vsf (2022-06-28 22:19:25)
离线