文章目录
1.整体流程设计

2.模块分析
2.1 ipcm
2.1.1 ipcm初始化
参考sample_msg_client 和 sample_msg_server的 Media_Msg_Init(void)函数
服务重名导致添加服务失败
开始的时候直接把sample_vio_server放在liteos上运行,运行报错
[IPCMSG]:Fun:HI_IPCMSG_AddService,Line:135,Service HiMPP_MSG already exist.
HI_IPCMSG_AddService fail
提示就是这个HiMPP_MSG已经运行了,然后就去代码里面搜索这个字符串,确实./ndk/code/mediaserver/msg/msg_server.c这个服务已经创建了同样的服务,所以只能修改咯,把服务端和客户端的 服务名+端口号都修改
2.1.2 收发消息
客户端:
HI_S32 start_server_video(){
HI_S32 s32Ret=HI_FAILURE;
HI_IPCMSG_MESSAGE_S *pReq = NULL;
HI_IPCMSG_MESSAGE_S *pResp = NULL;
pReq = HI_IPCMSG_CreateMessage(IPCM_MOD_START_CAMERA, 0, NULL, 0);
HI_IPCMSG_SendSync(g_MCmsgId, pReq, &pResp, SEND_MSG_TIMEOUT);//阻塞型,等待回复消息
s32Ret = pResp->s32RetVal;//取出回复的值
// printf("jjcc s32Ret=%d\n",s32Ret);
HI_IPCMSG_DestroyMessage(pReq);
HI_IPCMSG_DestroyMessage(pResp);
return s32Ret;
}
服务端:
HI_S32 MSG_Start_Camera(HI_S32 s32MsgId, HI_IPCMSG_MESSAGE_S *pstMsg)
{
printf("jjcc MSG_Start_Camera\n");
HI_S32 s32Ret;
HI_IPCMSG_MESSAGE_S *respMsg;
s32Ret = SAMPLE_VIO_StartViOnlineVpssOnlineRoute();
printf("jjcc MSG_Start_Camera ret=%#x\n",s32Ret);
respMsg = HI_IPCMSG_CreateRespMessage(pstMsg, s32Ret , NULL, 0);//把执行结果s32Ret 放到回复消息中
HI_IPCMSG_SendAsync(s32MsgId, respMsg, NULL);
HI_IPCMSG_DestroyMessage(respMsg);
return HI_SUCCESS;
}
2.2 VB初始化
HI_S32 SAMPLE_VIO_StartViOnlineVpssOnlineRoute(HI_VOID)
{
。。。
/*config vb*/
memset_s(&stVbConf, sizeof(VB_CONFIG_S), 0, sizeof(VB_CONFIG_S));
stVbConf.u32MaxPoolCnt = 2;
u32BlkSize = COMMON_GetPicBufferSize(stSize.u32Width, stSize.u32Height, SAMPLE_PIXEL_FORMAT, DATA_BITWIDTH_8, COMPRESS_MODE_SEG, DEFAULT_ALIGN);
stVbConf.astCommPool[0].u64BlkSize = u32BlkSize;
stVbConf.astCommPool[0].u32BlkCnt = 10;
u32BlkSize = VI_GetRawBufferSize(stSize.u32Width, stSize.u32Height, PIXEL_FORMAT_RGB_BAYER_16BPP, COMPRESS_MODE_NONE, DEFAULT_ALIGN);
stVbConf.astCommPool[1].u64BlkSize = u32BlkSize;
stVbConf.astCommPool[1].u32BlkCnt = 4;
s32Ret = SAMPLE_COMM_SYS_Init(&stVbConf);
。。。
SAMPLE_COMM_SYS_Init里面就进行了VB的初始化,这里出现了报错:
[SAMPLE_COMM_SYS_Init]-381: HI_MPI_VB_Init failed!
分析步骤:
1.看log,可以看到是HI_MPI_VB_Init这个接口返回失败,一般HI_MPI接口失败的ret值,文档都会有说明,可以打印出来,查一下什么原因。我这边当时没有保存下来,现在不知道返回值是多少了。
2.查询mpp log。在linux端的命令是 cat /dev/logmpp,但是现在是运行在liteos,所以运行cat_logmpp
这边可以看到是VB申请MMZ失败。
Huawei LiteOS # cat_logmpp
<3>[(null)]

本文深入探讨了音视频处理中的关键环节,包括整体流程设计、模块分析、MMZ内存管理、YUV420SP转RGB技术、IVE模块应用及优化、datafifo使用和VO显示屏配置等。通过详细的技术解析和实战经验分享,为读者提供了全面的音视频处理与AI算法融合的解决方案。
最低0.47元/天 解锁文章
4042

被折叠的 条评论
为什么被折叠?



