usb gadget g_webcam uvc gadget调试

开发板连接了一个USB camera,想通过UVC gadget将摄像头输出到PC上。


内核关于gadget的测试说明 gadget-testing.txt 中提到:

# uvc-gadget -u /dev/video -v /dev/video

where uvc-gadget is this program: http://git.ideasonboard.org/uvc-gadget.git

with these patches: http://www.spinics.net/lists/linux-usb/msg99220.html

 

这里有一份整理好的测试代码,可以将开发板上的camera通过USB OTG连接到PC,在PC端显示摄像头图像:

 

https://github.com/wlhe/uvc-gadget.git

 

需要注意的是,代码中默认只支持360p和720p的分辨率大小,如果摄像头的分辨率不一样,需要修改代码中中支持的分辨率,另外,还需要在修改驱动webcam.c中添加新的分辨率,如我的摄像头分辨率是640x480,这里说明内核中分辨率的添加方法:

 

1.添加新的描述符:

 

static const struct UVC_FRAME_UNCOMPRESSED(1) uvc_frame_yuv_640x480 = {
    .bLength        = UVC_DT_FRAME_UNCOMPRESSED_SIZE(1),
    .bDescriptorType    = USB_DT_CS_INTERFACE,
    .bDescriptorSubType    = UVC_VS_FRAME_UNCOMPRESSED,
    .bFrameIndex        = 2,
    .bmCapabilities        = 0,
    .wWidth            = cpu_to_le16(640),
    .wHeight        = cpu_to_le16(480),
    .dwMinBitRate        = cpu_to_le32(147456000),
    .dwMaxBitRate        = cpu_to_le32(147456000),
    .dwMaxVideoFrameBufferSize    = cpu_to_le32(614400),
    .dwDefaultFrameInterval    = cpu_to_le32(333333),
    .bFrameIntervalType    = 1,
    .dwFrameInterval[0]    = cpu_to_le32(333333),

};

其中dwMaxBitRate=dwMinBitRate= wWidth*wHeight*2*FrameRate,dwDefaultFrameInterval=333333,表示间隔为33.3333ms,即FrameRate=30。另外注意bFrameIndex的设定,一定要按顺序来设定。同时uvc_format_yuv的bNumFrameDescriptors也要相应更改

 

2. 在uvc_fs_streaming_cls ,uvc_hs_streaming_cls,uvc_ss_streaming_cls中添加新的描述

3.安装 g_webcam.ko 驱动,先运行./uvc-gadget -u /dev/video1 -v /dev/video0 -f 0 -r 0 ,再连接usb到pc, 打开camera应用即可看到图像。

 

补充:

      内核驱动里面默认支持360p帧率为30f,720p帧率为2f,720p的帧率过低导致win10的camera应用一直不显示720p的分辨率选项,将帧率调整为15就可以了

你可能感兴趣的:(g_webcam,uvc,gadget)