heiheiOo

heiheiOo

0个粉丝

11

问答

0

专栏

0

资料

heiheiOo  发布于  2016-07-15 14:01:15
采纳率 0%
11个问答
9932

小白求问!IVE如何读入图像?有什么API可以使用吗?

 
本帖最后由 heiheiOo 于 2016-7-15 14:02 编辑

IVE的API接口函数参数大多都是IVE_IMAGE_S* pstSRC, 怎么获得呢?

例如说处理本地的视频/图像文件,有什么接口可以读入或者这个pstSRC吖?
我来回答
回答10个
时间排序
认可量排序

heiheiOo

0个粉丝

11

问答

0

专栏

0

资料

heiheiOo 2016-07-15 14:25:49
认可0
自己使用fopen()打开再重新构建一个IVE_IMAGE_S格式来吗?图像的width和height要怎么获得诶?

问题比较具体……

刚刚上手很茫然……

ngswfx

1个粉丝

55

问答

1

专栏

40

资料

ngswfx 2016-07-16 02:16:00
认可0
本帖最后由 ngswfx 于 2016-7-16 02:24 编辑

[quote][url=forum.php?mod=redirect&goto=findpost&pid=34044&ptid=11962]heiheiOo 发表于 2016-7-15 14:25[/url]
自己使用fopen()打开再重新构建一个IVE_IMAGE_S格式来吗?图像的width和height要怎么获得诶?

问题比较 ...[/quote]




3531 里面用的IVE_SRC_INFO_S结构吧,IVE_IMAGE_S是3536的,当然也可能版本不一样(Hi3531_SDK_V2.0.9.0里面我连个影子都没见到),你现在遇到的问题,demo里面肯定有例子才对呀。要么就是读取文件的例子,要么就是VI过来的数据。

/////////////////////////////
看demo,demo的例子是搞开发的重中之重呀

heiheiOo

0个粉丝

11

问答

0

专栏

0

资料

heiheiOo 2016-07-18 09:51:05
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=34090&ptid=11962]ngswfx 发表于 2016-7-16 02:16[/url]
3531 里面用的IVE_SRC_INFO_S结构吧,IVE_IMAGE_S是3536的,当然也可能版本不一样(Hi3531_SDK_V ...[/quote]

mpp/sample里的例子吗?

那些例子用的都是sample的头文件,很多东西都是自定义的,都没有使用系统的头文件……

有使用系统函数的demo?在哪个文件夹吖?我只找得到mpp/sample……

我也好想看看demo……

ngswfx

1个粉丝

55

问答

1

专栏

40

资料

ngswfx 2016-07-18 10:20:55
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=34144&ptid=11962]heiheiOo 发表于 2016-7-18 09:51[/url]
mpp/sample里的例子吗?

那些例子用的都是sample的头文件,很多东西都是自定义的,都没有使用系统的头 ...[/quote]

对,mpp/sample目录下还有个IVE目录,里面有个c源文件

heiheiOo

0个粉丝

11

问答

0

专栏

0

资料

heiheiOo 2016-07-18 16:31:50
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=34148&ptid=11962]ngswfx 发表于 2016-7-18 10:20[/url]
对,mpp/sample目录下还有个IVE目录,里面有个c源文件[/quote]

感谢感谢!Sample我再看看。

另外,对于IVE_IMAGE_S这个数据类型,我想知道要怎么访问它的像素数据吖?图像数据是存在PhyAddr里面吗?那个VirAddr又是什么?不太理解……

我现在在用图像的裸数据(一维灰度值)在重构这个数据类型,因为我不知道要怎么把本地图片直接load进来变成这个数据类型,但是里面的PhyAddr不能直接访问……

求指导一下……

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-07-19 08:39:57
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=34199&ptid=11962]heiheiOo 发表于 2016-7-18 16:31[/url]
感谢感谢!Sample我再看看。

另外,对于IVE_IMAGE_S这个数据类型,我想知道要怎么访问它的像素数据吖 ...[/quote]

物理地址是IVE使用的地址, 应用程序使用虚拟地址

首先可以用HI_MPI_SYS_MmzAlloc_Cached()来分配 MMZ的内存, 这个函数分配时虚拟地址和物理地址都有
或者直接从视频缓存池中分配HI_MPI_VB_GetBlock(), 不过这个要经过几个函数才能得到物理地址和虚拟地址(具体步骤可以参考sample)

有了虚拟地址应用程序就可以按格式填数据了
楼主是灰度图像,也就是只有Y值,那么

IVE_IMAGE_S stImg;
stImg.enType        = IVE_IMAGE_TYPE_U8C1;
stImg.u16Width     = 图像宽度
stImg.u16Height    = 图像高度
stImg.u16Stride[0] = 图像宽度向上16或64对齐(这个要看IVE算子的要求,当然高和宽可能也有对齐要求)
HI_MPI_SYS_MmzAlloc_Cached(&stImg.u32PhyAddr[0], (HI_VOID *)&stImg.pu8VirAddr[0],"myImg", HI_NULL, stImg.u16Stride[0] * stImg.u16Height);

而后就是把图像数据按行copy到stImg.pu8VirAddr[0]所指的内存里了, 这个做图像处理的就不用多说了吧

这样stImg就可以送到IVE去了

用完别忘了用HI_MPI_SYS_MmzFree()释放MMZ内存

heiheiOo

0个粉丝

11

问答

0

专栏

0

资料

heiheiOo 2016-07-19 14:44:59
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=34231&ptid=11962]zhuangweiye 发表于 2016-7-19 08:39[/url]
物理地址是IVE使用的地址, 应用程序使用虚拟地址

首先可以用HI_MPI_SYS_MmzAlloc_Cached()来分配 MM ...[/quote]

感谢感谢!

然后现在读写源数据应该是没问题了,就是IVE计算出来之后的结果不知道要怎么去访问,现在的现象也比较奇怪,详情如下:
1.        s32Ret = HI_MPI_SYS_MmzAlloc_Cached(&Srcimg.u32PhyAddr[0], (HI_VOID**)&Srcimg.pu8VirAddr[0], "User", HI_NULL, Srcimg.u16Stride[0] * Srcimg.u16Height);

        s32Ret = HI_MPI_SYS_MmzAlloc_Cached(&Srcimg2.u32PhyAddr[0], (HI_VOID**)&Srcimg2.pu8VirAddr[0], "User1", HI_NULL, Srcimg2.u16Stride[0] * Srcimg2.u16Height);

        s32Ret = HI_MPI_SYS_MmzAlloc_Cached(&Desimg.u32PhyAddr[0], (HI_VOID**)&Desimg.pu8VirAddr[0], "User2", HI_NULL, Desimg.u16Stride[0] * Desimg.u16Height);

创建了两个源图像,和一个目标图像,源图像的数据如下写入
FILE* fp = fopen(filename, "rb");
        int count = 0;
        while (1 == fscanf(fp, "%u", &temp))
        {
                *(Srcimg.pu8VirAddr[0]+ count) = temp;
                count++;
        }

运行减法算子s32Ret = HI_MPI_IVE_Sub(IveHandle, &Srcimg, &Srcimg2, &Desimg, &control, bInstant);
得到的Desimg无法使用*(Desimg.pu8VirAddr[0])访问,提示Segmentation fault;
计算后调用HI_MPI_SYS_MmzFlushCache(Desimg.u32PhyAddr[0], Desimg.pu8VirAddr[0], W*H);也是如此

2、注释掉减法算子s32Ret = HI_MPI_IVE_Sub(IveHandle, &Srcimg, &Srcimg2, &Desimg, &control, bInstant);  则可以使用 *(Desimg.pu8VirAddr[0])访问,且结果正确。

我猜测是IVE运算之后结果存在了一个无法访问的地方,对HI_MPI_SYS_MmzFlushCache()函数理解也不是很深,还望指导!

polestar

0个粉丝

2

问答

0

专栏

0

资料

polestar 2016-08-15 16:52:17
认可0
HI_MPI_SYS_MflushCache
【注意】
当 cache 里的数据为最新数据时,为了保证不能直接访问 cache 的硬件(如 ive)在访
问内存时能够得到正确的数据,此时需要先调用此接口将cache 里的内容更新到
内存,这样,当硬件访问内存时,保证了数据的一致性和正确性。

此接口应与 HI_MPI_SYS_MmapCache接口配套使用。

polestar

0个粉丝

2

问答

0

专栏

0

资料

polestar 2016-08-15 16:57:03
认可0
sample\common下sample_comm_ive.c中有读写文件的函数例子。SAMPLE_COMM_IVE_ReadFile 和 SAMPLE_COMM_IVE_WriteFile

polestar

0个粉丝

2

问答

0

专栏

0

资料

polestar 2016-08-15 18:01:31
认可0
本帖最后由 polestar 于 2016-8-15 18:04 编辑

sample_ive_sobel_with_cached_mem.c中的SAMPLE_IVE_SobelProc函数中的过程是
1.读取文件到src->pu8VirAddr,
2.先调用HI_MPI_SYS_MmzFlushCache函数  (note:pu8VirAddr->>u32PhyAddr,即 cache到物理内存并使cache里的内容无效),
3.再调用IVE算子,

4.最后才对dst->pu8VirAddr中的数据写入到本地文件。
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

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

Markdown 语法

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

举报类型

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

详细说明

易百纳技术社区