qn1562136485

qn1562136485

0个粉丝

18

问答

0

专栏

0

资料

qn1562136485  发布于  2019-07-18 21:48:13
采纳率 0%
18个问答
6828

使用HI_MPI_VO_SendFrame()只显示一帧问题

 
各位前辈,您好!我从VPSS中获取数据,想发送到Vo进行显示(不使用两者绑定的方式),但是显示屏只是显示了一帧图像就不动了,这是我的代码,有哪位前辈知道这是为什么吗?十分感谢!


    HI_S32 s32Ret;
    SAMPLE_SVP_NNIE_PARAM_S *pstParam;
    SAMPLE_SVP_NNIE_RFCN_SOFTWARE_PARAM_S *pstSwParam;
    VIDEO_FRAME_INFO_S stBaseFrmInfo;
    VIDEO_FRAME_INFO_S stExtFrmInfo;
    HI_S32 s32MilliSec = 20000;
    VO_LAYER voLayer = 0;
    VO_CHN voChn = 0;
    HI_S32 s32VpssGrp = 0;
    HI_S32 as32VpssChn[] = {VPSS_CHN0, VPSS_CHN1};  

    pstParam = &s_stRfcnNnieParam;
    pstSwParam = &s_stRfcnSoftwareParam;

    while (HI_FALSE == s_bNnieStopSignal)
    {
           
        s32Ret = HI_MPI_VPSS_GetChnFrame(s32VpssGrp, as32VpssChn[0], &stBaseFrmInfo, s32MilliSec);
  
        s32Ret = HI_MPI_VO_SendFrame(voLayer, voChn, &stBaseFrmInfo, s32MilliSec);
        printf("----------s32Ret = %d------------\n", s32Ret);  //此处的返回值均为0
        
        SAMPLE_CHECK_EXPR_GOTO(HI_SUCCESS!=s32Ret, BASE_RELEASE,
            "HI_MPI_VO_SendFrame failed, Error(%#x)!\n", s32Ret);

        BASE_RELEASE:
                    s32Ret = HI_MPI_VPSS_ReleaseChnFrame(s32VpssGrp,as32VpssChn[0], &stBaseFrmInfo);
                    if (HI_SUCCESS != s32Ret)
                    {
                        SAMPLE_PRT("Error(%#x),HI_MPI_VPSS_ReleaseChnFrame failed,Grp(%d) chn(%d)!\n",
                            s32Ret,s32VpssGrp,as32VpssChn[0]);
                    }
               

    }

    return HI_NULL;
我来回答
回答5个
时间排序
认可量排序

qn1562136485

0个粉丝

18

问答

0

专栏

0

资料

qn1562136485 2019-07-19 09:07:11
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=145540&ptid=75214]kelisi 发表于 2019-7-19 00:01[/url]
BASE_RELEASE:
                    s32Ret = HI_MPI_VPSS_ReleaseChnFrame(s32VpssGrp,as32VpssChn[0], & ...[/quote]

执行到了,显示一帧以后就一直打印下面这个错误:
Error(0xa0018003):HI_MPI_VPSS_ReleaseChnFrame failed,Grp(0) chn(0)!
查了这个错误指的是VPSS参数无效,但是检查很多次,并未发现有设置不对的地方,这是用到的VPSS的代码:

/******************************************************************************
* function : Start Vpss
******************************************************************************/
HI_S32 SAMPLE_COMM_IVE_StartVpss(SIZE_S *pastSize,HI_U32 u32VpssChnNum)
{
    HI_S32 i;
    VPSS_CHN_ATTR_S astVpssChnAttr[VPSS_MAX_CHN_NUM];
    VPSS_GRP_ATTR_S stVpssGrpAttr;
    HI_BOOL abChnEnable[VPSS_MAX_CHN_NUM] = {HI_FALSE, HI_FALSE, HI_FALSE, HI_FALSE};
    VPSS_GRP VpssGrp = 0;

    stVpssGrpAttr.u32MaxW = 3072;
    stVpssGrpAttr.u32MaxH = 2048;
    stVpssGrpAttr.stFrameRate.s32SrcFrameRate = -1;
    stVpssGrpAttr.stFrameRate.s32DstFrameRate = -1;
    stVpssGrpAttr.enDynamicRange = DYNAMIC_RANGE_SDR8; //8bit数据的标准动态范围
    stVpssGrpAttr.enPixelFormat  = PIXEL_FORMAT_YVU_SEMIPLANAR_420; //像素格式
    stVpssGrpAttr.bNrEn   = HI_FALSE;

    for (i = 0; i < u32VpssChnNum; i++)  // 2
    {
        abChnEnable = HI_TRUE;
    }

    for(i = 0; i < VPSS_MAX_CHN_NUM; i++)  //12
    {
        astVpssChnAttr.u32Width                    = pastSize.u32Width;
        astVpssChnAttr.u32Height                   = pastSize.u32Height;
        //astVpssChnAttr.u32Width                    = 300;
        //astVpssChnAttr.u32Height                   = 300;
        astVpssChnAttr.enChnMode                   = VPSS_CHN_MODE_USER;
        astVpssChnAttr.enCompressMode              = COMPRESS_MODE_NONE;
        astVpssChnAttr.enDynamicRange              = DYNAMIC_RANGE_SDR8;
        astVpssChnAttr.enVideoFormat               = VIDEO_FORMAT_LINEAR;
        astVpssChnAttr.enPixelFormat               = PIXEL_FORMAT_YVU_SEMIPLANAR_420;
        astVpssChnAttr.stFrameRate.s32SrcFrameRate = -1;
        astVpssChnAttr.stFrameRate.s32DstFrameRate = -1;
        astVpssChnAttr.u32Depth                    = 1;
        astVpssChnAttr.bMirror                     = HI_FALSE;
        astVpssChnAttr.bFlip                       = HI_FALSE;
        astVpssChnAttr.stAspectRatio.enMode        = ASPECT_RATIO_NONE;
        astVpssChnAttr.enVideoFormat               = VIDEO_FORMAT_LINEAR;
    }

    return SAMPLE_COMM_VPSS_Start(VpssGrp, abChnEnable, &stVpssGrpAttr, &astVpssChnAttr[0]);

}

qn1562136485

0个粉丝

18

问答

0

专栏

0

资料

qn1562136485 2019-07-21 17:02:40
认可0
问题已解决,将第二for循环中修改为 i < u32VpssChnNum 即可

qn1563870017

0个粉丝

0

问答

0

专栏

0

资料

qn1563870017 2019-07-23 16:54:49
认可0
楼主您好,我也是想实现你所做的功能(解绑定vpss和vo,从vpss下载图像帧再发送给vo),参考了你的代码,我前面是使用了mpp目录下的dump工具获取到了图像帧,如果想要接着使用HI_MPI_VO_SendFrame送帧的话,请问参数方面怎么设置,我调用这个函数但是没有反应(参数直接设置为0,0,&stFrame,20000),请问楼主知不知道是什么原因?望回复!十分感谢!

qn1534489079

0个粉丝

12

问答

0

专栏

2

资料

qn1534489079 2019-07-31 17:52:24
认可0
[quote]
楼主您好,我也是想实现你所做的功能(解绑定vpss和vo,从vpss下载图像帧再发送给vo),参考了你的代码,我前面是使用了mpp目录下的dump工具获取到了图像帧,如果想要接着使用HI_MPI_VO_SendFrame送帧的话,请问参数方面怎么设置,我调用这个函数但是没有反应(参数直接设置为0,0,&stFrame,20000),请问楼主知不知道是什么原因?望回复!十分感谢![/quote]

你可以参考sample_nnie.c代码
\Hi3559AV100_SDK_V2.0.2.0\package\mpp\sample\svp\multi-core\nnie\sample\sample_nnie.c
[code]static HI_VOID* SAMPLE_SVP_NNIE_Rfcn_ViToVo(HI_VOID* pArgs)
{
    HI_S32 s32Ret;
    SAMPLE_SVP_NNIE_PARAM_S *pstParam;
    SAMPLE_SVP_NNIE_RFCN_SOFTWARE_PARAM_S *pstSwParam;
    VIDEO_FRAME_INFO_S stBaseFrmInfo;
    VIDEO_FRAME_INFO_S stExtFrmInfo;
    HI_S32 s32MilliSec = 20000;
    VO_LAYER voLayer = 0;
    VO_CHN voChn = 0;
    HI_S32 s32VpssGrp = 0;
    HI_S32 as32VpssChn[] = {VPSS_CHN0, VPSS_CHN1};

    pstParam = &s_stRfcnNnieParam;
    pstSwParam = &s_stRfcnSoftwareParam;

    while (HI_FALSE == s_bNnieStopSignal)
    {
        s32Ret = HI_MPI_VPSS_GetChnFrame(s32VpssGrp, as32VpssChn[1], &stExtFrmInfo, s32MilliSec);
        if(HI_SUCCESS != s32Ret)
        {
            SAMPLE_PRT("Error(%#x),HI_MPI_VPSS_GetChnFrame failed, VPSS_GRP(%d), VPSS_CHN(%d)!\n",
                s32Ret,s32VpssGrp, as32VpssChn[1]);
            continue;
        }

        s32Ret = HI_MPI_VPSS_GetChnFrame(s32VpssGrp, as32VpssChn[0], &stBaseFrmInfo, s32MilliSec);
        SAMPLE_CHECK_EXPR_GOTO(HI_SUCCESS!=s32Ret, EXT_RELEASE,
            "Error(%#x),HI_MPI_VPSS_GetChnFrame failed, VPSS_GRP(%d), VPSS_CHN(%d)!\n",
            s32Ret,s32VpssGrp, as32VpssChn[0]);

        s32Ret = SAMPLE_SVP_NNIE_Rfcn_Proc(pstParam,pstSwParam, &stExtFrmInfo,
        stBaseFrmInfo.stVFrame.u32Width,stBaseFrmInfo.stVFrame.u32Height);
        SAMPLE_CHECK_EXPR_GOTO(HI_SUCCESS!=s32Ret, BASE_RELEASE,
            "Error(%#x),SAMPLE_SVP_NNIE_Rfcn_Proc failed!\n", s32Ret);

        //Draw rect
        s32Ret = SAMPLE_COMM_SVP_NNIE_FillRect(&stBaseFrmInfo, &(pstSwParam->stRect), 0x0000FF00);
        SAMPLE_CHECK_EXPR_GOTO(HI_SUCCESS!=s32Ret, BASE_RELEASE,
            "SAMPLE_COMM_SVP_NNIE_FillRect failed, Error(%#x)!\n", s32Ret);

        s32Ret = HI_MPI_VO_SendFrame(voLayer, voChn, &stBaseFrmInfo, s32MilliSec);
        SAMPLE_CHECK_EXPR_GOTO(HI_SUCCESS!=s32Ret, BASE_RELEASE,
            "HI_MPI_VO_SendFrame failed, Error(%#x)!\n", s32Ret);

        BASE_RELEASE:
            s32Ret = HI_MPI_VPSS_ReleaseChnFrame(s32VpssGrp,as32VpssChn[0], &stBaseFrmInfo);
            if (HI_SUCCESS != s32Ret)
            {
                SAMPLE_PRT("Error(%#x),HI_MPI_VPSS_ReleaseChnFrame failed,Grp(%d) chn(%d)!\n",
                    s32Ret,s32VpssGrp,as32VpssChn[0]);
            }

        EXT_RELEASE:
            s32Ret = HI_MPI_VPSS_ReleaseChnFrame(s32VpssGrp,as32VpssChn[1], &stExtFrmInfo);
            if (HI_SUCCESS != s32Ret)
            {
                SAMPLE_PRT("Error(%#x),HI_MPI_VPSS_ReleaseChnFrame failed,Grp(%d) chn(%d)!\n",
                    s32Ret,s32VpssGrp,as32VpssChn[1]);
            }

    }

    return HI_NULL;
}[/code]

kelisi

0个粉丝

8

问答

0

专栏

8

资料

kelisi 2019-07-19 00:01:04
认可0
BASE_RELEASE:
                    s32Ret = HI_MPI_VPSS_ReleaseChnFrame(s32VpssGrp,as32VpssChn[0], &stBaseFrmInfo);
                    if (HI_SUCCESS != s32Ret)
                    {
                        SAMPLE_PRT("Error(%#x),HI_MPI_VPSS_ReleaseChnFrame failed,Grp(%d) chn(%d)!\n",
                            s32Ret,s32VpssGrp,as32VpssChn[0]);
                    }

这个地方执行到了么?
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

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

Markdown 语法

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

举报类型

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

详细说明

易百纳技术社区