乐鑫技术交流
直播中

龙献益

7年用户 893经验值
私信 关注
[问答]

uvc camera例程无法获取到图像是怎么回事?

开发板:esp32s2-Saola-v1.2
开发环境:win10 + IDFv4.4 + esp iot solution
摄像头:USB2.0 uvc免驱支持MJPEG摄像头

我根据摄像头描述符配置了usb_camera_wifi_transfer例程的参数后烧写测试,发现在通讯之后报错没有发送EOF。

运行log

  • I (816) UVC_STREAM: UVC Streaming Config Succeed
    I (866) UVC_STREAM: UVC Streaming Starting
    I (896) UVC_STREAM: Port=1 init succeed
    I (896) UVC_STREAM: Waitting USB Connection
    I (1146) UVC_STREAM: line 353 HCD_PORT_EVENT_CONNECTION
    I (1146) UVC_STREAM: Resetting Port
    I (1206) UVC_STREAM: Setting Port FIFO
    I (1206) UVC_STREAM: Getting Port Speed
    I (1206) UVC_STREAM: Port speed = 1
    I (1206) UVC_STREAM: USB Speed: full-speed
    I (1206) UVC_STREAM: Set Device Addr = 1
    I (1226) UVC_STREAM: Set Device Addr Done
    I (1226) UVC_STREAM: Set Device Configuration = 1
    I (1236) UVC_STREAM: Set Device Configuration Done
    I (1236) UVC_STREAM: SET_CUR Probe
    I (1236) UVC_STREAM: SET_CUR Probe Done
    I (1236) UVC_STREAM: GET_CUR Probe
    bmHint: 0001
    bFormatIndex: 2
    bFrameIndex: 5
    dwFrameInterval: 10000000
    wKeyFrameRate: 0
    wPFrameRate: 0
    wCompQuality: 0
    wCompWindowSize: 0
    wDelay: 0
    dwMaxVideoFrameSize: 614400
    dwMaxPayloadTransferSize: 800
    dwClockFrequency: 0
    bmFramingInfo: 0
    bPreferredVersion: 0
    bMinVersion: 0
    bMaxVersion: 0
    bInterfaceNumber: 0
    I (1276) UVC_STREAM: GET_CUR Probe Done, actual_num_bytes:64
    I (1276) UVC_STREAM: SET_CUR COMMIT
    I (1286) UVC_STREAM: SET_CUR COMMIT Done
    I (1286) UVC_STREAM: Set Device Interface = 1, Alt = 4
    I (1296) UVC_STREAM: Set Device Interface Done
    I (1296) UVC_STREAM: Sample processing task started
    I (1356) UVC_STREAM: Camera Start Streaming
    W (5346) UVC_STREAM: SWAP NO EOF 9412
    W (5846) UVC_STREAM: SWAP NO EOF 9536
    W (6336) UVC_STREAM: SWAP NO EOF 9656
我的配置:

  •     uvc_config_t uvc_config = {
  •         .dev_speed = USB_SPEED_FULL, //固定为 USB_SPEED_FULL
  •         .configuration = 1, //配置描述符编号,一般为 1
  •         .format_index = 2, // MJPEG 对应的 bFormatIndex, bFormatIndex: 0x02 (2)
  •         .frame_width = 160, // MJPEG 横向像素,例如 320
  •         .frame_height = 120, // MJPEG 纵向像素,例如 240
  •         .frame_index = 5, //MJPEG 320*240 对应的 bFrameIndex, bFrameIndex: 0x05
  •         .frame_interval = 333333, //可选的帧率 dwFrameInterval,例如 30fps
  •         .interface = 1, // 可选的视频流接口 bInterfaceNumber,一般为 1
  •         .interface_alt = 4, // 接口选项 bAlternateSetting, bAlternateSetting: 0x04
  •         .isoc_ep_addr = 0x82, // 接口选项对应的 bEndpointAddress, bEndpointAddresS: 0x82 (Direction=IN EndpointID=2)
  •         .isoc_ep_mps = 512, // 接口选项的确定的 MPS, 例如为 512
  •         .xfer_buffer_size = 20*1024, //单帧图像大小,需要根据实际测试确定,320*240 一般小于 35KB
  •         .xfer_buffer_a = pointer_buffer_a, // 已经申请的 buffer 指针
  •         .xfer_buffer_b = pointer_buffer_b, // 已经申请的 buffer 指针
  •         .frame_buffer_size = 20*1024, //单帧图像大小,需要根据实际测试确定
  •         .frame_buffer = pointer_frame_buffer, // 已经申请的 buffer 指针
  •     };



摄像头描述符,我是用win10的软件获取的,比较多                                                                                                                                                                                    
请问可能是什么问题导致的?uvc协议还在学习中不是很明白,是描述符配置的不对还是摄像头本身就不支持?或者说例程需要改动?
                                                                                                                                                                        

回帖(1)

卢表镜

4 天前

以下是一些建议和可能的原因:

1. 检查摄像头连接:确保摄像头已正确连接到ESP32开发板的USB接口。如果可能,请尝试使用其他USB线或更换其他摄像头进行测试。

2. 检查电源供应:确保摄像头的电源供应稳定,因为不稳定的电源可能会影响摄像头的性能。

3. 检查摄像头描述符配置:请再次检查您根据摄像头描述符配置的usb_camera_wifi_transfer例程的参数是否正确。如果可能,请尝试使用其他摄像头描述符进行测试。

4. 检查代码逻辑:检查您的代码逻辑是否正确,特别是在处理图像数据和发送EOF的部分。确保在接收到完整的图像数据后发送EOF。

5. 更新ESP-IDF版本:您当前使用的ESP-IDF版本为v4.4,可以尝试更新到最新版本,以获取可能的修复和改进。

6. 查看错误日志:仔细查看错误日志,了解问题的具体原因。根据您提供的日志信息,UVC流配置成功,但可能存在其他问题导致无法获取图像。

7. 尝试其他例程:如果可能,请尝试使用其他与UVC摄像头相关的例程,以检查问题是否与特定的例程有关。


举报

更多回帖

×
20
完善资料,
赚取积分