HI3559V200获取IMX458摄像头数据_(3)实例分析+问题解决

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

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)]
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值