fps:(frame per second 每秒多少帧) 帧率
从main入手,main的传参分析:
3.sample代码学习的技巧
学习这个视频框架需要理解很多抽象的概念,理解好概念再去理解代码会更好的上手,就像学习硬件驱动一样,硬件的原理没有搞懂,看代码根本看不懂。
请参考的我博客:海思HI3518E部分
系统控制mpp:海思HI3518E系统控制mpp_小辜同学的博客-CSDN博客
视频缓存池:海思HI3518E视频缓存池_小辜同学的博客-CSDN博客
视频输入VI:海思H3518E视频输入VI_小辜同学的博客-CSDN博客
视频输出VO:海思H3518E视频输出VO_小辜同学的博客-CSDN博客
视频处理VPSS:海思H3518E视频处理VPSS_小辜同学的博客-CSDN博客
4.绘制调用关系图谱
调用关系的图谱刚开始追代码的时候并不要再过深究,深究便会深陷进去。
根据原理理解视频输入输出处理的通路即可,等项目中遇到的问题再深究。
-> 全局把控整个过程全景视图。
-> 掌握细节数据结构元素含义,和遇到的概念。
-> 知道某些关键操作在哪里定义,哪里设置,将来需要改的时候能找到地方。
main()
SAMPLE_VENC_1080P_CLASSIC
SAMPLE_COMM_VI_GetSizeBySensor传入参数,做一个参数的检查,根据传入的参数选择senser的清晰度,最终选择的是三路码流,一路主码流是配置出来的,另外两路是简化出来的,三路的分辨率不一样。--------------------------------------------------------->(step1)
SAMPLE_COMM__CalcPicVbBlkSize根据选择的码流申请内存
SAMPLE_COMM_SYS_GetPicSize选择到底要多大的内存
SAMPLE_COMM_SYS_Init------------------------------------------------------------------->(step2)
HI_MPI_SYS_Exit();
HI_MPI_VB_Exit();
HI_MPI_VB_SetConf();
HI_MPI_VB_Init();
HI_MPI_SYS_SetConf();
HI_MPI_SYS_Init();
SAMPLE_COMM_VI_StartVi----------------------------------------------------------------->(step3)
IsSensorInput
SAMPLE_COMM_VI_StartIspAndVi
SAMPLE_COMM_VI_StartMIPI*****************》(1)
SAMPLE_COMM_VI_SetMipiAttr
fd = open("/dev/hi_mipi", O_RDWR);
ioctl(fd, HI_MIPI_SET_DEV_ATTR, pstcomboDevAttr)
SAMPLE_COMM_ISP_Init********************》(2) //isp就是image signal process,图像信号处理
sensor_register_callback
HI_MPI_AE_Register();
HI_MPI_AWB_Register();
HI_MPI_AF_Register();
HI_MPI_ISP_MemInit();
HI_MPI_ISP_SetWDRMode();
HI_MPI_ISP_SetPubAttr();
HI_MPI_ISP_Init();
SAMPLE_COMM_ISP_Run********************》(3)
pthread_create(&gs_IspPid, &attr, (void* (*)(void*))Test_ISP_Run, NULL)
Test_ISP_Run
HI_MPI_ISP_Run();
SAMPLE_COMM_VI_StartDev****************》(4)
HI_MPI_VI_SetDevAttr();
HI_MPI_ISP_GetWDRMode();
HI_MPI_VI_SetWDRAttr();
HI_MPI_VI_EnableDev();
SAMPLE_COMM_VI_StartChn****************》(5)
HI_MPI_VI_SetChnAttr();
HI_MPI_VI_SetRotate();
HI_MPI_VI_EnableChn();
SAMPLE_COMM_SYS_GetPicSize------------------------------------------------------------>(step4)
SAMPLE_COMM_VPSS_StartGroup
HI_MPI_VPSS_CreateGrp();
HI_MPI_VPSS_GetNRParam();
HI_MPI_VPSS_SetNRParam();
HI_MPI_VPSS_StartGrp();
SAMPLE_COMM_VI_BindVpss
SAMPLE_COMM_VI_Mode2Param
HI_MPI_SYS_Bind();
SAMPLE_COMM_VPSS_EnableChn
HI_MPI_VPSS_SetChnAttr();
HI_MPI_VPSS_SetExtChnAttr();
HI_MPI_VPSS_SetChnMode();
HI_MPI_VPSS_EnableChn();
SAMPLE_COMM_VENC_Start---------------------------------------------------------------->(step5)
SAMPLE_COMM_SYS_GetPicSize
step 1: Create Venc Channel
HI_MPI_VENC_CreateChn();
step 2: Start Recv Venc Pictures
HI_MPI_VENC_StartRecvPic();
SAMPLE_COMM_VENC_BindVpss
HI_MPI_SYS_Bind();
SAMPLE_COMM_VENC_StartGetStream------------------------------------------------------->(step6)
SAMPLE_COMM_VENC_StartGetStream
pthread_create(&gs_VencPid, 0, SAMPLE_COMM_VENC_GetVencStreamProc, (HI_VOID*)&gs_stPara);
SAMPLE_COMM_VENC_StopGetStream-------------------------------------------------------->(step7)
pthread_join(gs_VencPid, 0);
5.系统控制mpp初始化解析
6.视频输入VI
VI模块就包含3大部分:Sensor对接的部分,ISP,VI dev和channel。
7.视频处理VPSS
Hi3518EV200的VI模块只有一个物理通道chn0,只能绑定VPSS的一个Grp,而VPSS一个Grp可以创建若干个VPSSchn作为不同分辨率的码流输出通道。
8.venc编码模块
VENC概述:
本模块支持多路实时编码,且每路编码独立,编码协议和编码 profile 可以不同。本模块支持视频编码同时,调度 Region 模块对编码图像内容进行叠加和遮挡。
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新!!
阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!**
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新!!