Himpp IPC V2.0 开发文档学习_VI&VO

本文详细介绍了视频输入(VI)和视频输出(VO)的工作原理和技术细节。VI部分涵盖帧率控制、在线与离线模式、物理通道配置等内容,并强调了LDC镜头畸变校正及Rotate旋转功能的限制。VO部分则解释了视频层的概念及其与显示设备的关系,并介绍了单画面直通模式以优化数据处理流程。

1.视频输入(VI)
【采集和发送帧率控制】

(1) 视频输入设备:负责对时序进行解析;
(2) 在线模式:VI—>VPSS;离线模式:VI—>DDR;
(3) 视频物理通道:连接VI和DDR,可实现剪裁等功能;
(4) 掩码:数据来源;
(5) CSC:color space concert,即RGB和YCbCr颜色空间的转换;
参考:https://blog.youkuaiyun.com/helimin12345/article/details/78536520

(6) LDC:镜头畸变矫正;
【输入输出只支持非压缩,仅支持非场输出的sp420图像,仅支持物理通道的LDC设置】
(7) Rotate:仅支持非场输出的sp420图像的旋转,仅支持90、180、270的旋转,不支持任意角度的旋转,仅支持物理通道的Rotate。

【需要配置的参数】
(1) 接口模式信息:BT.1120等;
(2) 工作模式信息: 1 路、 2 路、 4 路复合模式;
(3) 数据布局信息:有效数据的布局;
(4) 数据信息:隔行或逐行输入、 YUV 数据输入顺序;
(5) 同步时序信息:垂直、水平同步信号的属性。
【通道属性配置 3-14】
【拓展通道属性设置 3-41】
【定义视频设备的接口模式 3-73】

2.视频输出(VO)
(1) 高清和标清显示设备:DHDx 和 DSDx;
(2) 视频层:VHDx 和 VSDx和PIP(可以动态绑定视频层);
(3) 通道归属于视频层管理;
【Hi3516A 设备规格&视频层规格 4-2】

(4) 单画面直通模式:在数据流处理通路上不经过 VGS 模块处理,节省一次 VGS搬移过程和 VO 本身要申请的内存。

<think>好的,用户想在海思SDK中实现图像采集与显示的功能,需要找到相关的示例代码或文档。首先,我需要回忆一下海思SDK的目录结构和之前提供的引用内容。 根据引用[1]中的目录结构,sample目录下应该有示例代码。用户提到的图像采集和显示可能涉及VI(视频输入)和VO(视频输出)模块。引用[3]详细描述了海思媒体处理平台的流程,其中VI负责捕获视频图像,VO负责输出到显示设备。 接下来,用户需要具体的示例代码。在引用[2]中提到,sample/venc目录下的sample_venc.c实现了视频采集和编码,但用户需要的是采集与显示,而不仅仅是编码。可能需要查找其他示例,比如sample_vo或sample_vi相关的文件。不过根据引用[3],SAMPLE_VENC_1080P_CLASSIC函数可能是一个起点,但需要调整代码以包含显示部分。 另外,common文件夹中的文件在编译时会被其他示例使用,因此可能需要参考这些公共代码来处理初始化和模块间的连接。文档目录(doc/)可能有相关的说明,用户应查阅这里的技术文档。 需要确保用户正确配置MPP(媒体处理平台)和各个模块的参数,比如VI的输入分辨率、VO的输出配置。此外,内存管理和模块间的数据流也是关键,例如VI捕获的数据需要传递给VO进行显示,可能需要使用VPSS进行处理。 可能的问题包括如何初始化VI和VO模块,如何连接它们,以及如何处理图像数据。用户需要参考海思的API文档,特别是VI_Init、VO_Init等函数,以及数据缓冲区的处理流程。 最后,建议用户查看sample目录下的vo或vi示例,并结合MPP的文档进行配置。编译时注意Makefile中的相关配置,确保所需的模块被正确包含和链接。</think>在海思SDK中实现图像采集与显示功能,需重点关注视频输入(VI)和视频输出(VO)模块的协同工作。以下是具体实现路径及关键代码示例: ### 一、实现流程 1. **系统初始化** ```c HI_MPI_SYS_Exit(); //先清理残留配置 HI_MPI_VB_Exit(); HI_MPI_VB_SetConfig(&stVbConf); //配置视频缓存池 HI_MPI_VB_Init(); HI_MPI_SYS_Init(); //初始化MPP系统 ``` 需特别注意`VB_CONF_S`结构体配置,需根据分辨率计算缓存大小[^3] 2. **VI模块配置**(以1080P输入为例) ```c VI_DEV_ATTR_S stViDevAttr = { .enIntfMode = VI_MODE_DIGITAL_CAMERA, .enWorkMode = VI_WORK_MODE_1Multiplex, .au32CompMask = {0xFFF0000, 0x0}, //YUV分量掩码 .stSize = {1920, 1080} //输入分辨率 }; HI_MPI_VI_SetDevAttr(ViDev, &stViDevAttr); HI_MPI_VI_EnableDev(ViDev); //启用设备 ``` 3. **VO模块配置**(HDMI输出示例) ```c VO_DEV_ATTR_S stVoDevAttr = { .enIntfType = VO_INTF_HDMI, .enIntfSync = VO_OUTPUT_1080P60 }; HI_MPI_VO_SetDevAttr(VoDev, &stVoDevAttr); HI_MPI_VO_Enable(VoDev); //启用显示设备 ``` 4. **绑定数据流** ```c MPP_CHN_S stSrcChn = {MOD_ID_VI, ViDev, VI_CHN_0}; MPP_CHN_S stDestChn = {MOD_ID_VO, VoDev, VO_CHN_0}; HI_MPI_SYS_Bind(&stSrcChn, &stDestChn); //建立VI到VO的绑定 ``` ### 二、参考代码位置 1. **核心示例**:`sample/vo/sample_vo.c` 包含显示设备初始化代码 2. **采集模块**:`sample/vi/sample_vi.c` 演示视频输入配置 3. **绑定示例**:`sample/common/sample_comm_venc.c` 中的`SAMPLE_COMM_VENC_BindVpss`展示模块绑定方法 ### 三、关键文档 1. `doc/mpp_开发指南.pdf` 第4章详细说明VI/VO模块API 2. `doc/HiMPP IPC V2.0 媒体处理软件开发参考.pdf` 包含模块关系图 3. `sample/readme_cn.txt` 记录示例编译方法和依赖关系 ### 四、典型问题排查 1. **黑屏问题**:检查`VB_CONF_S`内存池分配是否充足,1080P图像每帧需要`1920x1080x1.5=3,110,400`字节 2. **花屏现象**:确认YUV格式(`VI_DEV_ATTR_S`中的`enPixFmt`)与VO配置一致 3. **帧率不足**:在`VI_CHN_ATTR_S`中设置`stFrameRate.s32SrcFrameRate = -1`启用自动适配
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值