laoxiao

laoxiao

0个粉丝

6

问答

0

专栏

1

资料

laoxiao  发布于  2016-11-14 10:24:15
采纳率 0%
6个问答
9705

HI_MPI_SYS_MmzAlloc_Cached和HI_MPI_VB_GetBlock申请缓存块,是否有大小限制?

 
本帖最后由 laoxiao 于 2016-11-14 10:27 编辑

HI_MPI_VB_GetBlock,函数申请,块大小是跨度×高度×1.5,也就是一帧YUV格式大小,这样申请空间没问题。
但是如果稍微大一些,就会返回失败,不过手册信息有限,也没有错误码可以查询。


HI_MPI_SYS_MmzAlloc_Cached
这个函数申请能成功,但是立刻就出现失败信息。
看别人用这些函数,都是挺简单的,轻轻松松就申请到缓存块。
但是我试了多次都不行。
[code]    HI_VOID *pVirtDst = NULL;
    IVE_MEM_INFO_S stDst;
    IVE_HANDLE hIveHandle;
    stDst.u32Stride = 704;

    s32Ret = HI_MPI_SYS_MmzAlloc_Cached(&stDst.u32PhyAddr, &pVirtDst, "User1", HI_NULL, 704 * 576 * 3);

    if(s32Ret!=HI_SUCCESS)
    {
        printf("can't alloc intergal memory for %x\n",s32Ret);
        return HI_NULL;
    }
    else
    {
        printf("alloc intergal memory ok\n"
    }[/code]
Unhandled fault: external abort on non-linefetch (0x018) at 0x411ae784
[MMB LEAK(pid=1046): 0x8C771000, 1216512 bytes, 'User1'
  (hemmz_userdev_release: mmb<0x8C771000> mapped to userspace 0x40a56000 will be force unmaped!
我来回答
回答9个
时间排序
认可量排序

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-11-14 10:30:42
认可0
本帖最后由 zhuangweiye 于 2016-11-14 10:33 编辑

HI_MPI_VB_GetBlock 这个能申请到的前提是
1. 系统初始化时开了公共VB, 而且有公共VB大小大于等于要申请的大小,否则是不行的
2. 用HI_MPI_VB_CreatePool创建,条件也是大小要够大

"HI_MPI_SYS_MmzAlloc_Cached 这个函数申请能成功,但是立刻就出现失败信息。"
没有看懂是什么情况, 能具体点吗?

laoxiao

0个粉丝

6

问答

0

专栏

1

资料

laoxiao 2016-11-14 10:37:14
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=41235&ptid=13347]zhuangweiye 发表于 2016-11-14 10:30[/url]
HI_MPI_VB_GetBlock 这个能申请到的前提是
1. 系统初始化时开了公共VB, 而且有公共VB大小大于等于要申请的 ...[/quote]

第一个,公共VB大小我没理解,我一会先去看看。

第二个

alloc intergal memory ok//此处提示,已经表示申请成功了,但是紧接着显示下面内容,提示泄漏
Unhandled fault: external abort on non-linefetch (0x018) at 0x41146784
MMB LEAK(pid=1052): 0x8C771000, 1216512 bytes, 'User1'
  (hemmz_userdev_release: mmb<0x8C771000> mapped to userspace 0x40a1d000 will be force unmaped!

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-11-14 10:49:54
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=41237&ptid=13347]laoxiao 发表于 2016-11-14 10:37[/url]
第一个,公共VB大小我没理解,我一会先去看看。

第二个
[/quote]


1.  初始化中的
        stVbConf.astCommPool[0].u32BlkSize = u32BlkSize;
        stVbConf.astCommPool[0].u32BlkCnt = 4;

2. 应该不是这段代码的问题, 把这段代码下面全屏蔽掉看看

laoxiao

0个粉丝

6

问答

0

专栏

1

资料

laoxiao 2016-11-14 11:08:43
认可0
本帖最后由 laoxiao 于 2016-11-14 11:26 编辑

[quote][url=forum.php?mod=redirect&goto=findpost&pid=41239&ptid=13347]zhuangweiye 发表于 2016-11-14 10:49[/url]
1.  初始化中的
        stVbConf.astCommPool[0].u32BlkSize = u32BlkSize;
        stVbConf.astCommPool[0].u32B ...[/quote]

先多谢了,问你1里的
这个u32BlkSize可以自己设置的吗?
我设置为720*576*2=829440是没有问题的,但是720*576*3=1244160是不行的。

    u32BlkSize = SAMPLE_COMM_SYS_CalcPicVbBlkSize(gs_enNorm,\
                 PIC_D1, SAMPLE_PIXEL_FORMAT, SAMPLE_SYS_ALIGN_WIDTH);
    printf("u32BlkSize=%d\n", u32BlkSize);
这句我理解有错误,现修改如下面一行//而打印出来的u32BlkSize=663552,这个数很奇怪,刚好是576*576*2,跟宽度704(720)没什么联系
而打印出来的u32BlkSize=663552,768*576*1.5。

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-11-14 11:39:20
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=41245&ptid=13347]laoxiao 发表于 2016-11-14 11:08[/url]
先多谢了,问你1里的
这个u32BlkSize可以自己设置的吗?
我设置为720*576*2=829440是没有问题的,但是7 ...[/quote]

1.公共VB的大小是自己定的, 只要大于等于需求随便多少都可以, 只是出于节约的目的都是正好等于需要的大小
比如vi(yuv422, 720p)需要的VB最小为1280x720x2, 只要大于等于1280x720x2就可以, 没有特殊原因谁会去开大呢?

2. "我设置为720*576*2=829440是没有问题的,但是720*576*3=1244160是不行的。"
这个在哪里设置? 不行是指什么, 出错吗?
如果MMZ够, 在初始化的时候,  4M也可以

3. 楼主的理解应该有误, 具体可能要看实际代码, 一般VB的大小和宽高相关
   663552这个值可能和对齐有关, 给出参数和代码, 我可以解释一下

laoxiao

0个粉丝

6

问答

0

专栏

1

资料

laoxiao 2016-11-14 11:51:48
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=41249&ptid=13347]zhuangweiye 发表于 2016-11-14 11:39[/url]
1.公共VB的大小是自己定的, 只要大于等于需求随便多少都可以, 只是出于节约的目的都是正好等于需要的大小 ...[/quote]

1.我之所以申请大点的空间,因为需要做YUV和RGB之间的转换,所以需要缓存块大小为  跨度×高度×3=720×576×3=1244160字节的空间。

2.我是CVBS接口输出,4D1模式输入,是不是海思限制了申请缓存块的大小呢?
stVbConf.astCommPool[0].u32BlkSize = u32BlkSize; 这里的u32BlkSize如果为720*576*3是不行的,会提示
HI_MPI_VB_Init failed!。
我的MMZ内存应该足够大,DDR是256M的,MMZ匿名部分是186M.

3.这个我开始理解错误,后来搞清楚了应该是768*576*1.5=663552

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-11-14 11:58:38
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=41251&ptid=13347]laoxiao 发表于 2016-11-14 11:51[/url]
1.我之所以申请大点的空间,因为需要做YUV和RGB之间的转换,所以需要缓存块大小为  跨度×高度×3=720×5 ...[/quote]

给个720*576*2=829440工作状态下的/proc/media-mem和/proc/umap/vb看看

laoxiao

0个粉丝

6

问答

0

专栏

1

资料

laoxiao 2016-11-14 14:32:09
认可0
我不会在程序运行过程中 输入LINUX命令查看调试信息,以下是程序刚退出时候,截的图。



zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-11-14 14:49:13
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=41254&ptid=13347]laoxiao 发表于 2016-11-14 14:32[/url]
我不会在程序运行过程中 输入LINUX命令查看调试信息,以下是程序刚退出时候,截的图。[/quote]

1. 运行的时候, 用telnet另开个窗口来看

2. 试试
         stVbConf.astCommPool[0].u32BlkSize = 720*576*3;
         stVbConf.astCommPool[0].u32BlkCnt = 30;
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

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

Markdown 语法

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

举报类型

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

详细说明

易百纳技术社区