微信用户

微信用户

1个粉丝

87

问答

0

专栏

3

资料

微信用户  发布于  2019-11-01 17:45:15
采纳率 0%
87个问答
2988

3559a ive 遇到了一个问题

 
问题: 使用 memcpy 程序很正常不会出现问题。然后使用了ive dma copy 。 运行了一段时间就会卡住。下面打印的ERROR , 不是我应用打印的。  memcpy 程序是好的  我认为不是我软件内存释放的问题。 但是我不认为要申请和释放内存啊。

现在是src 和 dst (1920 1080)的长款格式是一样的,  nOffset 是0.

                stSrcData.u64VirAddr =  pstVideosrc->stVFrame.u64VirAddr[0]+nOffset;
                stSrcData.u64PhyAddr =  pstVideosrc->stVFrame.u64PhyAddr[0]+nOffset;               
                stSrcData.u32Width   =  pstVideodst->stVFrame.u32Width;               
                stSrcData.u32Height  =  pstVideodst->stVFrame.u32Height;                       
                stSrcData.u32Stride  =  pstVideosrc->stVFrame.u32Stride[0];

                stDstData.u64VirAddr = pstVideodst->stVFrame.u64VirAddr[0];               
                stDstData.u64PhyAddr = pstVideodst->stVFrame.u64PhyAddr[0];               
                stDstData.u32Width   = pstVideodst->stVFrame.u32Width;                       
                stDstData.u32Height  = pstVideodst->stVFrame.u32Height;                       
                stDstData.u32Stride  = pstVideodst->stVFrame.u32Stride[0];


                s32Ret = HI_MPI_IVE_DMA(&hIveHandle,&stSrcData,&stDstData,&stCtrl,bInstant);       
                if (HI_SUCCESS != s32Ret)                       
                {                       
                        printf("HI_MPI_IVE_DMA failed s32Ret[%#x]\n", s32Ret);               
                }                       
                do{                               
                        s32Ret = HI_MPI_IVE_Query(hIveHandle, &bFinish, HI_TRUE);       
                        if (bFinish == HI_FALSE)                               
                                usleep(100);                       
                } while (bFinish == HI_FALSE);

log 在下面:
ERROR: MMAP ADDR: 0x680aa0c0-0x1680a9940
HI_MPI_IVE_DMA failed s32Ret[0xa01d8003]
[Func]:HI_MPI_IVE_Query [Line]:574 [Info]:Error,IveHandle(-1) must be (-1,268435455)
[Func]:HI_MPI_IVE_Query [Line]:574 [Info]:Error,IveHandle(-1) must be (-1,268435455)
[Func]:HI_MPI_IVE_Query [Line]:574 [Info]:Error,IveHandle(-1) must be (-1,268435455)
[Func]:HI_MPI_IVE_Query [Line]:574 [Info]:Error,IveHandle(-1) must be (-1,268435455)
[Func]:HI_MPI_IVE_Query [Line]:574 [Info]:Error,IveHandle(-1) must be (-1,268435455)
[HI Serial print:uart.c:354:] HiSeral Receive Data = ? len = 3 fs_sel = 1
我来回答
回答6个
时间排序
认可量排序

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2019-11-04 09:15:16
认可0
参数非法,  查一下src/dst的地址

微信用户

1个粉丝

87

问答

0

专栏

3

资料

微信用户 2019-11-04 11:08:12
认可0
本帖最后由 alaode 于 2019-11-4 11:12 编辑

[quote][url=forum.php?mod=redirect&goto=findpost&pid=149207&ptid=76256]zhuangweiye 发表于 2019-11-4 09:15[/url]
参数非法,  查一下src/dst的地址[/quote]

也许是的, 应该是《=,  不知道什么时候不小心少了个等号, 加上就ok了。

想请教zhuang大神, 如果我的视频是2k(2410x1920) 分辨率的 , 我要使用快速的拷贝到新的内存块里面
。现在的想法是多次的ive dma copy(因为只支持1920x1080最大)。  我还有其他的方式嘛?

另外 我也考虑tde了。  但是我的tde 也用来做fb 上的copy 了。

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2019-11-04 11:30:52
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=149218&ptid=76256]alaode 发表于 2019-11-4 11:08[/url]
也许是的, 应该是《=,  不知道什么时候不小心少了个等号, 加上就ok了。

想请教zhuang大神, 如果 ...[/quote]

多次DMA是个选择

另外, 一定要copy吗?

微信用户

1个粉丝

87

问答

0

专栏

3

资料

微信用户 2019-11-04 15:49:43
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=149221&ptid=76256]zhuangweiye 发表于 2019-11-4 11:30[/url]
多次DMA是个选择

另外, 一定要copy吗?[/quote]

原来考虑过不copy 。 因为 我们要保存最后32帧(按一下保存一帧) 视频在ddr里面,目前是32,只能多不能少。然后playback的时候预览。 如果get frame of vpss ,不释放这种方式, 它的depth 都没有32个。我现在采用的是按一下申请一个video buffer,copy 进去,最大申请32个,循环利用。(fpga同样的同样的产品要放64个了。 我可能也要做64 :Q)
如果采用照片的话,jpeg  不知道效果好不好, 肯定没有ddr 里面的好。bmp 太大了。playback 循环的时候 肯定是有问题的。

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2019-11-04 16:03:45
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=149243&ptid=76256]alaode 发表于 2019-11-4 15:49[/url]
原来考虑过不copy 。 因为 我们要保存最后32帧(按一下保存一帧) 视频在ddr里面,目前是32,只能多不能 ...[/quote]

从vpss getframe,然后不release 即可, 只要保证视频缓存池里面有足够的buffer

depth没有32不代表不能拿32帧图像, 只是不能同一时间拿get到
比如depth = 1, 那么当get到一帧图像后, 要等40ms(25frame/s的情况下)后才能再次get到下一帧
如果depth = 2, 那么同一时间点最多能get到两帧

对于楼主的需求, depth设成1, 直接get frame就可以, 取到的frame放到list中去, 等用完了才release, 需要注意的是公共视频缓存池要开足够的buffer, 比如说要保留32帧, 那么就最少多开32+1个对应大小的buffer, 不然会出现vbfail, 导致getframe出错

图像copy要慎之又慎, 太耗性能

微信用户

1个粉丝

87

问答

0

专栏

3

资料

微信用户 2019-11-04 16:07:10
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=149244&ptid=76256]zhuangweiye 发表于 2019-11-4 16:03[/url]
从vpss getframe,然后不release 即可, 只要保证视频缓存池里面有足够的buffer

depth没有32不代表不能 ...[/quote]

理解了。 谢zhuang大神:lol
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

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

Markdown 语法

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

举报类型

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

详细说明

易百纳技术社区