Chenw_Fly

Chenw_Fly

0个粉丝

2

问答

0

专栏

0

资料

Chenw_Fly  发布于  2017-08-07 10:52:31
采纳率 0%
2个问答
10568

设置了depth以及用户模式,但是HI_MPI_VPSS_GetChnFrame获取到的数据为空

 

目前的方式,直接读取VI的数据,然后交给vpss处理之后得到缩放后的yuv数据,但是不管怎么样修改
HI_MPI_VPSS_GetChnFrame获取到的数据为空。看了论坛的相关的帖子,已经设置了depth,但是还是读取不到数据,麻烦
哪位帮忙看一下吧,谢谢:handshake


PS:HI_MPI_VI_GetFrame获取数据是ok的,HI_MPI_VPSS_SendFrame发送数据也没有报错。

int main()
{
        VPSS_GRP_ATTR_S                         stGrpVpssAttr = {0};
        VPSS_CHN_ATTR_S                         stChnAttr = {0};
        VIDEO_FRAME_INFO_S                 stFrame;
        HI_S32                                         s32Ret;
        VPSS_CHN_MODE_S                         stVpssMode;
           HI_S32                                        u32Depth = 2;
        VPSS_GRP                                 VpssGrp = 0;
        VPSS_CHN                                 VpssChn = 3;
   

        VB_CONF_S                                 stVbConf;
        VB_BLK                                         VbBlk = VB_INVALID_HANDLE;
        VB_POOL                                         hPool  = VB_INVALID_POOLID;
        int                                                 new_width = 1280;
        int                                                 new_height = 720;
        HI_U32                                             u32Size = new_width * new_height * 3 / 2;


        PIC_SIZE_E                                 enSize = PIC_UHD4K;
        HI_U32                                         u32BlkSize;
        VIDEO_NORM_E                         gs_enNorm = VIDEO_ENCODING_MODE_NTSC;
        SAMPLE_VI_CONFIG_S                 stViConfig = {0};
        VI_CHN                                         ViChn = 0;
        HI_U32                                        u32OldDepth = 8;

    memset(&stVbConf,0,sizeof(VB_CONF_S));

    SAMPLE_COMM_VI_GetSizeBySensor(&enSize);

    stVbConf.u32MaxPoolCnt = 16;
    u32BlkSize = SAMPLE_COMM_SYS_CalcPicVbBlkSize(gs_enNorm, enSize, PIXEL_FORMAT_YUV_SEMIPLANAR_422, SAMPLE_SYS_ALIGN_WIDTH);
    stVbConf.astCommPool[0].u32BlkSize = u32BlkSize;
    stVbConf.astCommPool[0].u32BlkCnt = 8;

    s32Ret = SAMPLE_COMM_SYS_Init(&stVbConf);
    if (HI_SUCCESS != s32Ret)
    {
        SAMPLE_PRT("system init failed with %d!\n", s32Ret);      
    }


    stViConfig.enViMode   = SENSOR_TYPE;
    stViConfig.enRotate   = ROTATE_NONE;
    stViConfig.enNorm     = VIDEO_ENCODING_MODE_AUTO;
    stViConfig.enViChnSet = VI_CHN_SET_NORMAL;
    stViConfig.enWDRMode  = WDR_MODE_NONE;
    s32Ret = SAMPLE_COMM_VI_StartVi(&stViConfig);
    if (HI_SUCCESS != s32Ret)
    {
        SAMPLE_PRT("start vi failed!\n");
            
    }
   

        s32Ret = HI_MPI_VI_GetFrameDepth(ViChn,&u32OldDepth);
        if(HI_SUCCESS != s32Ret)
        {
            SAMPLE_PRT("Err00000000000, s32Ret:0x%x\n",s32Ret);
        }



   s32Ret = HI_MPI_VI_SetFrameDepth(ViChn, u32Depth);
   if(HI_SUCCESS != s32Ret)
   {
            SAMPLE_PRT("Err11111111111111, s32Ret:0x%x\n",s32Ret);
   }


        stGrpVpssAttr.u32MaxW = 3840;
        stGrpVpssAttr.u32MaxH = 2160;
        stGrpVpssAttr.bIeEn = HI_FALSE;
        stGrpVpssAttr.bDciEn = HI_FALSE;
        stGrpVpssAttr.bNrEn = HI_TRUE;
        stGrpVpssAttr.bHistEn = HI_FALSE;
        stGrpVpssAttr.enDieMode = VPSS_DIE_MODE_NODIE;
        stGrpVpssAttr.stNrAttr.enNrType = VPSS_NR_TYPE_VIDEO;
        stGrpVpssAttr.stNrAttr.stNrVideoAttr.enNrRefSource = VPSS_NR_REF_FROM_RFR;
        stGrpVpssAttr.stNrAttr.u32RefFrameNum = 2;
        stGrpVpssAttr.bStitchBlendEn   = HI_FALSE;

        stGrpVpssAttr.enPixFmt = PIXEL_FORMAT_YUV_SEMIPLANAR_422;

   
    s32Ret = HI_MPI_VPSS_CreateGrp(VpssGrp, &stGrpVpssAttr);
    if (s32Ret != HI_SUCCESS)
    {
        SAMPLE_PRT("HI_MPI_VPSS_CreateGrp failed with %#x!\n", s32Ret);
        goto END;
    }

    s32Ret = HI_MPI_VPSS_StartGrp(VpssGrp);
    if (s32Ret != HI_SUCCESS)
    {
        SAMPLE_PRT("HI_MPI_VPSS_StartGrp failed with %#x\n", s32Ret);
        goto END;
    }

    s32Ret = VI_BindVpss(ViChn, VpssGrp, VpssChn);
        if(HI_SUCCESS != s32Ret)
    {
        SAMPLE_PRT("VI_BindVpss, failed :0x%x\n",s32Ret);
              goto END;
    }

    #if 0
        s32Ret = HI_MPI_VPSS_GetGrpAttr(VpssGrp, &stGrpVpssAttr);
    if (s32Ret != HI_SUCCESS)
    {
        SAMPLE_PRT("HI_MPI_VPSS_GetGrpAttr failed with %#x!\n", s32Ret);
        goto END;
    }

       
        stGrpVpssAttr.bIeEn = HI_FALSE;
        stGrpVpssAttr.bNrEn = HI_FALSE;
        s32Ret = HI_MPI_VPSS_SetGrpAttr(VpssGrp, &stGrpVpssAttr);
    if (s32Ret != HI_SUCCESS)
    {
        SAMPLE_PRT("HI_MPI_VPSS_SetGrpAttr failed with %#x!\n", s32Ret);
        goto END;
    }
        #endif


        #if 0
        s32Ret = HI_MPI_VPSS_GetChnAttr(VpssGrp, VpssChn, &stChnAttr);       
    if (s32Ret != HI_SUCCESS)
    {
        SAMPLE_PRT("HI_MPI_VPSS_GetChnAttr failed with %#x!\n", s32Ret);
        goto END;
    }
        #endif

        memset(&stChnAttr, 0, sizeof(stChnAttr));
        stChnAttr.s32SrcFrameRate = -1;
        stChnAttr.s32DstFrameRate = -1;
        s32Ret = HI_MPI_VPSS_SetChnAttr(VpssGrp, VpssChn, &stChnAttr);               
    if (s32Ret != HI_SUCCESS)
    {
        SAMPLE_PRT("HI_MPI_VPSS_SetChnAttr failed with %#x!\n", s32Ret);
        goto END;
    }

       
    #if 0
        s32Ret =  HI_MPI_VPSS_GetChnMode(VpssGrp, VpssChn, &stVpssMode);
    if (s32Ret != HI_SUCCESS)
    {
        SAMPLE_PRT("HI_MPI_VPSS_GetChnMode failed with %#x!\n", s32Ret);
        goto END;
    }
        #endif

        stVpssMode.enChnMode = VPSS_CHN_MODE_USER;
    stVpssMode.bDouble         = HI_FALSE;
    stVpssMode.enPixelFormat = PIXEL_FORMAT_YUV_SEMIPLANAR_422;
    stVpssMode.u32Width = new_width;               
    stVpssMode.u32Height = new_height;            

        s32Ret =  HI_MPI_VPSS_SetChnMode(VpssGrp, VpssChn, &stVpssMode);
    if (s32Ret != HI_SUCCESS)
    {
        SAMPLE_PRT("HI_MPI_VPSS_SetChnMode failed with %#x!\n", s32Ret);
        goto END;
    }

        s32Ret =  HI_MPI_VPSS_EnableChn(VpssGrp, VpssChn);
    if (s32Ret != HI_SUCCESS)
    {
        SAMPLE_PRT("HI_MPI_VPSS_SetChnMode failed with %#x!\n", s32Ret);
        goto END;
    }

        #if 1
        s32Ret =  HI_MPI_VPSS_SetDepth(VpssGrp, VpssChn, u32Depth);
    if (s32Ret != HI_SUCCESS)
    {
        SAMPLE_PRT("HI_MPI_VPSS_SetDepth failed with %#x!\n", s32Ret);
        goto END;
    }
        #endif


    /*create comm vb pool*/
    hPool   = HI_MPI_VB_CreatePool(u32Size, 5 , NULL);
    if (hPool == VB_INVALID_POOLID)
    {
        SAMPLE_PRT("HI_MPI_VB_CreatePool failed! \n");
                goto END;   
        }



    int count = 0;
    while(1)
    {
        VIDEO_FRAME_INFO_S stExtFrmInfo;

        count++;
          
            s32Ret = HI_MPI_VI_GetFrame(ViChn, &stFrame, 100);
            if(HI_SUCCESS != s32Ret)
            {
                SAMPLE_PRT("HI_MPI_VI_GetFrame, failed :0x%x\n",s32Ret);
                      goto END;
            }


        s32Ret = HI_MPI_VPSS_SendFrame(VpssGrp, &stFrame /*&stDstframe*/, 100);
        if (HI_SUCCESS != s32Ret)
        {
            SAMPLE_PRT("HI_MPI_VPSS_SendFrame faild with%#x! \n", s32Ret);
            goto END;
        }  

                #if 1
        memset(&stExtFrmInfo, 0, sizeof(stExtFrmInfo));
            stExtFrmInfo.u32PoolId = VB_INVALID_POOLID;

        s32Ret = HI_MPI_VPSS_GetChnFrame(VpssGrp, VpssChn, &stExtFrmInfo, 100);
            if (s32Ret == HI_SUCCESS)
        {
           HI_MPI_VPSS_ReleaseChnFrame(VpssGrp, VpssChn, &stExtFrmInfo);
           printf("success !!!!!!!!!!!!!!!!!!! \n");
        }
        else
              {
                SAMPLE_PRT("HI_MPI_VPSS_GetChnFrame failed with %#x\n", s32Ret);
                //goto END;
            }
                #endif

                s32Ret = HI_MPI_VI_ReleaseFrame(ViChn, &stFrame);
                if(HI_SUCCESS != s32Ret)
                {
                           SAMPLE_PRT("Info:HI_MPI_VB_ReleaseBlock fail, s32Ret:0x%x\n",s32Ret );
                           goto END;
                }       

        if (count >= 50)
           break;
    }


END:

        SAMPLE_COMM_VI_StopVi(&stViConfig);

    if (VB_INVALID_POOLID != hPool)
    {
        HI_MPI_VB_DestroyPool( hPool );
        hPool = VB_INVALID_POOLID;
    }

        s32Ret = VI_UnBindVpss(ViChn, VpssGrp, VpssChn);
    if (s32Ret != HI_SUCCESS)
    {
        SAMPLE_PRT("VI_UnBindVpss failed with %#x\n", s32Ret);
        }

        s32Ret = HI_MPI_VPSS_DisableChn(VpssGrp, VpssChn);
    if (s32Ret != HI_SUCCESS)
    {
        SAMPLE_PRT("HI_MPI_VPSS_DisableChn failed with %#x\n", s32Ret);
        }

    s32Ret = HI_MPI_VPSS_StopGrp(VpssGrp);
    if (s32Ret != HI_SUCCESS)
    {
        SAMPLE_PRT("HI_MPI_VPSS_StopGrp failed with %#x\n", s32Ret);
    }

        s32Ret =  HI_MPI_VPSS_DisableChn(VpssGrp, VpssChn);
    if (s32Ret != HI_SUCCESS)
    {
        SAMPLE_PRT("HI_MPI_VPSS_DisableChn failed with %#x!\n", s32Ret);
    }

    s32Ret = HI_MPI_VPSS_DestroyGrp(VpssGrp);
    if (s32Ret != HI_SUCCESS)
    {
        SAMPLE_PRT("HI_MPI_VPSS_DestroyGrp failed with %#x!\n", s32Ret);
    }


        SAMPLE_COMM_SYS_Exit();


    printf("\n\n\nfinished !!!! \n\n");
    return 0;
}
我来回答
回答14个
时间排序
认可量排序

Chenw_Fly

0个粉丝

2

问答

0

专栏

0

资料

Chenw_Fly 2017-08-07 13:58:26
认可0
1.初始化打开vi,
2.将vi 绑定到vpss
3.然后将vi获取的数据send到vpss
4.再从vpss获取缩放后的yuv数据

就是这最后一步获取的数据为空,代码在上面,麻烦哪位帮忙看看,谢谢,这个问题折腾我几天了

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2017-08-07 14:50:16
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=56939&ptid=18373]Chenw_Fly 发表于 2017-8-7 13:58[/url]
1.初始化打开vi,
2.将vi 绑定到vpss
3.然后将vi获取的数据send到vpss
[/quote]

是啥平台????

Chenw_Fly

0个粉丝

2

问答

0

专栏

0

资料

Chenw_Fly 2017-08-07 14:54:45
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=56950&ptid=18373]zhuangweiye 发表于 2017-8-7 14:50[/url]
是啥平台????[/quote]

hisi3519V101,还望庄工多指点一番,先谢过了

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2017-08-07 15:05:54
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=56953&ptid=18373]Chenw_Fly 发表于 2017-8-7 14:54[/url]
hisi3519V101,还望庄工多指点一番,先谢过了[/quote]

离线还是在线模式?

不是很明白楼主的意思, 不是都绑定了vi-vpss 吗 ?

Chenw_Fly

0个粉丝

2

问答

0

专栏

0

资料

Chenw_Fly 2017-08-07 15:14:55
认可0
将yuv422改成了yuv420之后, /dev/logmap下面的提示信息是这样的:
<3>[  vpss] [Func]:VPSS_SendPic [Line]:8535 [Info]:<3>[  vpss] [grp0]:vpss s32PipeId(1) unexist!

Chenw_Fly

0个粉丝

2

问答

0

专栏

0

资料

Chenw_Fly 2017-08-07 15:47:08
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=56956&ptid=18373]zhuangweiye 发表于 2017-8-7 15:05[/url]
离线还是在线模式?

不是很明白楼主的意思, 不是都绑定了vi-vpss 吗 ?[/quote]

离线模式,谢谢庄工。问题已经解决了,在于maxW和maxH的设置,这个不能按照文档来,流程是对的

Chenw_Fly

0个粉丝

2

问答

0

专栏

0

资料

Chenw_Fly 2017-08-07 15:51:28
认可0
这个例子,有需要的同学可以作为分辨率缩放的一个demo,流程基本上是ok的,也有结果输出

ksniper

0个粉丝

1

问答

0

专栏

0

资料

ksniper 2017-09-14 15:50:55
认可0
请问下VPSS中 getframe的帧率能达到多少?  感觉我直接从VI中getframe 太慢了

Chenw_Fly

0个粉丝

2

问答

0

专栏

0

资料

Chenw_Fly 2017-09-28 15:00:23
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=64015&ptid=18373]ksniper 发表于 2017-9-14 15:50[/url]
请问下VPSS中 getframe的帧率能达到多少?  感觉我直接从VI中getframe 太慢了[/quote]

如果只有一个vpss的group,一个group只有一个channel,出来的帧率还是准的。senor设置的是多少,编码出来的就是多少。只是这个过程中,你要是获取一帧yuv或者编码出来一帧h264 你就写文件的话,会影响到vi获取速度,导致帧率不准

qn1515560163

0个粉丝

2

问答

0

专栏

0

资料

qn1515560163 2018-01-10 13:17:10
认可0
楼主你好,我现在跟你用的是一样的,但是vpss数据会有vi残留数据,楼主出现过吗

simonhuang

0个粉丝

1

问答

2

专栏

0

资料

simonhuang 2018-07-27 16:30:56
认可0
vi 已经 bind vpss, 为何还要调用vpss_sendframe?

qn1511544493

0个粉丝

1

问答

0

专栏

0

资料

qn1511544493 2018-10-23 14:53:24
认可0
楼主解决后的完整代码能贴上来共享下吗?

It-is-windy

0个粉丝

1

问答

0

专栏

0

资料

It-is-windy 2019-12-30 10:40:25
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=56964&ptid=18373]Chenw_Fly 发表于 2017-8-7 15:47[/url]
离线模式,谢谢庄工。问题已经解决了,在于maxW和maxH的设置,这个不能按照文档来,流程是对的[/quote]

前辈,请问maxH和maxW要如何设置呢?

jipd

0个粉丝

14

问答

0

专栏

0

资料

jipd 2018-07-27 17:47:50
认可0
顶起来。。。:victory:
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

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

Markdown 语法

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

举报类型

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

详细说明

易百纳技术社区