JACK_ZHANG

JACK_ZHANG

0个粉丝

5

问答

0

专栏

0

资料

JACK_ZHANG  发布于  2016-08-30 15:17:42
采纳率 0%
5个问答
5954

Hi3531A编码问题

 
我现在对3531a做多画面拼接,并对拼接进行编码,
过程中还要切换不同的拼接模式,切换过程需要用实现融合的效果(两幅图像alpha值相加等于1),
我的做法是用两个虚拟VO,一个VO1为切换前的拼接方式,另一个VO2为切换后的拼接方式,
在还未开始切换的时候,通过VO1绑定VPSS1,VPSS1一方面绑定传递给VENC编码,另外同时绑定给VO物理设备进行显示,此时一切正常,
当切换开始时,我的做法是解绑VO1和VPSS1,通过HI_MPI_VO_GetScreenFrame获取虚拟设备VO1和VO2的图像,并通过HI_MPI_IVE_Add进行融合输出Frame,把这个融合输出的Frame通过HI_MPI_VPSS_SendFrame送到VPSS1,此时,VO物理设备显示融合的图像正常,但是VENC编码切提示错误:
<3>[  venc] [Func]:VencCheckTimeRef [Line]:1987 [Info]:<3>[  venc] Current timeref(0x1dea) is not larger than GrpTimeRef(0x1dea)
<3>[  venc] [Func]:VencCheckVideoInfo [Line]:792 [Info]:<3>[  venc] Venc  8 : VencCheckVideoInfo VencCheckTimeRef err.
<3>[  venc] [Func]:VencCheckVpssSendInfo [Line]:845 [Info]:<3>[  venc] Venc 8 : Sendinfo pic info err.
通过RTSP看推出的流也是在没有切换的时候一切正常,切换过程中却出现花屏
切换过程结束后,我再恢复虚拟VO1和VPSS1的绑定,此时编码传输的流也恢复正常。

我想问的是,VPSS与前端图像源由绑定到解绑后,VPSS绑定的VENC不正常,恢复绑定后又恢复正常,当用户通过HI_MPI_VPSS_SendFrame给VPSS发送图像的时候,VENC编码错误如何解决?

通过测试,发现绑定解绑后,通过HI_MPI_VPSS_SendFrame送到VPSS1,这是VENC接收的timeref衔接不上,导致有些图像发送到编码器失败,编码出来的码流出现了丢帧,如何解决,大神来答。
我来回答
回答4个
时间排序
认可量排序

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-08-30 15:39:24
认可0
感觉上是时间戳的问题

文档上这样说
HI_S32 HI_MPI_VO_GetScreenFrame(VO_LAYER VoLayer, VIDEO_FRAME_INFO_S*pstVFrame, HI_S32 s32MilliSec);

该接口获取的图像含有时间戳,该时间戳表示图像拼接时的时间信息,如果用户
不希望采用该时间戳进行编码,可以自行修改时间戳信息。

楼主首先要确定的是是否HI_MPI_VPSS_SendFrame的第一帧就出问题?
可以考虑把HI_MPI_VPSS_SendFrame的每帧的时间戳打出来看一下

JACK_ZHANG

0个粉丝

5

问答

0

专栏

0

资料

JACK_ZHANG 2016-08-30 15:46:26
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=36867&ptid=12471]zhuangweiye 发表于 2016-8-30 15:39[/url]
感觉上是时间戳的问题

文档上这样说
[/quote]

HI_MPI_VPSS_SendFrame用的时间戳我是调用了HI_MPI_VO_GetScreenFrame获取的时间戳,我是这样认为,之前绑定的时候,这个VPSS的时间戳是由VO1传递过来的,那我用户发送帧的时候,传递这边获取的时间戳应该是没问题。
另外,我通过cat /dev/logmpp查看,在切换过程中,打印的是:
<3>[  venc] [Func]:VencCheckTimeRef [Line]:1987 [Info]:<3>[  venc] Current timeref(0x1dea) is not larger than GrpTimeRef(0x1dea)
<3>[  venc] [Func]:VencCheckVideoInfo [Line]:792 [Info]:<3>[  venc] Venc  8 : VencCheckVideoInfo VencCheckTimeRef err.
<3>[  venc] [Func]:VencCheckVpssSendInfo [Line]:845 [Info]:<3>[  venc] Venc 8 : Sendinfo pic info err.
这样的错误,每次切换过程有3到4个这样的打印,也就是VPSS发送给VENC有3-4帧发送失败,提示是帧的序列号出错,但是这个序列号也是通过HI_MPI_VO_GetScreenFrame这边获取的

JACK_ZHANG

0个粉丝

5

问答

0

专栏

0

资料

JACK_ZHANG 2016-08-30 15:54:07
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=36867&ptid=12471]zhuangweiye 发表于 2016-8-30 15:39[/url]
感觉上是时间戳的问题

文档上这样说
[/quote]

你说的时间戳也是有可能的,我查查看,
我特意让切换的过程持续长一点,可以看到 /dev/logmpp上打印那个错误的时候就是在解绑的时候,还有后面再绑定回去的时候,就是我通过HI_MPI_VO_GetScreenFrame获取再通过
HI_MPI_VPSS_SendFrame发送的图像,在帧序列号上是衔接不上的,这跟VO的buffer是否有关系,目前还找不到证据来证明

JACK_ZHANG

0个粉丝

5

问答

0

专栏

0

资料

JACK_ZHANG 2016-08-30 16:01:49
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=36867&ptid=12471]zhuangweiye 发表于 2016-8-30 15:39[/url]
感觉上是时间戳的问题

文档上这样说
[/quote]

HI_MPI_VPSS_SendFrame的时间戳好修改,timeref也好赋值,现在问题是,我如何能知道,之前VO—bind-VPSS,在我解绑的那一刻,通过绑定已经发送到哪个timeref和u64PTS了,如果知道这,后面用户发送也好处理。
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

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

Markdown 语法

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

举报类型

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

详细说明

易百纳技术社区