文章目录
1.sample_vio介绍
作用:
视频输入输出相关例程,我这边要用到里面的SAMPLE_VIO_ViOnlineVpssOnlineRoute,初始化了VI-VPSS-VO,实现驱动摄像头,LCD显示画面。
目录:
Hi3559V200_MobileCam_SDK_V1.0.1.5/amp/a7_linux/mpp/sample/vio
Hi3559V200_MobileCam_SDK_V1.0.1.5/amp/a7_liteos/mpp/sample/vio
可以看到一个例程分为了客户端和服务端代码,客户端部署在linux,服务端部署在liteos,为什么要这么搞,可以去看之前的文章:HI3559V200获取IMX458摄像头数据_(1)基本逻辑
下面分别讲讲这两边的流程
————————————————————————————————————————————————
1 linux client端
main
//初始化IPCM用于收发消息
SAMPLE_VIO_MsgInit
//创建客户端
HI_IPCMSG_AddService
//连接服务端
HI_IPCMSG_Connect
Media_Client_Receive_thread
SAMPLE_VIO_ViOnlineVpssOnlineRoute
//系统初始化
HI_MPI_SYS_Init
SAMPLE_VIO_StartViOnlineVpssOnlineRoute
//发送任务消息
SAMPLE_VIO_SEND_MSG
HI_IPCMSG_CreateMessage
HI_IPCMSG_SendSync
linux端流程比较简单,就是初始化IPCM,然后发个消息给liteos,所有操作逻辑都放在了服务端
————————————————————————————————————————————————
2 liteos server端
main
//初始化IPCM,用于收发消息
SAMPLE_VIO_MsgInit
//创建服务端
HI_IPCMSG_AddService
//消息处理线程
Media_Server_Receive_thread
//连接客户端
HI_IPCMSG_Connect
Media_Server_Msg_Proc
MSG_VI_PROC
MSG_VI_StartViOnlineVpssOnlineRoute
//处理消息任务
SAMPLE_VIO_StartViOnlineVpssOnlineRoute
SAMPLE_VIO_StartViOnlineVpssOnlineRoute
//回复消息
HI_IPCMSG_CreateRespMessage
HI_IPCMSG_SendAsync
liteos端基本流程也是初始化IPCM,然后等待客户端连接,接收消息处理
主要流程在SAMPLE_VIO_StartViOnlineVpssOnlineRoute
SAMPLE_VIO_StartViOnlineVpssOnlineRoute
//获取配置的摄像头信息,这里用到的SENSOR0_TYPE,SENSOR1_TYPE在amp/a7_liteos/mpp/sample/Makefile.param里面配置
SAMPLE_COMM_VI_GetSensorInfo
pstViConfig->astViInfo[0].stSnsInfo.enSnsType = SENSOR0_TYPE
SAMPLE_COMM_VI_GetSizeBySensor
SAMPLE_COMM_SYS_GetPicSize
//这两个获取size,会影响后面VB初始化,如果尺寸超过MMZ大小,VB就会初始化失败
COMMON_GetPicBufferSize//这里可以把u32BlkCnt减少到5,减少空间申请
VI_GetRawBufferSize //这里可以把enPixelFormat改为PIXEL_FORMAT_YVU_PLANAR_420或者PIXEL_FORMAT_YVU_PLANAR_420,减少空间申请
SAMPLE_COMM_SYS_Init
HI_MPI_SYS_Exit
HI_MPI_VB_Exit
HI_MPI_VB_SetConfig
HI_MPI_VB_Init //VB视频缓存池,后面的VI VPSS VO都会从这里获取释放图像
HI_MPI_SYS_Init
//启动VI
SAMPLE_COMM_VI_StartVi
SAMPLE_COMM_VI_StartMIPI
SAMPLE_COMM_VI_SetParam
SAMPLE_COMM_VI_CreateVi
SAMPLE_COMM_VI_CreateIsp //这里就是初始化ISP摄像头
。。。
//这里就是回调,imx458_cmos.c里面有注册,初始化摄像头
SAMPLE_COMM_ISP_Sensor_Regiter_callback
//启动VPSS
SAMPLE_COMM_VPSS_Start
//这里启动VPSS_GRP和VPSS_CHN,后面我们用HI_MPI_VPSS_GetChnFrame获取图像就要用到这两个参数
HI_MPI_VPSS_CreateGrp
HI_MPI_VPSS_SetChnAttr
HI_MPI_VPSS_EnableChn
HI_MPI_VPSS_StartGrp
//VI绑定VPSS
SAMPLE_COMM_VI_Bind_VPSS
//启动VO
SAMPLE_COMM_VO_GetDefConfig
SAMPLE_COMM_VO_StartVO
//VPSS绑定VO
//这里原本配置的是HDMI,改为LCD,公板上的显示屏要用VO_OUTPUT_240x320_50
stVoConfig.enVoIntfType = VO_INTF_LCD_6BIT;
stVoConfig.enIntfSync = VO_OUTPUT_240x320_50;
SAMPLE_COMM_VPSS_Bind_VO
调试这个过程会出现很多错误,我后续专门一篇文章整理
————————————————————————————————————————————————
2.sample_vio_server如何在liteos运行
先抛出结论(工程师时间紧张,那么辛苦过来找答案)——将sample_vio_server编译成.a静态库,liteos初始化调用接口初始化服务端。
这个服务端要如何在liteos上跑起来呢?这里我就先吐槽一下,这个花费了我相当多时间,报问题给海思,跟我说官方例程也不一定能跑的,这是自家的fae吗~~~然后给了我一堆没用的措施,理解能力差,解决问题能力差。
这位前辈的文章给了我一些思路——海思平台异构系统框架(Linux+liteos)运行MPP业务
可是,,,最后重点如何烧录说的很模糊,怎么烧录?烧录地址要如何确定