StarCraftII

StarCraftII

1个粉丝

11

问答

0

专栏

0

资料

StarCraftII  发布于  2015-10-02 12:43:27
采纳率 0%
11个问答
7942

【已解决】Hi3518, 想要视频编码,同时还进行自己的图像处理, HI_MPI_VPSS_UserGe...

 
本帖最后由 goodman 于 2016-9-12 13:43 编辑

Hi3518, 想要视频编码前还进行自己的图像处理, HI_MPI_VPSS_UserGetFrame出错。

我的思路,在图像进行H.264编码前,先对其进行处理,就是取出YUV进行判断,不处理。
在修改sample\venc的例子代码中的sample_comm_venc.c中的函数SAMPLE_COMM_VENC_GetVencStreamProc()的代码,我在while()循环中,一开始就先调用HI_MPI_VPSS_UserGetFrame()取得YUV数据。当然,在设置VPSS模式和Dept的时候都按照文档设置了。
但是,用这种办法无法取得YUV数据, 错误提示:0x0088000D, 没有分配buf池。

请问用这种思路有误不? 大家的思路是什么?
谢谢
我来回答
回答10个
时间排序
认可量排序

StarCraftII

1个粉丝

11

问答

0

专栏

0

资料

StarCraftII 2015-10-05 22:52:28
认可0
自己解决, 在初次HI_MPI_VPSS_UserGetFrame()的时候循环一下, 前面是可能有一两次不能成功

andy_mqy

1个粉丝

26

问答

0

专栏

0

资料

andy_mqy 2015-10-09 15:28:02
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=20741&ptid=8895]StarCraftII 发表于 2015-10-5 22:52[/url]
自己解决, 在初次HI_MPI_VPSS_UserGetFrame()的时候循环一下, 前面是可能有一两次不能成功[/quote]

请教楼主,"在初次HI_MPI_VPSS_UserGetFrame()的时候循环一下"是什么意识?从物理地址u32PhyAddr[3]直接获取的就是YUV数据吗?

StarCraftII

1个粉丝

11

问答

0

专栏

0

资料

StarCraftII 2015-10-10 16:26:25
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=20840&ptid=8895]andy_mqy 发表于 2015-10-9 15:28[/url]
请教楼主,"在初次HI_MPI_VPSS_UserGetFrame()的时候循环一下"是什么意识?从物理地址u32PhyAddr[3]直接 ...[/quote]

就是tool下那个dump_vpss的写法,第一次HI_MPI_VPSS_UserGetFrame()的时候循环判断返回值。

YUV数据3个分量,你要找的话对应的是u32PhyAddr[0]和1,2,你的u32PhyAddr[3]用来干什么?

StarCraftII

1个粉丝

11

问答

0

专栏

0

资料

StarCraftII 2015-10-10 16:29:24
认可0
事实上Hi3518的默认的YUV数据格式是半平面格式, YYYY....VUVU....这样保存的,u32PhyAddr[0]保存Y分量,VU就保存在u32PhyAddr[1], 2都不用了

andy_mqy

1个粉丝

26

问答

0

专栏

0

资料

andy_mqy 2015-10-12 14:28:27
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=20887&ptid=8895]StarCraftII 发表于 2015-10-10 16:26[/url]
就是tool下那个dump_vpss的写法,第一次HI_MPI_VPSS_UserGetFrame()的时候循环判断返回值。

YUV数据3 ...[/quote]

谢谢楼主回复。我的意识是直接调用HI_MPI_VPSS_UserGetFrame()是否就可以按返回图像帧信息的物理地址中读取到YUV的数据。没调用一次可以获取一帧图像的数据对吧。没理解楼主说的初次使用要循环一下,和dump_vpss的写法指的什么。

andy_mqy

1个粉丝

26

问答

0

专栏

0

资料

andy_mqy 2015-10-12 14:43:26
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=20889&ptid=8895]StarCraftII 发表于 2015-10-10 16:29[/url]
事实上Hi3518的默认的YUV数据格式是半平面格式, YYYY....VUVU....这样保存的,u32PhyAddr[0]保存Y分量,VU ...[/quote]

按数据手册上返回u32PhyAddr[0]-u32PhyAddr[3]是获取到图像的物理地址,是否可以通过访问地址来获取YUV数据,另外楼主说默认的图像空间制式半平面格式PIXEL_FORMAT_YUV_SEMIPLANAR_420,就是从物理地址开始先是Y分类,字节按像素高和宽成绩,之后UV...UV...交错存储,UV字节数量和应该是像素高和宽成绩/4对吧.请楼主指点,谢谢。

andy_mqy

1个粉丝

26

问答

0

专栏

0

资料

andy_mqy 2015-10-12 16:41:58
认可0
找到了YUV420 semiPlanar的存储格式,如下图,楼主是否从HI_MPI_VPSS_UserGetFrame函数返回的物理地址中可以读取的即是YUV数据呢?我现在希望通过VPSS模块的这个函数读取原始图像数据。

StarCraftII

1个粉丝

11

问答

0

专栏

0

资料

StarCraftII 2015-10-12 17:39:32
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=20929&ptid=8895]andy_mqy 发表于 2015-10-12 16:41[/url]
找到了YUV420 semiPlanar的存储格式,如下图,楼主是否从HI_MPI_VPSS_UserGetFrame函数返回的物理地址中可 ...[/quote]

UserGetFrame后, 获取的FRAME_INFO里面的地址用HI_MPI_SYS_Mmap()转换才能获得YUV数据的地址。海思的PIXEL_FORMAT_YUV_SEMIPLANAR_420是VU而不是UV. Y为宽*高,UV是Y的一半
在SDK例子中,有个tools目录,下面的vpss_dump里面可以借鉴

andy_mqy

1个粉丝

26

问答

0

专栏

0

资料

andy_mqy 2015-10-13 13:55:29
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=20934&ptid=8895]StarCraftII 发表于 2015-10-12 17:39[/url]
UserGetFrame后, 获取的FRAME_INFO里面的地址用HI_MPI_SYS_Mmap()转换才能获得YUV数据的地址。海思的PIXE ...[/quote]

哦,这样。我用的Hi3531,怪不得一直没看到楼主说的Tools里面的VPSS_DUMP的例程。谢谢

jl3276

0个粉丝

8

问答

0

专栏

0

资料

jl3276 2016-09-12 11:08:02
认可0
调用HI_MPI_VPSS_UserGetFrame之前需要先设置VPSS通道工作模式为UESR,并且队列深度不为零才可以~不知道楼主是不是没有满足这两点或者队列深度不够导致的呢~
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

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

Markdown 语法

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

举报类型

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

详细说明

易百纳技术社区