heiheiOo

heiheiOo

0个粉丝

11

问答

0

专栏

0

资料

heiheiOo  发布于  2016-07-29 13:56:48
采纳率 0%
11个问答
7579

IVE_DMA快速拷贝模式的起始坐标如何送入?

 
本帖最后由 heiheiOo 于 2016-7-29 14:17 编辑

需要将源图像的一部分拿出来进行处理,CCL获得起始点、终点坐标后,想用DMA的快速拷贝功能,但是不知道这个坐标该怎么送入,还望指导!

起点(x0,y0),终点(x1,y1),原图IVE_SRC_IMAGE_S src
定义一块:
IVE_DATA_S data;
data. pu8VirAddr=src.pu8VirAddr[0]+y0*src.u16Stride[0]+x0;
data.u16Height=y1-y0+1;
data.u16Width=x1-x0+1;
data.u16Stride=data.u16Width + (u8Align - data.u16Width%u8Align)%u8Align;

data作为源数据,再开辟一块desdata,是这样送到DMA的API吗?

我来回答
回答28个
时间排序
认可量排序

heiheiOo

0个粉丝

11

问答

0

专栏

0

资料

heiheiOo 2016-07-29 14:14:35
认可0
u32PhyAddr[0] 物理地址要怎么偏移? 跟虚拟地址一样吗? 0.0

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-07-29 14:17:58
认可0
可以

不过要注意: 这样设置的前提是楼主默认是8bit的灰度图像

heiheiOo

0个粉丝

11

问答

0

专栏

0

资料

heiheiOo 2016-07-29 14:19:25
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=35107&ptid=12126]zhuangweiye 发表于 2016-7-29 14:17[/url]
可以

不过要注意: 这样设置的前提是楼主默认是8bit的灰度图像[/quote]

恩是的,是灰度图像。

前辈那物理地址也是这样偏移吗?

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-07-29 14:22:53
认可0
本帖最后由 zhuangweiye 于 2016-7-29 14:25 编辑

[quote][url=forum.php?mod=redirect&goto=findpost&pid=35108&ptid=12126]heiheiOo 发表于 2016-7-29 14:19[/url]
恩是的,是灰度图像。

前辈那物理地址也是这样偏移吗?[/quote]

对于IVE来说 虚拟地址是没有用的(但是最好也要写对), 只有物理地址有用
偏移量和虚拟地址是一样的

heiheiOo

0个粉丝

11

问答

0

专栏

0

资料

heiheiOo 2016-07-29 14:45:17
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=35110&ptid=12126]zhuangweiye 发表于 2016-7-29 14:22[/url]
对于IVE来说 虚拟地址是没有用的(但是最好也要写对), 只有物理地址有用
偏移量和虚拟地址是一样的[/quote]

是这样吖……
我只知道他们是映射关系,一个不能访问一个可以访问0.0
感谢前辈指导!

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-07-29 14:51:31
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=35111&ptid=12126]heiheiOo 发表于 2016-7-29 14:45[/url]
是这样吖……
我只知道他们是映射关系,一个不能访问一个可以访问0.0
感谢前辈指导![/quote]

一般情况下 硬件访问是需要物理地址 而我们自己的应用程序访问的都是虚拟地址

搞清楚内存是谁在访问, 就基本能知道需要什么地址了

default

0个粉丝

40

问答

0

专栏

0

资料

default 2016-08-04 01:05:08
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=35107&ptid=12126]zhuangweiye 发表于 2016-7-29 14:17[/url]
可以

不过要注意: 这样设置的前提是楼主默认是8bit的灰度图像[/quote]

你好,我也想使用DMA来快速拷贝图像,想代替memcpy,,但遇到一些问题:
1. HI_IVE_DMA的函数返回时是不是代表拷贝完成?因为我发现第一次调用该Api拷贝1920x1080 消耗20ms,第二次以后就消耗0ms 了,不知道这0ms 是否真的拷贝这么快!!!。我怀疑第一次调用这个函数时,内部有创建任务的操作,导致需要时间。
2·DMA是否不一定比memcpy快?
3.  假如我对1080p 的yuv420p 原始图像进行拷贝,那么怎么填写结构体的宽和高和跨度,我发现拷贝后图像变样了,感觉不对劲,我看宽的范围为32~1920,高范围是1~1080。
3.5 假如我要拷贝不够整数行,譬如,我只拷贝3x 1920+123,此时多出来123个像素,怎么填写宽高,是宽填1920,高填4吗?我想把DMA封装成memcpy,一维拷贝
4.DMA只能用MmzAlloc函数分配的物理地址进行拷贝吗?假如我的物理地址是由公共缓冲池里通过转换得到的来用DMA拷贝可以吗,因为我要组装帧结构体,拿来显示,Mmz分配的组装不了帧结构体,会提示无效帧。

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-08-04 08:16:06
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=35419&ptid=12126]default 发表于 2016-8-4 01:05[/url]
你好,我也想使用DMA来快速拷贝图像,想代替memcpy,,但遇到一些问题:
1. HI_IVE_DMA的函数返回时是不 ...[/quote]

1. 每个IVE api 最后一个参数 HI_BOOL bInstant, 设为HI_TRUE就表示做完返回, 或者用HI_MPI_IVE_Query来查询是否完成

2.如果是大块的数据,那么DMA肯定快

3.为什么会变样呢,要么是DMA参数没添对,要么显示有问题

4.不够整行,那就拷贝整行,然后处理掉多出来的部分或者填上少的部分就好了
 没有必要用DMA来封装一个memcpy,DMA需要知道物理地址,意味着只能使用MMZ

5. DMA只要求知道物理地址,用VB转换的也是可以的

default

0个粉丝

40

问答

0

专栏

0

资料

default 2016-08-04 10:40:17
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=35426&ptid=12126]zhuangweiye 发表于 2016-8-4 08:16[/url]
1. 每个IVE api 最后一个参数 HI_BOOL bInstant, 设为HI_TRUE就表示做完返回, 或者用HI_MPI_IVE_Query来 ...[/quote]

1. 文档说bInstant为“及时返回结果标志”,您意思是说,设置该标志位为HI_TRUE后,HI_MPI_IVE_DMA返回即代表拷贝完成吗?
2. yuv420sp格式的视频数据,含有(w*h*3)>>1这么多数据比w*h大,那么HI_MPI_IVE_DMA里面参数的宽和高分辨设为w和h,那怎么表示uv的数据?

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-08-04 10:50:04
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=35445&ptid=12126]default 发表于 2016-8-4 10:40[/url]
1. 文档说bInstant为“及时返回结果标志”,您意思是说,设置该标志位为HI_TRUE后,HI_MPI_IVE_DMA返回即 ...[/quote]

1.对

2. 关于DMA拷贝YUV的情况, 和DMA没太大关系, 主要看YUV的格式

比如YUV420 semi-planar
那么实际图像分为两块一块为Y, 宽高等于图像的宽和高, 一块是UV,宽等于图像宽,高等于图像高的1/2
意味着要用IVE拷贝这样的图像, 要两次DMA

default

0个粉丝

40

问答

0

专栏

0

资料

default 2016-08-04 13:47:40
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=35446&ptid=12126]zhuangweiye 发表于 2016-8-4 10:50[/url]
1.对

2. 关于DMA拷贝YUV的情况, 和DMA没太大关系, 主要看YUV的格式
[/quote]

是的,已经验证过了,yuv420sp需要分两次进行拷贝,图像正常。
但同时发现,使用HI_MPI_IVE_DMA拷贝大块数据,宽高参数不变时(即假设所有图像为1080p,只是图像内容不一样),第一次调用花费35ms,以后都只花费0ms(此时bInstant已设为HI_TRUE了),说明还是挺快的。但使用HI_MPI_IVE_DMA拷贝小段数据,即DMA参数的高设为1,宽从32到1920变化时(即拷贝一小段最大不超过1920字节的数据,而且数据长度不恒定),每次调用该DMA函数都会需要消耗一定时间,而不是第二次以后都0ms。不知是否为API内部为了设置参数而消耗的时间?

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-08-04 14:40:47
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=35463&ptid=12126]default 发表于 2016-8-4 13:47[/url]
是的,已经验证过了,yuv420sp需要分两次进行拷贝,图像正常。
但同时发现,使用HI_MPI_IVE_DMA拷贝大块 ...[/quote]

没有特别关注过第一次的时间问题

其实在应用程序里面去测量一次IVE算子的时间基本上是无意义的, 因为在应用程序中由于"时间片"的问题本身就不准, 海思的应用程序的时间精度是10ms, 所以0ms也是不准确的

也许, 测量一个循环调用1000次或者10000次IVE算子的时间可能更为准确

beike2001

0个粉丝

10

问答

0

专栏

1

资料

beike2001 2016-11-04 21:27:15
认可0
本帖最后由 beike2001 于 2016-11-4 21:29 编辑

[quote][url=forum.php?mod=redirect&goto=findpost&pid=35426&ptid=12126]zhuangweiye 发表于 2016-8-4 08:16[/url]
1. 每个IVE api 最后一个参数 HI_BOOL bInstant, 设为HI_TRUE就表示做完返回, 或者用HI_MPI_IVE_Query来 ...[/quote]

请问一下:
我现在有两个用户区内存块(用malloc分配的,非物理地址)。
想使用 IVE DMA实现从一块内存搬运数据到另一块内存,可以实现吗?
还是非得通过物理内存?

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-11-05 13:39:25
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=40855&ptid=12126]beike2001 发表于 2016-11-4 21:27[/url]
请问一下:
我现在有两个用户区内存块(用malloc分配的,非物理地址)。
想使用 IVE DMA实现从一块内 ...[/quote]

malloc分配的 ive做不了

harold

0个粉丝

11

问答

0

专栏

3

资料

harold 2016-11-06 18:10:12
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=35446&ptid=12126]zhuangweiye 发表于 2016-8-4 10:50[/url]
1.对

2. 关于DMA拷贝YUV的情况, 和DMA没太大关系, 主要看YUV的格式
[/quote]

DMA可以做4K yuv图像的搬运吗?文档写的只有1080P,是否可以通过1080P增加次数来拷贝4K

devin

0个粉丝

1

问答

0

专栏

0

资料

devin 2017-10-13 17:15:16
认可0
你实现这个功能了吗,我填参数的方法跟你一样,拷贝的图像不对。

zangzq

0个粉丝

2

问答

0

专栏

4

资料

zangzq 2018-03-10 13:51:35
认可0
本帖最后由 zangzq 于 2018-3-10 14:03 编辑

遇到楼主同样的问题!论坛上也没看到具体的解决方法!
能否恳请@zhuangweiye老师能帮我们指导一下,万份感谢!

zangzq

0个粉丝

2

问答

0

专栏

4

资料

zangzq 2018-03-12 12:59:10
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=35426&ptid=12126]zhuangweiye 发表于 2016-8-4 08:16[/url]
1. 每个IVE api 最后一个参数 HI_BOOL bInstant, 设为HI_TRUE就表示做完返回, 或者用HI_MPI_IVE_Query来 ...[/quote]

遇到楼主同样的问题!论坛上也没看到具体的解决方法!
诚恳邀请@zhuangweiye老师,帮我们指导一下具体怎么实现,万份感谢!

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2018-03-12 13:48:41
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=85184&ptid=12126]zangzq 发表于 2018-3-12 12:59[/url]
遇到楼主同样的问题!论坛上也没看到具体的解决方法!
诚恳邀请@zhuangweiye老师,帮我们指导一下具体怎 ...[/quote]

什么问题? 另外开贴, 信息多给点

zangzq

0个粉丝

2

问答

0

专栏

4

资料

zangzq 2018-03-12 14:03:08
认可0
本帖最后由 zangzq 于 2018-3-12 14:07 编辑

[quote][url=forum.php?mod=redirect&goto=findpost&pid=85185&ptid=12126]zhuangweiye 发表于 2018-3-12 13:48[/url]
什么问题? 另外开贴, 信息多给点[/quote]

太好了,谢谢你!
就是灰度图用CCL获得起始点、终点坐标后,想用DMA的抠内存快速拷贝功能,拷出来的图像不对!

                        IVE_HANDLE pIveHandleDMA2;
                        IVE_DMA_CTRL_S pstDmaCtrl2 = { IVE_DMA_MODE_DIRECT_COPY, 0};
                        HI_BOOL bInstantDMA2;
                        bInstantDMA2 = HI_TRUE;
                        IVE_DATA_S Block;
                        Block.u32PhyAddr=HSV1.u32PhyAddr[2] + ((top[k]-1)*720+left[k] );
                        Block.u16Height = bottom[k] - top[k];
                        Block.u16Width  = right[k] - left[k];
                        Block.u16Stride =(floor((right[k] - left[k]) / 16)+1) * 16;
                        HI_MPI_IVE_DMA(&pIveHandleDMA2, &Block,&Roi, &pstDmaCtrl2 ,bInstantDMA2);


加载中···
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

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

Markdown 语法

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

举报类型

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

详细说明

易百纳技术社区