以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。
一、sample文件夹的介绍
将mpp/sample文件夹以及mpp/include文件夹导入SI后,搜索main时可以发现很多main函数。这说明sample文件夹下有很多例程,每个例程面向一个典型应用。我们只分析venc文件夹,其完整演示了视频捕获、视频处理、视频编码、视频输出与保存的功能。
可以在每个例程的目录下输入“make”进行编译,但要注意文件mpp/sample/Makefile.param中的参数设置,具体说明见第一季9:sample_venc.c的编译和测试。
以venc例程说明这些文件的调用关系。venc目录下的sample_venc.c文件中的main函数调用了一些位于common目录中的函数,而common目录中的函数再调用mpp中的API,即上一级目录ko、lib中的函数,然后再调用HI3518E内部的硬件单元。
二、sample_venc.c的整体分析
找到sample_venc.c的main函数如下。
我们在终端执行“./sample_venc index”时,不同的index对应不同的*argv[1],main函数首先判断参数再跳转到不同的函数。我们重点分析case ‘0’,因为我们主要是研究“AD->VI->VPSS->VENC->h264/h265”这条主线(见博文第二季1:MPP模块概述_天糊土的博客-CSDN博客),则需要分析SAMPLE_VENC_1080P_CLASSIC这个函数。
三、SAMPLE_VENC_1080P_CLASSIC函数的流程
函数SAMPLE_VENC_1080P_CLASSIC()有七个大步骤。
初始化MPP系统(step1&2:init system)
step 1: init sys variable,即初始化mpp系统相关的变量。
step 2: mpp system init,即初始化mpp系统。
见博客第二季4:初始化MPP系统(step1&2)。
配置视频捕获模块(step3:VI模块)
step 3: start vi dev & chn to capture,即进行图像的采集。
见博客第二季5:配置视频捕获模块(step3:VI模块)
配置视频处理子系统(step4:VPSS模块)
step 4: start vpss and vi bind vpss,即启动VPSS并绑定VI,进行图像处理。
见博客第二季6:配置视频处理子系统(step4:VPSS模块)。
配置编码模块(step5:VENC模块)
step 5: start stream venc,即开始进行编码。
见博客第二季7:配置编码模块(step5:VENC模块)。
保存编码得到的码流(step6:Save to File)
step 6: stream venc process -- get stream, then save it to file,把编码得到的裸流保存为裸流文件。
注意这里是将裸流保存为裸流文件(见博客第二季8:保存编码得到的码流(step6)),其实也可以保存为MP4格式的文件(见第7季内容),或者通过rtsp协议进行网络传输(见第6季内容)。
退出进程(step7:Exit)
step 7: exit process,即退出进程。