您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 国内外标准规范 > Hi3516开发学习心得
Hi3516开发学习心得1.开发环境1.1概述嵌入式系统通常是一个资源受限的系统,因此直接在嵌入式系统的硬件平台上编写软件比较困难,有时候甚至是不可能的。目前的解决方法是采用宿主机、目标机的开发模式。在宿主机上编写程序,通过交叉编译器生成目标板上可以执行的二进制代码。然后通过文件系统,将二进制代码放在特定目录下,在目标板上运行。宿主机:VMWARE\ubuntu(服务器:192.168.1.101)环境:交叉开发工具包,nfs目标机:linuxhi35161.2安装过程参见卖方附赠视频教程“SDK安装及编译视频.avi”。nfs文件系统挂载:挂载点改变修改/etc/exports文件,具体方法自行谷歌。2.开发流程首先要有这样一个意识,即对开发板进行的配置,是以我们的需求为基础的。我们所做的工作在系统层次图的应用层部分:所需的函数统一由MPP(媒体处理平台)提供接口。MPP封装实现了基本功能函数,屏蔽掉了对底层的操作。sample_venc.c为完成视频采集编码一系列操作的代码。观察其代码风格如下:1.函数返回值作为状态码,用以判断函数是否执行成功。2.函数需要传出的值通过全局变量或地址传出。现在以函数先后顺序(也即视频采集编码处理流程)对各步骤做以说明。2.1配置视频缓存池:视频缓存池作用:视频缓存池主要向媒体业务提供大块物理内存管理功能,负责内存的分配和回收,充分发挥内存缓存池的作用,让物理内存资源在各个媒体处理模块中合理使用。由于视频输入通道不提供创建和销毁公共视频缓存池功能,因此,在系统初始化之前,必须为视频输入通道配置公共视频缓存池。根据业务的不同,公共缓存池的数量、缓存块的大小和数量会有所不同。enPayLoad---------------决定编码格式。enSize--------------------决定图像分辨率。(利用不同的编码通道,可以对同一rowdata编码出不同的分辨率。)缓存块的大小根据图像制式(PAL/NTSC)、图像分辨率、像素格式、图像跨距(字节对齐)共同决定。函数SAMPLE_COMM_SYS_CalcPicVbBlkSize计算缓存块大小。2.2初始化MPP系统由于MPP系统的正常运行依赖于缓存池,因此必须先调用HI_MPI_VB_Init初始化缓存池,再初始化MPP系统。如果多次初始化,仍会返回成功,但实际上系统不会对MPP的运行状态有任何影响。函数SAMPLE_COMM_SYS_Init完成MPP系统初始化。2.3启动VI设备分为4步:Tips:isprunmustatthisstep--aftervidevenable,beforevichnenable2.3.1sensor初始化2.3.2启动VI设备2.3.3启动ISP2.3.4使能VI通道(函数皆由MPP提供接口)2.4启动视频处理模块根据制式和分辨率获得图像宽和高的具体数据。再由此确定通道属性,进行配置。每一个通道对应一系列的硬件和软件功能模块,通道可以进行“串联”,以完成一系列处理。通道的“串联”在开发文档中成为通道绑定。在整个处理流程中,要先后经过如下的通道绑定:VI----VPSSVPSS----VENC(后者绑定前者)2.4.1启动VPSS主要根据制式和分辨率获得图像宽和高的具体数据。再由此确定通道属性,进行配置。然后使能VPSS通道。2.4.2VPSS绑定VI函数由MPP提供,直接调用。2.5启动视频流编码首先创建编码组,再创建编码通道。(编码通道组是指芯片启动一次,能够同时处理的编码通道的集合。通道组模块接收外部原始图像数据,而不关心图像数据是来自哪个外部模块。我的理解是主通道为物理通道,所有绑定与同一物理通道的扩展通道,其数据源是一样的。关于他们的具体关系,参见开发参考文档的“6视频编码模块------6.2.2编码通道与通道组”。)然后将编码通道注册到通道组。接着开启编码通道接收输入图像。2.6获取编码码流在这里新开了一个线程专门用于接收码流。具体思路为:把编码通道映射为一个文件句柄(函数HI_MPI_VENC_GetFd完成此操作)。接着的所有操作都是对文件句柄进行的。这完全类似于端口通信中将端口打开视作文件句柄,然后进行读写操作。流程图如下:1.获取通道的文件句柄。2.从各通道获取码流。(这里一共有30\1\2个通道,分别产生分辨率为1080p,VGA,QVGA的h264编码码流。--------------我们的工程中只需要编码通道0的1080p码流)2.1查询编码码流的一帧中有多少的包。2.2根据包的数目分配内存。2.3获取一帧数据。2.4根据编码类型存数据。2.5释放流。(不及时释放,当视频缓冲池满时即停止编码)2.6释放分配的内存。2.7关闭文件句柄。2.8循环执行以上7步。3.附录3.1名词解释视频输入(VI)、视频处理(VPSS)、视频编码(VENC)、视频解码(VDEC)、视频输出(VO)、视频侦测分析(VDA)、音频输入(AI)、音频输出(AO)、音频编码(AENC)、音频解码(ADEC)、编码通道组子模块(GROUP)区域管理(REGION)视频编码层(VCL,VideoCodingLayer)网络提取层(NAL,NetworkAbstractionLayer)SDKSoftwareDeveloper’sKit软件开发工具包MPPMediaProcessingPlatform媒体处理平台AIAutoIrisControl自动光圈控制VEDUVideoEncodeUnit视频编码单元IVEIntelligentVideoEngineering智能加速引擎PTSPresentationTimeStamp时间戳DDRCDouble-DataRateControllerDDR控制器MMZMediaMemoryZone媒体内存区域ROIRegionOfInterest感兴趣区域3.2其他要点1.当输入图像大小与编码通道宽高完全匹配时,才能启动编码通道进行编码。2.未尽事宜,参阅开发完档。
本文标题:Hi3516开发学习心得
链接地址:https://www.777doc.com/doc-6077607 .html