flyablefish

flyablefish

0个粉丝

4

问答

0

专栏

0

资料

flyablefish  发布于  2016-05-24 11:08:46
采纳率 0%
4个问答
4475

【已解决】HI_MPI_VDA_SendPic错误

 
本帖最后由 goodman 于 2016-6-15 21:32 编辑

不知道大家有没有用过HI_MPI_VDA_SendPic这个函数,我在3516a上只要调用这个函数就会出现下面的错误,板子就死掉了,错误出现在video_buf.c的1286行,但是这个源文件我应该是没有的,应该是sdk的源程序,所以也不知道是什么愿意,如果有人知道,请解答一下,谢谢。
Kernel panic - not syncing:
ASSERT failed at:
  >File name: /home/pub/platform_ipc/mpp/code/mkp/comm/video_buf.c
  >Function : VB_UserAdd
  >Line No. : 1286
  >Condition: 0
我来回答
回答9个
时间排序
认可量排序

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-05-24 11:34:59
认可0
能不能把相关代码放上来看看

ngswfx

1个粉丝

55

问答

1

专栏

40

资料

ngswfx 2016-05-24 12:34:55
认可0
video_buf
VB_UserAdd

感觉就是内存没有分配。或者有资源还没有初始化。

如果每次调用这个函数都报错,其实不难找原因。

flyablefish

0个粉丝

4

问答

0

专栏

0

资料

flyablefish 2016-05-24 15:06:33
认可0
这是相关代码,请各位高手帮忙分析一下,谢谢

HI_VOID *VDA_TEST_Send(HI_VOID *pParam)
{
    HI_S32 s32Ret=HI_SUCCESS;
    PVDA_SEND_THREAD_PARAM pVdaSendThreadParam=(PVDA_SEND_THREAD_PARAM)pParam;
    VIDEO_FRAME_INFO_S stUserFrame={0};
    int frame_count=0;
    VB_BLK VbBlk;
    HI_U32 u32PhyAddr,u32Size;
    HI_U8 *pVirAddr;
    VB_POOL VbPool;
    int i,j;

    memset(&stUserFrame,0,sizeof(stUserFrame));
    stUserFrame.stVFrame.u32Width=640;
    stUserFrame.stVFrame.u32Height=480;
    stUserFrame.stVFrame.u32Field=VIDEO_FIELD_FRAME;
    stUserFrame.stVFrame.enPixelFormat=PIXEL_FORMAT_YUV_SEMIPLANAR_420;
    stUserFrame.stVFrame.enVideoFormat=VIDEO_FORMAT_LINEAR;
    stUserFrame.stVFrame.enCompressMode=COMPRESS_MODE_NONE;
    stUserFrame.stVFrame.u32Stride[0]=640;
    stUserFrame.stVFrame.u32Stride[1]=640;
    stUserFrame.stVFrame.u32Stride[2]=0;
    stUserFrame.stVFrame.u32HeaderStride[0]=0;
    stUserFrame.stVFrame.u32HeaderStride[1]=0;
    stUserFrame.stVFrame.u32HeaderStride[2]=0;
    stUserFrame.stVFrame.u32TimeRef=0;
    stUserFrame.stVFrame.u32PrivateData=0;

    u32Size=stUserFrame.stVFrame.u32Stride[0]*stUserFrame.stVFrame.u32Height+stUserFrame.stVFrame.u32Stride[0]*stUserFrame.stVFrame.u32Height/2;
  
    VbBlk = HI_MPI_VB_GetBlock(VB_INVALID_POOLID, u32Size,NULL);
    if (VB_INVALID_HANDLE == VbBlk)
    {
        printf("HI_MPI_VB_GetBlock fail\n");
        return HI_NULL;
    }
    /* get physical address*/
    u32PhyAddr = HI_MPI_VB_Handle2PhysAddr(VbBlk);
    if (0 == u32PhyAddr)
    {
        printf("HI_MPI_VB_Handle2PhysAddr fail\n");
        return HI_NULL;
    }
  

    VbPool=HI_MPI_VB_Handle2PoolId(VbBlk);
    if(VbPool<0)
    {
        printf("HI_MPI_VB_Handle2PoolId fail\n");
        return HI_NULL;
    }
  
    s32Ret = HI_MPI_VB_MmapPool(VbPool);
    if(s32Ret!=HI_SUCCESS)
    {
        printf("HI_MPI_VB_MmapPool fail,error=%x\n",s32Ret);
        return HI_NULL;
    }
    s32Ret = HI_MPI_VB_GetBlkVirAddr(VbPool, u32PhyAddr, &pVirAddr);
    if(s32Ret!=HI_SUCCESS)
    {
        printf("HI_MPI_VB_GetBlkVirAddr fail,error=%x\n",s32Ret);
        return HI_NULL;
    }

    stUserFrame.stVFrame.u32PhyAddr[0]=u32PhyAddr;
    stUserFrame.stVFrame.pVirAddr[0]=pVirAddr;
    stUserFrame.stVFrame.u32PhyAddr[1]=u32PhyAddr+stUserFrame.stVFrame.u32Stride[0]*stUserFrame.stVFrame.u32Height;
    stUserFrame.stVFrame.pVirAddr[1]=pVirAddr+stUserFrame.stVFrame.u32Stride[0]*stUserFrame.stVFrame.u32Height;
    stUserFrame.stVFrame.u32PhyAddr[2]=0;
    stUserFrame.stVFrame.pVirAddr[2]=0;


    printf("VDA_TEST_Send thread start,channel=%d\n",pVdaSendThreadParam->VdaChn);
    while(!pVdaSendThreadParam->bStopThread)
    {


        printf("send frame pic %d\n",frame_count);

        s32Ret = HI_MPI_VDA_SendPic(pVdaSendThreadParam->VdaChn, &stUserFrame, 10);
        if(s32Ret!=HI_SUCCESS)
        {
            printf("HI_MPI_VDA_SendPic fail,error=%x\n",s32Ret);
            break;
        }
        else
        {
            printf("HI_MPI_VDA_SendPic success\n");
            frame_count++;
        }

        usleep(100*1000);
    }


    printf("VDA_TEST_Send thread finish\n");
    return HI_NULL;
}

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-05-24 15:41:47
认可0
楼主眼花缭乱的调用了一串VB操作,实际就是申请一块MMZ用于做为 HI_MPI_VDA_SendPic的入参

建议简单处理
调用HI_MPI_SYS_MmzAlloc_Cached() 直接分配一块MMZ内存, 得到物理地址和虚拟地址,

有个疑问, 一般VDA都是处理VPSS过来的图, 只要绑定VPSS就好了, 如果不用绑定,那么也会从VPSS调用HI_MPI_VPSS_GetChnFrame()直接得到VDA的输入

不知道楼主是什么应用要自己来申请内存,自己来发送, 难道这图像楼主还要自己处理一下?

flyablefish

0个粉丝

4

问答

0

专栏

0

资料

flyablefish 2016-05-24 15:43:51
认可0
已经找到原因了,忘了给u32PoolId赋值了

goodman

2个粉丝

30

问答

18

专栏

17

资料

goodman 2016-05-24 20:52:58
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=30537&ptid=11406]zhuangweiye 发表于 2016-5-24 15:41[/url]
楼主眼花缭乱的调用了一串VB操作,实际就是申请一块MMZ用于做为 HI_MPI_VDA_SendPic的入参

建议简单处理
...[/quote]

这个是DEMO里面的代码

goodman

2个粉丝

30

问答

18

专栏

17

资料

goodman 2016-05-24 20:53:29
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=30539&ptid=11406]flyablefish 发表于 2016-5-24 15:43[/url]
已经找到原因了,忘了给u32PoolId赋值了[/quote]

请将标题标记为【已解决】

xhhcy

0个粉丝

5

问答

0

专栏

0

资料

xhhcy 2016-06-15 17:12:14
认可0
我的那个Sample里怎么没有这个函数的示例啊??

xhhcy

0个粉丝

5

问答

0

专栏

0

资料

xhhcy 2016-06-15 17:46:33
认可0
不知道那个图片是从哪里读???大神帮忙解释一哈
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
相关问答
无更多相似问答 去提问
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区