heiheiOo

heiheiOo

0个粉丝

11

问答

0

专栏

0

资料

heiheiOo  发布于  2016-09-12 10:52:10
采纳率 0%
11个问答
10056

请问一下原始图像帧VIDEO_FRAME_S类型的源数据要怎么访问?

 
本帖最后由 heiheiOo 于 2016-9-12 10:53 编辑

问题在于它的虚拟地址 HI_VOID *pVirAddr[3];

是 void* 类型,

VIDEO_FRAME_S src;

然后使用printf(" %d ", *((HI_U8*)src.pVirAddr[0])); 会有segmentation fault.

我是想使用DMA将 VIDEO_FRAME_S 数据复制到IVE_IMAGE_S 里面,DMA完成之后想打印几个数值进行比对验证,还望各位前辈指导一下!
我来回答
回答24个
时间排序
认可量排序

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-09-12 11:41:53
认可0
用HI_MPI_SYS_Munmap物理地址 成 虚拟地址来用

结构中的虚拟地址是不能直接用

goodman

2个粉丝

30

问答

18

专栏

17

资料

goodman 2016-09-12 13:37:25
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=37615&ptid=12621]zhuangweiye 发表于 2016-9-12 11:41[/url]
用HI_MPI_SYS_Munmap物理地址 成 虚拟地址来用

结构中的虚拟地址是不能直接用[/quote]

我来纠正下,zhuangweiye大侠笔误,HI_MPI_SYS_Mmap 是映射,HI_MPI_SYS_Munmap是反映射

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-09-12 14:14:23
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=37626&ptid=12621]goodman 发表于 2016-9-12 13:37[/url]
我来纠正下,zhuangweiye大侠笔误,HI_MPI_SYS_Mmap 是映射,HI_MPI_SYS_Munmap是反映射[/quote]

不好意思, ctrl + c , ctrl+v 害人

wahuqeir

0个粉丝

1

问答

0

专栏

1

资料

wahuqeir 2016-09-12 14:53:16
认可0
在SDK的mpp目录下有tools目录,里面有vi_dump,vpss_dump等源码,可以参照一下

heiheiOo

0个粉丝

11

问答

0

专栏

0

资料

heiheiOo 2016-09-12 15:44:34
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=37615&ptid=12621]zhuangweiye 发表于 2016-9-12 11:41[/url]
用HI_MPI_SYS_Munmap物理地址 成 虚拟地址来用

结构中的虚拟地址是不能直接用[/quote]

前辈有个疑惑是,对于IVE_IMAGE_S中的HI_U8*的虚拟地址,我可以使用*(pu8VirAddr)来访问,但是对于这次这个HI_VOID* 的虚拟地址,就不能类型转换成HI_U8*来访问,请问这个是什么原因呢?

heiheiOo

0个粉丝

11

问答

0

专栏

0

资料

heiheiOo 2016-09-12 15:46:08
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=37626&ptid=12621]goodman 发表于 2016-9-12 13:37[/url]
我来纠正下,zhuangweiye大侠笔误,HI_MPI_SYS_Mmap 是映射,HI_MPI_SYS_Munmap是反映射[/quote]

哈哈哈,眼神好!

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-09-12 16:50:20
认可0
本帖最后由 zhuangweiye 于 2016-9-12 16:52 编辑

[quote][url=forum.php?mod=redirect&goto=findpost&pid=37638&ptid=12621]heiheiOo 发表于 2016-9-12 15:44[/url]
前辈有个疑惑是,对于IVE_IMAGE_S中的HI_U8*的虚拟地址,我可以使用*(pu8VirAddr)来访问,但是对于这次 ...[/quote]

这个和指针类型无关

应用程序使用的地址是虚拟地址, 而海思的硬件模块在处理数据时是使用物理地址, 应用程序要访问这些地方的数据时就必须知道该物理地址相对应的虚拟地址

这里有个小问题会让人迷惑, 不是VIDEO_FRAME_S结构里面有虚拟地址吗?
很不幸,这个虚拟地址通常是不能用的, 需要用户自己调用HI_MPI_SYS_Mmap从结构中的物理地址映射得到

来个例子(这里只是处理Y,如果要处理UV, 那么就要处理数组下标为1/2的成员了, 具体要看图像格式了)
        HI_U32 u32Height, u32Stride;
        VIDEO_FRAME_INFO_S stFrameInfo;
        VIDEO_FRAME_INFO_S* pstFrameInfo = &stFrameInfo

        HI_MPI_VI_GetFrame(ViChn, pstFrameInfo, 60);

        u32Height = pstFrameInfo->stVFrame.u32Height;
        u32Stride = pstFrameInfo->stVFrame.u32Stride[0];
        pVirAddr= (unsigned char *)HI_MPI_SYS_Mmap((unsigned int)pstFrameInfo->stVFrame.u32PhyAddr[0], u32Stride*u32Height);
        //接下来就可以用pVirAddr
        ...
        ...
        //用完释放掉
        HI_MPI_SYS_Munmap((void*)pVirAddr, u32Stride*u32Height);

heiheiOo

0个粉丝

11

问答

0

专栏

0

资料

heiheiOo 2016-09-13 10:47:05
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=37655&ptid=12621]zhuangweiye 发表于 2016-9-12 16:50[/url]
这个和指针类型无关

应用程序使用的地址是虚拟地址, 而海思的硬件模块在处理数据时是使用物理地址,  ...[/quote]

:loveliness:谢谢前辈指导!受益匪浅

fb362203

0个粉丝

24

问答

0

专栏

0

资料

fb362203 2016-10-12 14:46:06
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=37655&ptid=12621]zhuangweiye 发表于 2016-9-12 16:50[/url]
这个和指针类型无关

应用程序使用的地址是虚拟地址, 而海思的硬件模块在处理数据时是使用物理地址,  ...[/quote]

1/2指的是?能具体些么?

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-10-12 15:18:30
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=39250&ptid=12621]fb362203 发表于 2016-10-12 14:46[/url]
1/2指的是?能具体些么?[/quote]


就是 u32PhyAddr[1], u32PhyAddr[2] 以及 u32Stride[1], u32Stride[2]
下标为0的对应 Y, 下标1/2对应UV(要根据图像格式来确定)

fb362203

0个粉丝

24

问答

0

专栏

0

资料

fb362203 2016-10-12 16:05:12
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=39253&ptid=12621]zhuangweiye 发表于 2016-10-12 15:18[/url]
就是 u32PhyAddr[1], u32PhyAddr[2] 以及 u32Stride[1], u32Stride[2]
下标为0的对应 Y, 下标1/2对应U ...[/quote]

哦哦,那如果设置成yuv422的话,这些参数怎么设置?缓存大小又变成了什么呢?

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-10-12 16:07:29
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=39259&ptid=12621]fb362203 发表于 2016-10-12 16:05[/url]
哦哦,那如果设置成yuv422的话,这些参数怎么设置?缓存大小又变成了什么呢?[/quote]

yuv422 ? planar 还是 semi-planar ?

fb362203

0个粉丝

24

问答

0

专栏

0

资料

fb362203 2016-10-12 16:52:47
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=39260&ptid=12621]zhuangweiye 发表于 2016-10-12 16:07[/url]
yuv422 ? planar 还是 semi-planar ?[/quote]

yuv422.之前本来是yuv420,现在改为yuv422,需要改变些什么参数?好像缓存大小变了,变成什么了?还有其他哪里需要变化么?能举个例子什么的?

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-10-12 17:05:58
认可0
本帖最后由 zhuangweiye 于 2016-10-12 17:07 编辑

[quote][url=forum.php?mod=redirect&goto=findpost&pid=39270&ptid=12621]fb362203 发表于 2016-10-12 16:52[/url]
yuv422.之前本来是yuv420,现在改为yuv422,需要改变些什么参数?好像缓存大小变了,变成什么了?还有其 ...[/quote]

不管yuv420还是yuv422 都有planar还是semi-planar的区别, 当然还有合在一起的情况(具体区别建议问一下度娘)

简单的说planar就是Y/U/V各自一块内存,共三块,要用到u32PhyAddr[0/1/2]分别代表Y/Y/U起始地址, u32Stride[0/1/2]代表Y/U/V的stride

semi-planar就是Y一块, UV一块,共两块要用到u32PhyAddr[0/1]分别代表Y/UV起始地址, u32Stride[0/1]代表Y/UV的stride

关于大小假设图像的宽度是W,高是H, 那么
yuv422 Y的宽高为 W和 H, UV 的宽高为 W/2和H
yuv420 Y的宽高为 W和 H, UV 的宽高为 W/2和H/2

fb362203

0个粉丝

24

问答

0

专栏

0

资料

fb362203 2016-10-12 17:14:56
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=39272&ptid=12621]zhuangweiye 发表于 2016-10-12 17:05[/url]
不管yuv420还是yuv422 都有planar还是semi-planar的区别, 当然还有合在一起的情况(具体区别建议问一下 ...[/quote]

我这边出来semi-planar420数据,然后要给到处理planer420的函数中,不知道该怎么转,或者我把我这边解码的直接改掉,也不知道怎么改

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-10-12 17:23:50
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=39275&ptid=12621]fb362203 发表于 2016-10-12 17:14[/url]
我这边出来semi-planar420数据,然后要给到处理planer420的函数中,不知道该怎么转,或者我把我这边解码 ...[/quote]

其实这个问题是问题也不是问题

如果有源码都不是问题, 没源码就只能中间加一层, 不过这个真是浪费资源和性能

两者的区别仅仅在存放格式不同而已, Y都一样, UV不一样, 如果可以改后面的处理函数应该是最方便了, 只要修改读取数据的部分, 修改一下起始地址/间隔/stride就好了

建议楼主先补一下YUV格式再回头看这个问题应该就没难度了

fb362203

0个粉丝

24

问答

0

专栏

0

资料

fb362203 2016-10-12 17:30:33
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=39279&ptid=12621]zhuangweiye 发表于 2016-10-12 17:23[/url]
其实这个问题是问题也不是问题

如果有源码都不是问题, 没源码就只能中间加一层, 不过这个真是浪费资源 ...[/quote]

好的,谢谢

fb362203

0个粉丝

24

问答

0

专栏

0

资料

fb362203 2016-10-12 20:48:21
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=39279&ptid=12621]zhuangweiye 发表于 2016-10-12 17:23[/url]
其实这个问题是问题也不是问题

如果有源码都不是问题, 没源码就只能中间加一层, 不过这个真是浪费资源 ...[/quote]

另外,想请教下,我初始化系统后,没有绑定vpss和vo,直接用getimage获取了视频图像,发现获取出来的应该是semiplanner420,这个我没有设置它是什么格式的啊?怎么不会是其他格式呢?

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-10-13 08:09:23
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=39290&ptid=12621]fb362203 发表于 2016-10-12 20:48[/url]
另外,想请教下,我初始化系统后,没有绑定vpss和vo,直接用getimage获取了视频图像,发现获取出来的应该 ...[/quote]


VDEC输出格式默认是yuv420 semi-planar, 其中yuv420是大多数编解码标准使用的数据源格式(当然解码后也是这个格式), 至于semi-planar是海思的选择了

fb362203

0个粉丝

24

问答

0

专栏

0

资料

fb362203 2016-10-13 13:57:08
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=39301&ptid=12621]zhuangweiye 发表于 2016-10-13 08:09[/url]
VDEC输出格式默认是yuv420 semi-planar, 其中yuv420是大多数编解码标准使用的数据源格式(当然解码后也 ...[/quote]

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

Markdown 语法

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

Markdown 语法

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

举报类型

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

详细说明

易百纳技术社区