justchen

justchen

1个粉丝

11

问答

0

专栏

1

资料

justchen  发布于  2019-06-04 15:08:30
采纳率 0%
11个问答
3272

HI_MPI_VO_SendFrame 只能显示一帧的时间问题

 
我现在的应用是  VDEC->VPSS( USER MODE )   然后在另一个线程中 HI_MPI_VPSS_GetChnFrame 把 frame取出来, 处理完成后用 HI_MPI_VO_SendFrame 到 DHD的通道0上进行显示.

现在发现输出偶尔会闪屏,开始还以为是MPP分配不当,后来才发现是 VDEC vpss与  vo的帧率不匹配导致.
因为  HI_MPI_VO_SendFrame 一个frame只能在vo上显示一帧的时间(HI_MPI_VO_SendFrame 后直接sleep一秒发现的),  这时如果VDEC那边帧率不够高,就导致了闪屏.不知道我这样分析得对不对.

尝试过在HI_MPI_VO_SendFrame  之后再HI_MPI_VO_PauseChn 也还是一样. 不知道大家遇到过没有.


要解决的话我目前能想到的是再建一个vpss邦定vo,还未测试,但肯定的会消耗一定的性能.  不知道大家有没其他的解决办法
我来回答
回答7个
时间排序
认可量排序

jugg

4个粉丝

18

问答

0

专栏

2

资料

jugg 2019-06-04 16:25:14
认可0
从vpss 获取的frame 如果不及时发送出去 会导致解码缓冲区一直缓存 并且导致闪屏

justchen

1个粉丝

11

问答

0

专栏

1

资料

justchen 2019-06-04 16:34:20
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=144013&ptid=74854]jugg_kai 发表于 2019-6-4 16:25[/url]
从vpss 获取的frame 如果不及时发送出去 会导致解码缓冲区一直缓存 并且导致闪屏[/quote]

获取了frame不释放,vdec缓存会用光.   但并不会导致闪屏.

justchen

1个粉丝

11

问答

0

专栏

1

资料

justchen 2019-06-04 16:39:35
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=144016&ptid=74854]justchen 发表于 2019-6-4 16:34[/url]
获取了frame不释放,vdec缓存会用光.   但并不会导致闪屏.[/quote]

当然,这是在vpss没邦定vo的情况下.    这样VDEC与VO一点关系都没有

jugg

4个粉丝

18

问答

0

专栏

2

资料

jugg 2019-06-04 16:41:55
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=144016&ptid=74854]justchen 发表于 2019-6-4 16:34[/url]
获取了frame不释放,vdec缓存会用光.   但并不会导致闪屏.[/quote]

处理不及时 导致发送到vo不及时。 可以试试获取后 直接发送到vo 中间不作处理

justchen

1个粉丝

11

问答

0

专栏

1

资料

justchen 2019-06-05 08:38:16
认可0
本帖最后由 justchen 于 2019-6-5 08:42 编辑

[quote][url=forum.php?mod=redirect&goto=findpost&pid=144018&ptid=74854]jugg_kai 发表于 2019-6-4 16:41[/url]
处理不及时 导致发送到vo不及时。 可以试试获取后 直接发送到vo 中间不作处理[/quote]

一样的.不做任何处理也会闪
[code]void *threadVpssSendToVochn(void *par)
{
    VIDEO_FRAME_INFO_S stFrame;
    HI_S32 s32Ret = HI_SUCCESS;

    while(1) {
        s32Ret = HI_MPI_VPSS_GetChnFrame(0, 0, &stFrame, 2000);
        if(s32Ret != HI_SUCCESS)
        {
            printf( "获取vpss通道数据失败:%d  错误码:0x%X!\n",0, s32Ret );
            continue;
        }
        //printf( "获取vpss通道数据成功!!!:%d !\n",chn );
        HI_MPPRUN( HI_MPI_VO_SendFrame( VODEV_HD, 0, &stFrame, -1) );
        HI_MPPRUN( HI_MPI_VPSS_ReleaseChnFrame(0, 0, &stFrame) );

    }

    return nullptr;
}[/code]


也尝试过各种VO的配置
[code]    HI_MPPRUN(SAMPLE_COMM_VO_StartDev(VoDev, &stVoPubAttr));
    stVoLayerAttr.stDispRect.s32X       = 0;
    stVoLayerAttr.stDispRect.s32Y       = 0;
    stVoLayerAttr.stDispRect.u32Width   = 1920;
    stVoLayerAttr.stDispRect.u32Height  = 1080;
    stVoLayerAttr.stImageSize.u32Width  = 1920;
    stVoLayerAttr.stImageSize.u32Height = 1080;
    stVoLayerAttr.bDoubleFrame          = HI_FALSE;
    stVoLayerAttr.bClusterMode          = HI_FALSE;//HI_FALSE;     // 视频层上的通道是否采用聚集的方式使用内存
    stVoLayerAttr.u32DispFrmRt          = 30;  //60;
    stVoLayerAttr.enPixFormat           = PIXEL_FORMAT_YUV_SEMIPLANAR_420;

    HI_MPPRUN( SAMPLE_COMM_VO_StartLayer( VoLayer, &stVoLayerAttr));
    HI_MPPRUN( SAMPLE_COMM_VO_StartChn( VoLayer, VO_MODE_1MUX) );   [/code]

jugg

4个粉丝

18

问答

0

专栏

2

资料

jugg 2019-06-05 09:18:48
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=144036&ptid=74854]justchen 发表于 2019-6-5 08:38[/url]
一样的.不做任何处理也会闪


[/quote]

看一下logmpp和vo 有没有什么异常

yenfuliu

0个粉丝

16

问答

0

专栏

0

资料

yenfuliu 2019-06-10 11:50:35
认可0
试试看这个 设置指定视频输出通道的显示帧率。

HI_S32 HI_MPI_VO_SetChnFrameRate(VO_LAYER VoLayer, VO_CHN VoChn, HI_S32
s32ChnFrmRate);
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

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

Markdown 语法

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

举报类型

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

详细说明

易百纳技术社区