HI3559V200获取IMX458摄像头数据_(2)sdk例程sample_vio

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业务
可是,,,最后重点如何烧录说的很模糊,怎么烧录?烧录地址要如何确定

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值