我是靠谱客的博主 魁梧路灯,最近开发中收集的这篇文章主要介绍海思SDK中sample 代码VIO对ISP的ae和awb的使用流程,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

本流程是根据海思的sample整理,为的是得到海思中isp的ae和awb回调的注册过程,从而更加清楚的明白海思平台的ISP的使用方法。这里以sample-vio.c中为例。在启动VI的时候回去调用imxXXX_cmos.c中注册好的回调函数(这些回调包含了ae awb的相关的参数设置)

int main(int argc, char* argv[])//这里的main函数是mpp中的sample_vio.c
	s32Ret = SAMPLE_VIO_8K30_PARALLEL(enVoIntfType);//由于sample里面给出了几种不同的输入视频制式,这里选择其中的一种8k30,这里需要注意的是在这个函数中有设置sensor的分辨率和picsize大小,需要根据实际的sensor做出修改
		s32Ret = SAMPLE_COMM_VI_StartVi(&stViConfig);//sample_common_vi.c
			s32Ret = SAMPLE_COMM_VI_CreateIsp(pstViConfig);//
				s32Ret = SAMPLE_COMM_VI_StartIsp(pstViInfo);
					SAMPLE_COMM_ISP_Sensor_Regiter_callback(ViPipe, u32SnsId);//sample_comm_isp.c
						pstSnsObj = SAMPLE_COMM_ISP_GetSnsObj(u32SnsId);//返回值pstSnsObj就是在驱动代码imx334_cmos.c中已经注册好的回调函数
							return &stSnsImx334Obj;//根据不同的u32SnsId,返回不同的sensor在驱动代码(imx334_cmos.c)中注册的毁掉函数
						s32Ret = pstSnsObj->pfnRegisterCallback(IspDev, &stAeLib, &stAwbLib);//执行上面返回的imx334_cmos.c注册的回调函数(sensor_register_callback)(包括ae,awb等回调)
							s32Ret  = cmos_init_sensor_exp_function(&stIspRegister.stSnsExp);//imx334_cmos.c
							s32Ret |= HI_MPI_ISP_SensorRegCallBack(ViPipe, &stSnsAttrInfo, &stIspRegister);
							s32Ret  = cmos_init_ae_exp_function(&stAeRegister.stSnsExp);
							s32Ret |= HI_MPI_AE_SensorRegCallBack(ViPipe, pstAeLib, &stSnsAttrInfo, &stAeRegister);
							s32Ret  = cmos_init_awb_exp_function(&stAwbRegister.stSnsExp);
							s32Ret |= HI_MPI_AWB_SensorRegCallBack(ViPipe, pstAwbLib, &stSnsAttrInfo, &stAwbRegister);
					SAMPLE_COMM_ISP_BindSns(ViPipe, u32SnsId, pstViInfo->stSnsInfo.enSnsType, -1);//以下3步骤是获取并执行在imx334_cmos.c中注册的控制中线回调
						pstSnsObj = SAMPLE_COMM_ISP_GetSnsObj(u32SnsId);
						enBusType = SAMPLE_COMM_GetSnsBusType(enSnsType);
						pstSnsObj->pfnSetBusInfo(IspDev, uSnsBusInfo);
					s32Ret = SAMPLE_COMM_ISP_Aelib_Callback(ViPipe);
						stAeLib.s32Id = IspDev;
						strncpy(stAeLib.acLibName, HI_AE_LIB_NAME, sizeof(HI_AE_LIB_NAME));
						CHECK_RET(HI_MPI_AE_Register(IspDev, &stAeLib), "aelib register call back");//注册ae算法库,主要是根据isp的devid号以及算法库的名
					s32Ret = SAMPLE_COMM_ISP_Awblib_Callback(ViPipe);
						stAwbLib.s32Id = IspDev;
						strncpy(stAwbLib.acLibName, HI_AWB_LIB_NAME, sizeof(HI_AWB_LIB_NAME));
						CHECK_RET(HI_MPI_AWB_Register(IspDev, &stAwbLib), "awblib register call back");//注册awb算法库,主要是根据isp的devid号以及算法库的名
					s32Ret = HI_MPI_ISP_MemInit(ViPipe);
					s32Ret = HI_MPI_ISP_SetPubAttr(ViPipe, &stPubAttr);
					s32Ret = HI_MPI_ISP_Init(ViPipe);
					s32Ret = SAMPLE_COMM_ISP_Run(&pstViInfo->stPipeInfo.aPipe[i]);
						s32Ret = pthread_create(&g_IspPid[*pIspDev], pstAttr, SAMPLE_COMM_ISP_Thread, (HI_VOID*)pIspDev);//建立一个线程开始运行ISP
							s32Ret = HI_MPI_ISP_Run(IspDev);

 

最后

以上就是魁梧路灯为你收集整理的海思SDK中sample 代码VIO对ISP的ae和awb的使用流程的全部内容,希望文章能够帮你解决海思SDK中sample 代码VIO对ISP的ae和awb的使用流程所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(70)

评论列表共有 0 条评论

立即
投稿
返回
顶部