第二季3:sample_venc.c的整体分析

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。

一、sample文件夹的介绍

将mpp/sample文件夹以及mpp/include文件夹导入SI后,搜索main时可以发现很多main函数。这说明sample文件夹下有很多例程,每个例程面向一个典型应用。我们只分析venc文件夹,其完整演示了视频捕获、视频处理、视频编码、视频输出与保存的功能。

第二季3:sample_venc.c的整体分析_第1张图片

第二季3:sample_venc.c的整体分析_第2张图片

可以在每个例程的目录下输入“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函数如下。  

第二季3:sample_venc.c的整体分析_第3张图片

我们在终端执行“./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,即退出进程。

你可能感兴趣的:(#,视频编解码)