love_lin

love_lin

1个粉丝

22

问答

0

专栏

1

资料

love_lin  发布于  2016-07-12 10:07:55
采纳率 0%
22个问答
9108

vo的特殊输出显示

 
各位大神,我现在需要在显示器上,一半屏幕显示视频流,一半显示一张图片,大致效果图如下,请问如何实现。。。
我来回答
回答19个
时间排序
认可量排序

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-07-12 10:35:20
认可0
问题:静态图片是什么格式的?视频流是几路?

假定:图片是JPEG的,视频只有一路, Vo设置为1080P@60

那么创建两个vo channel 0和1
一路    VDEC(JPEG)--〉VPSS --〉Vo chnnel 0
一路    VI --〉VPSS --〉Vo channel 1

两个Vo的显示区域设为需要的位置

Vo channel 0 :
                struChnAttr.stRect.s32X = 0;
                struChnAttr.stRect.s32Y = 0;
                struChnAttr.stRect.u32Width = 960;
                struChnAttr.stRect.u32Width = 1080;
Vo channel 1 :
                struChnAttr.stRect.s32X = 960;
                struChnAttr.stRect.s32Y = 0;
                struChnAttr.stRect.u32Width = 960;
                struChnAttr.stRect.u32Width = 1080;

即可

love_lin

1个粉丝

22

问答

0

专栏

1

资料

love_lin 2016-07-12 12:01:33
认可0
首先,谢谢您的帮助。
我按照您配置,对vo的两个通道进行的属性配置,只是我按如下方式绑定的。
一路:vi-->vpss chn 0 -->vo chn 0
一路:vi-->vpss chn 1 -->vo chn 1
HDMI输出显示蓝屏,我用的Hi3516A.
请问问题出在哪呢?

love_lin

1个粉丝

22

问答

0

专栏

1

资料

love_lin 2016-07-12 12:02:45
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=33771&ptid=11912]zhuangweiye 发表于 2016-7-12 10:35[/url]
问题:静态图片是什么格式的?视频流是几路?

假定:图片是JPEG的,视频只有一路, Vo设置为1080P@60
[/quote]


首先,谢谢您的帮助。
我按照您配置,对vo的两个通道进行的属性配置,只是我按如下方式绑定的。
一路:vi-->vpss chn 0 -->vo chn 0
一路:vi-->vpss chn 1 -->vo chn 1
HDMI输出显示蓝屏,我用的Hi3516A.
请问问题出在哪呢?

goodman

2个粉丝

30

问答

18

专栏

17

资料

goodman 2016-07-12 14:39:12
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=33778&ptid=11912]love_lin 发表于 2016-7-12 12:02[/url]
首先,谢谢您的帮助。
我按照您配置,对vo的两个通道进行的属性配置,只是我按如下方式绑定的。
一路 ...[/quote]

[quote]一路:vi-->vpss chn 0 -->vo chn 0
一路:vi-->vpss chn 1 -->vo chn 1 [/quote]

这样的话2路不都显示视频了?
zhuangweiye兄讲的很明确了。还有如果你有界面程序的话可以在GUI上显示图片

love_lin

1个粉丝

22

问答

0

专栏

1

资料

love_lin 2016-07-12 15:18:47
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=33789&ptid=11912]goodman 发表于 2016-7-12 14:39[/url]
这样的话2路不都显示视频了?
zhuangweiye兄讲的很明确了。还有如果你有界面程序的话可以在GUI上显 ...[/quote]

我明白您的意思;
但是我还有好几个问题没明白,请您指导下!!
1.即使我只有使能一个vo chn,视频层的画布大小设置为:
stLayerAttr.stImageSize.u32Width  = stLayerAttr.stDispRect.u32Width = 1920;
stLayerAttr.stImageSize.u32Height = stLayerAttr.stDispRect.u32Height = 1080;
而vo chn通道内图像属性设置为:
stChnAttr.stRect.s32X       = 0;
stChnAttr.stRect.s32Y       = 180;
stChnAttr.stRect.u32Width   = 1920;
stChnAttr.stRect.u32Height  = 900;
这样设置的显示结果是:画面的长宽能正常显示为1920和900,但起点还是在左上角。Y坐标感觉无效??
还有如下图不知道怎么理解??
2:如果我同时使能vo chn 0和1,如果我把vo chn 0 -->vpss chn 0 ,而vo chn 1不做任何绑定,那我的vo chn 0是不是应该会正常显示视频,结果没有任何输出,不知为何?、我的是海思3516A的板子,我在文档上没有看到任何关于vdec的接口,sample目录下也没有例子??难道3516A不支持解码吗?

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-07-12 15:47:10
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=33794&ptid=11912]love_lin 发表于 2016-7-12 15:18[/url]
我明白您的意思;
但是我还有好几个问题没明白,请您指导下!!
1.即使我只有使能一个vo chn,视频层 ...[/quote]

原来楼主使用的是3516A

这个芯片是IPC类的,所以没有解码器,而且VO, VPSS的功能和DVR/NVR类芯片差别不小

首先 VO(被定义为SD,虽然支持1080P@60)的硬件支持一路,软件支持32路,这个怎么理解呢?简单的说 Vi--〉Vpss --〉Vo只能支持一路(代表硬件)
要用两路vo channel的话,可能要用Vi--〉Vo(代表软件)来试一下了

关于vo 位置的问题, 楼主测试的情况是起始点不起作用是不是和直通模式有关

有一点要注意关于VO分配内存的问题,如果仔细看sample应该会注意到
文档是这么说的:
如果不满足直通模式的条件,由于VO 默认不分配内存,因此需要在使能视频层
之前调用HI_MPI_VO_SetDispBufLen 接口设置缓冲长度来确定分配内存,否则
VO 将不会输出视频显示。

楼主可以再测试一下

love_lin

1个粉丝

22

问答

0

专栏

1

资料

love_lin 2016-07-12 16:36:50
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=33797&ptid=11912]zhuangweiye 发表于 2016-7-12 15:47[/url]
原来楼主使用的是3516A

这个芯片是IPC类的,所以没有解码器,而且VO, VPSS的功能和DVR/NVR类芯片差别 ...[/quote]

谢谢您的耐心指导!!
我在这样一个测试:
我同时使能VO chn 0和1通道,把vpss 0-->vo chn 0,而另外vo chn 1通道不做任何绑定,也不做任何操作,按原理来讲,他们两个通道应该互补影响,但是vo chn 0也没有任何输出;如果把vo chn 1不使能,则vo chn 0就正常输出??不知道这个现象怎么解释?而且我把vo chn 0的优先级设为最高了。如果这个问题没解决的话,去操作vi -->vo chn 1也不能同时输出吧!!

love_lin

1个粉丝

22

问答

0

专栏

1

资料

love_lin 2016-07-12 17:53:53
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=33797&ptid=11912]zhuangweiye 发表于 2016-7-12 15:47[/url]
原来楼主使用的是3516A

这个芯片是IPC类的,所以没有解码器,而且VO, VPSS的功能和DVR/NVR类芯片差别 ...[/quote]

@zhuangweiye,根据您的指导,我添加了HI_MPI_VO_SetDispBufLen接口,目前可以正常显示两个视频流了,但是,我现在从vpss get frame,然后通过接口HI_MPI_VO_SendFrame()发送到vo chn 1,调用的返回值没有错误,但是就是不显示图片,这是为什么??

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-07-13 08:05:30
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=33819&ptid=11912]love_lin 发表于 2016-7-12 17:53[/url]
@zhuangweiye,根据您的指导,我添加了HI_MPI_VO_SetDispBufLen接口,目前可以正常显示两个视频流了,但 ...[/quote]


楼主只能试一下发到vo chn0去看看了

先要确定从vpss get frame是正确的

love_lin

1个粉丝

22

问答

0

专栏

1

资料

love_lin 2016-07-13 13:41:08
认可0
本帖最后由 love_lin 于 2016-7-13 13:42 编辑

[quote][url=forum.php?mod=redirect&goto=findpost&pid=33837&ptid=11912]zhuangweiye 发表于 2016-7-13 08:05[/url]
楼主只能试一下发到vo chn0去看看了

先要确定从vpss get frame是正确的[/quote]

之前是由于在vpss设置宽度和高度有问题,所以获取不到frame,现在可以了。
不过现在又遇到了另外一个问题:
在获取到类型为VIDEO_FRAME_INFO_S 的数据时,我对其宽和高设置有效,但设置了四边的偏移量无效,我的意图的想取中间的图片数据,这样发送到vo只显示我所设置的区域?不知道您对两个结构体了解的怎样,能帮忙解释下吗?
[code]VIDEO_FRAME_INFO_S
【说明】
定义视频图像帧信息结构体。
【定义】
typedef struct hiVIDEO_FRAME_INFO_S
{
VIDEO_FRAME_S stVFrame;
HI_U32 u32PoolId;
}VIDEO_FRAME_INFO_S;

VIDEO_FRAME_S
【说明】
定义视频原始图像帧结构。
【定义】
typedef struct hiVIDEO_FRAME_S
{
HI_U32 u32Width;
HI_U32 u32Height;
VIDEO_FIELD_E u32Field;
PIXEL_FORMAT_E enPixelFormat;
VIDEO_FORMAT_E enVideoFormat;
COMPRESS_MODE_E enCompressMode;
HI_U32 u32PhyAddr[3];
HI_VOID *pVirAddr[3];
HI_U32 u32Stride[3];
HI_U32 u32HeaderPhyAddr[3];
HI_VOID *pHeaderVirAddr[3];
HI_U32 u32HeaderStride[3];
HI_U16 u16OffsetTop; /* top offset of show area */
HI_U16 u16OffsetBottom; /* bottom offset of show area */
HI_U16 u16OffsetLeft; /* left offset of show area */
HI_U16 u16OffsetRight; /* right offset of show area */
HI_U64 u64pts;
HI_U32 u32TimeRef;
HI_U32 u32PrivateData;
}VIDEO_FRAME_S;
【成员】
成员名称 描述
u32Width 图像宽度。
u32Height 图像高度。
u32Field 帧场模式。
HiMPP IPC V2.0 媒体处理软件
开发参考 2 系统控制
文档版本 07 (2015-10-20) 海思专有和保密信息
版权所有 © 深圳市海思半导体有限公司 2-67
成员名称 描述
enPixelFormat 视频图像像素格式。
enVideoFormat 视频图像格式。
enCompressMode 视频压缩模式。
u32PhyAddr 物理地址。
pVirAddr 虚拟地址。
u32Stride 图像跨距。
u16OffsetTop 图像顶部剪裁宽度。
u16OffsetBottom 图像底部剪裁宽度。
u16OffsetLeft 图像左侧剪裁宽度。
u16OffsetRight 图像右侧剪裁宽度。
u64pts 图像时间戳。
u32TimeRef 图像帧序列号。
u32PrivateData 私有数据。[/code]

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-07-13 16:20:51
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=33872&ptid=11912]love_lin 发表于 2016-7-13 13:41[/url]
之前是由于在vpss设置宽度和高度有问题,所以获取不到frame,现在可以了。
不过现在又遇到了另外一个 ...[/quote]

这个问题我没做过, 不是很清楚结构中那几个offsetXXX是否起作用

要显示图片的一部分,可以试试下面的方法:

VIDEO_FRAME_INFO_S stInfo,stInfoCopy;
得到stInfo后复制一份到stInfoCopy, 修改复制的stInfoCopy.stVFrame.u32PhyAddr[3]和stInfoCopy.stVFrame.pVirAddr[3](由于硬件应该使用物理地址,这个虚拟地址也许不用改)
修改方法就是看要显示的图片的区域了
比如:要显示图片区域的起始点为(x,y)图片格式是YUV422semiplanar,那么Y的起始地址对应为
stInfoCopy.stVFrame.u32PhyAddr[0] =stInfo.stVFrame. u32PhyAddr[0] + y * stInfoCopy.stVFrame.u32Stride[0] + x
相应再修改UV的起始地址,然后再修改宽高为想要的大小,然后把修改的结构发去显示,而原来的结构用于release

love_lin

1个粉丝

22

问答

0

专栏

1

资料

love_lin 2016-07-13 18:38:51
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=33903&ptid=11912]zhuangweiye 发表于 2016-7-13 16:20[/url]
这个问题我没做过, 不是很清楚结构中那几个offsetXXX是否起作用

要显示图片的一部分,可以试试下面的方 ...[/quote]

谢谢您的耐心指导。
我试了您的方法,但是如果去操作物理地址,程序会卡死。貌似不能那么操作。
我的源码:
[code]607     SDK_COMM_VIDEO_GetChnFrame(&stVideoFrame);
608   
609     memcpy(&stVideoFrameCopy,&stVideoFrame,sizeof(VIDEO_FRAME_INFO_S));
610   
611     stVideoFrameCopy.stVFrame.u32Width = u32Width;
612     stVideoFrameCopy.stVFrame.u32Height = u32Height;
613     //stVideoFrameCopy.stVFrame.u32PhyAddr[0] = stVideoFrame.stVFrame.u32PhyAddr[0] +posY*stVideoFrameCopy.stVFrame.u32Stride[0] + posX;
614 #if 0
615     stVideoFrame.stVFrame.s16OffsetTop = 0;
616     stVideoFrame.stVFrame.s16OffsetBottom = 0;
617     stVideoFrame.stVFrame.s16OffsetLeft = 480;
618     stVideoFrame.stVFrame.s16OffsetRight = 480;
619 #endif
620     s32Ret = HI_MPI_VO_SendFrame(g_voLayer,voChn,&stVideoFrameCopy,1);                                            
621     if(s32Ret != HI_SUCCESS){
622         printf("vo send frame failed: 0x%x\n",s32Ret);
623     }
624     //stVideoFrame.stVFrame.u32PhyAddr[0] = pAddr;
625     SDK_COMM_VIDEO_ReleaseChnFrame(&stVideoFrame);
[/code]
若把第613行打开,则程序会卡死。
不知道为何??

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-07-14 08:11:40
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=33921&ptid=11912]love_lin 发表于 2016-7-13 18:38[/url]
谢谢您的耐心指导。
我试了您的方法,但是如果去操作物理地址,程序会卡死。貌似不能那么操作。
我的源 ...[/quote]

可能的问题是物理地址通常有对齐的要求

另外, 程序运行没有什么出错log吗?
cat /dev/logmpp  看看有什么输出

love_lin

1个粉丝

22

问答

0

专栏

1

资料

love_lin 2016-07-14 08:24:12
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=33939&ptid=11912]zhuangweiye 发表于 2016-7-14 08:11[/url]
可能的问题是物理地址通常有对齐的要求

另外, 程序运行没有什么出错log吗?
[/quote]

如果那样设置的话,整个程序都死了,连其他通道的视频流也不输出了,所有也没法查看cat /dev/logmpp,只能断电重启了。
还有个问题请教下:
我开启vo 16个chn,太卡,而且还会出现错误,这个是不是行不通?
如果我想要几个frame拼接成一个frame,然后发送到vo chn 显示,可以吗?如何实现?

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-07-14 08:45:44
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=33940&ptid=11912]love_lin 发表于 2016-7-14 08:24[/url]
如果那样设置的话,整个程序都死了,连其他通道的视频流也不输出了,所有也没法查看cat /dev/logmpp,只 ...[/quote]

3516A vo 搞16channel ? 数据源是什么?

个人感觉选错芯片了

love_lin

1个粉丝

22

问答

0

专栏

1

资料

love_lin 2016-07-14 08:52:21
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=33946&ptid=11912]zhuangweiye 发表于 2016-7-14 08:45[/url]
3516A vo 搞16channel ? 数据源是什么?

个人感觉选错芯片了[/quote]

数据源就是我从vpss 获取来的frame,我想在同一屏幕显示16张图像,我目前能想到的就是,把frame发送到vo不同的chn,才能同时在同一个屏幕显示,您有什么更好的方法吗?

houyongnan

1个粉丝

32

问答

0

专栏

0

资料

houyongnan 2017-10-14 12:14:07
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=33771&ptid=11912]zhuangweiye 发表于 2016-7-12 10:35[/url]
问题:静态图片是什么格式的?视频流是几路?

假定:图片是JPEG的,视频只有一路, Vo设置为1080P@60
[/quote]

我想问一下,我从vi里取出来的帧,经过opencv处理一下,(yuv420)怎么在把他用vo显示出来呢?

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2017-10-16 07:49:24
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=79428&ptid=11912]houyongnan 发表于 2017-10-14 12:14[/url]
我想问一下,我从vi里取出来的帧,经过opencv处理一下,(yuv420)怎么在把他用vo显示出来呢?[/quote]

如果是无需缩放,那么可以考虑用HI_MPI_VO_SendFrame

不然, 可以考虑vpss->vo, 用HI_MPI_VPSS_SendFrame

houyongnan

1个粉丝

32

问答

0

专栏

0

资料

houyongnan 2017-10-16 08:48:37
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=79451&ptid=11912]zhuangweiye 发表于 2017-10-16 07:49[/url]
如果是无需缩放,那么可以考虑用HI_MPI_VO_SendFrame

不然, 可以考虑vpss->vo, 用HI_MPI_VPSS_SendFram ...[/quote]

thanks,我去试试
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

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

Markdown 语法

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

举报类型

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

详细说明

易百纳技术社区