海思3559上适配UVC摄像头(三) 数据送入VPSS

本文详细介绍了在海思3559平台上如何将UVC摄像头的数据通过DATAFIFO送入VPSS进行处理。首先讲解了VPSS的视频处理功能,接着阐述了DATAFIFO在Huawei LiteOS和Linux间通信的角色。接着讨论了 LiteOS和Linux端DATAFIFO的初始化及读写操作。最后,提到了YUV422到YUV422SP的转换以及VPSS帧发送的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、海思 VPSS介绍:

视频处理子系统 VPSS(Video Processing Sub System)实现视频处理功能。

由于UVC摄像头驱动是运行在Linux上的,抓取到的数据也是在Linux 端,而海思3559平台的对VPSS,VENC(编码器)的操作API都是在LiteOS端,因此需要把数据送往LiteOS之后,再通过API把数据送入VPSS。

二、DATAFIFO

Huawei LiteOS 和Linux两个系统之间采用DATAFIFO +IPC通信的方式进行通信。
这里通过DATAFIFO将数据传入到LiteOS中去
以下 是海思文档中的关于DATAFIFO的介绍:
DATAFIFO

整体设计如下:
在这里插入图片描述

三 LiteOS DATAFIFO

3.1、LiteOS DATAFIFO 初始化

HI_U32 UsbCamera_DataFifo_Create(HI_VOID)
{
   
   
	HI_S32 s32Ret = 0;
    HI_DATAFIFO_Params_S params = {
   
   2, BLOCK_LEN, HI_TRUE, READER};
	s32Ret= HI_DATAFIFO_Open(&hDataFifo, &params);
    if (s32Ret == HI_FAILURE)
    {
   
   
        fprintf(stderr, "open fail\n");
		return s32Ret;
    }
	
	HI_DATAFIFO_Ioctl(hDataFifo, GET_DATAFIFO_PHY_ADDR, &DATAFIFO_phyAddr);

	return HI_SUCCESS;
}

3.2 LiteOS DATAFIFO 读取函数:

void* UsbCamera_DataFifo_read_more(void *arg)
{
   
   
    HI_U32 readLen = 0;
    HI_CHAR *pBuf = NULL;
    HI_CHAR *VPSSBuf = NULL;
	
	VPSSBuf = (HI_CHAR *)malloc(BLOCK_LEN);
	
    prctl(PR_SET_NAME, (unsigned long) "Hi_pTReadMore1", 0, 0, 0);
    while(HI_TRUE == s_DataFifoStart)
    {
   
   
        readLen = 0;
        HI_DATAFIFO_Ioctl(hDataFifo, GET_AVAIL_READ_LEN, &readLen);
        if (readLen > 0)
        {
   
   
            if (HI_SUCCESS == HI_DATAFIFO_Read(hDataFifo, (HI_VOID
<think>我们正在讨论的是Hi3519DV500开发板适配UVC摄像头的问题。根据之前的引用,我们知道在SDK中有sensor驱动的路径,但是UVC摄像头是标准USB视频类设备,通常不需要特定的sensor驱动,而是使用通用的UVC驱动。步骤:1.确认内核支持UVC:首先需要确保Linux内核已经配置了UVC驱动(CONFIG_USB_VIDEO_CLASS)。2.加载相关内核模块:包括USB主机控制器驱动、UVC驱动等。3.检查设备识别:插入UVC摄像头后,通过dmesg查看识别情况。4.配置MPP(媒体处理平台):可能需要调整MPP的输入源为USB摄像头。具体操作:###1.内核配置在编译内核前,确保内核配置中启用了UVC驱动。在Linux内核配置中:```bashDeviceDrivers--->Multimediasupport--->Videocaptureadapters--->V4LUSBdevices---><*>USBVideoClass(UVC)[*]UVCinputeventsdevicesupport```同时确保USB主机控制器驱动(如DWC3)已经启用。###2.加载内核模块启动后,需要加载相关模块。根据引用[2],我们看到了许多模块,但UVC相关的模块是`uvcvideo`。通常,插入UVC摄像头时,系统会自动加载`uvcvideo`模块。如果没有,可以手动加载:```bashinsmoduvcvideo```另外,确保USB主机控制器驱动已经加载。例如,对于Hi3519DV500,可能需要加载`dwc3`、`dwc3-hisi`等模块。###3.检查设备插入摄像头后,使用`dmesg`查看日志,应该能看到类似下面的信息:```bashusb1-1:newhigh-speedUSBdevicenumber2usingdwc3usb1-1:NewUSBdevicefound,idVendor=abcd,idProduct=1234usb1-1:NewUSBdevicestrings:Mfr=1,Product=2,SerialNumber=3input:UVCCameraas/devices/platform/xxx/usb1/.../input/input0```此外,检查`/dev/video0`设备节点是否生成。###4.MPP配置MPP通常默认配置为从MIPI传感器获取视频数据。现在需要修改为从V4L2设备(即UVC摄像头)获取数据。在MPP的配置文件中(如`/etc/sample/sample.conf`),设置输入源为V4L2设备:```[dev]video_input=v4l2v4l2_dev=/dev/video0```###5.运行示例程序海思SDK中提供了示例程序(如`sample_vio`),可以通过修改配置来使用V4L2设备作为输入。注意:UVC摄像头输出的格式(如YUV、MJPEG等)需要被MPP支持。如果不支持,可能需要在内核中启用相应的解码器,或者在MPP中进行格式转换。###可能的问题-**格式不支持**:如果摄像头输出MJPEG,而MPP不支持,则需要转换格式或者重新配置摄像头输出支持的格式(如YUYV)。-**分辨率不支持**:需要确保摄像头输出的分辨率在MPP支持的范围内。-**性能问题**:UVC摄像头通过USB传输数据,带宽可能受限,建议使用USB3.0接口(如果开发板支持)。###参考[^1]:Hi3519DV500SDK中sensor驱动路径:`Hi3519DV500_SDK_V2.0.2.0/smp/a55_linux/source/mpp/cbb/isp/user/sensor/hi3519dv500`[^2]:海思模块加载顺序示例,但UVC摄像头需要的是`uvcvideo`模块,而不是这些编码解码模块。§§相关问题§§1.如何检查Hi3519DV500开发板上的USB控制器是否工作正常?2.UVC摄像头在Hi3519DV500开发板上输出图像格式不兼容怎么办?3.如何调整MPP以支持UVC摄像头的分辨率?4.Hi3519DV500开发板支持USB3.0吗?</think>### Hi3519DV500 开发板适配 UVC 摄像头流程 #### 1. **确认内核支持 UVC** - 检查内核配置是否启用 UVC 驱动: ```bash zcat /proc/config.gz | grep CONFIG_USB_VIDEO_CLASS ``` 确保输出为 `CONFIG_USB_VIDEO_CLASS=y`。若未启用,需重新配置内核: ```bash make menuconfig ``` 路径:`Device Drivers → Multimedia support → Video capture adapters → V4L USB devices → USB Video Class (UVC)` #### 2. **加载 UVC 驱动模块** - 插入 UVC 摄像头后,手动加载驱动: ```bash insmod uvcvideo.ko ``` - 验证设备节点: ```bash ls /dev/video* # 应生成 /dev/video0 等节点 ``` - 检查识别信息: ```bash dmesg | tail # 查看内核日志中的 UVC 设备描述 ``` #### 3. **配置 MPP 媒体处理平台** - 修改 MPP 配置文件(如 `sample_vio.conf`): ```ini [sensor0] mode = 3 # 设为 V4L2 输入模式 dev = /dev/video0 # UVC 设备节点 frame_rate = 30 # 帧率匹配摄像头能力 ``` - 调整分辨率格式(需与摄像头输出一致,如 YUYV): ```ini [v4l2] width = 640 height = 480 format = yuyv # 常见 UVC 格式 ``` #### 4. **解决常见兼容性问题** - **格式不支持**:若 MPP 不识别摄像头格式: - 通过 `v4l2-ctl` 查询支持格式: ```bash v4l2-ctl -d /dev/video0 --list-formats ``` - 在代码中转换格式(如 libyuv 转换 YUYV 到 NV12)。 - **带宽不足**:降低分辨率或帧率: ```ini width = 320 height = 240 frame_rate = 15 ``` - **权限问题**:确保用户组访问权限: ```bash chmod 666 /dev/video0 ``` #### 5. **测试视频流** - 使用 MPP 示例程序: ```bash ./sample_vio -c 0 -e 1 -s 0 # 启动 VIO 通道 0 ``` - 通过 HDMI 输出或抓帧工具验证图像: ```bash ./sample_vio -c 0 -e 3 -o uvc_capture.yuv # 保存 YUV 数据 ``` > **关键引用**: > - SDK 中传感器驱动路径:`Hi3519DV500_SDK_V2.0.2.0/smp/a55_linux/source/mpp/cbb/isp/user/sensor/hi3519dv500`(但 UVC 无需 sensor 驱动)[^1] > - 模块加载顺序参考:需确保 USB 主机控制器驱动(如 `dwc3.ko`)优先于 `uvcvideo.ko`[^2]
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值