feiyashan

feiyashan

0个粉丝

11

问答

0

专栏

0

资料

feiyashan  发布于  2017-01-04 10:27:15
采纳率 0%
11个问答
7496

通过虚拟vo实现多路拼接一路遇到一个问题

 
现在想把4路视频拼接成1路然后编码发出去,在该论坛搜了一下大部分说通过 vi -> vpss ->虚拟vo -> vpss -> venc来实现(vpss通道模式都为user模式),后来按照这种方法,vpss没有给venc发图像,如下所示:
-----BIND RELATION TABLE--------------------------------------------------------
  FirMod  FirDev  FirChn  SecMod  SecDev  SecChn  TirMod  TirDev  TirChn SendCnt  rstCnt
    vpss       0       2      vo       3       0    vpss       1       0       0       0
    vpss       0       2      vo       3       1    null       0       0       0       0
    vpss       0       2      vo       3       2    null       0       0       0       0
    vpss       0       2      vo       3       3    null       0       0       0       0
    vpss       1       2     grp       0       0    null       0       0       0       0
      vo       3       0    vpss       1       2     grp       0       0     124       0
      vi       0       0    vpss       0       2      vo       3       0     123       0
      vi       0       0    vpss       0       2      vo       3       1     123       0
      vi       0       0    vpss       0       2      vo       3       2     123       0
      vi       0       0    vpss       0       2      vo       3       3     123       0
但 vi -> vpss ->虚拟vo -> venc可以成功,唯独 vi -> vpss ->虚拟vo -> vpss -> venc不成功,不知道原因在哪里,现在有几点疑问:
1.为什么在虚拟vo后加一个vpss,再连接venc?可以去掉vpss吗,即通过vi -> vpss ->虚拟vo -> venc实现。
2.sdk文档写虚拟vo等同于标清设备,是不是720P以上的分辨率就无法使用虚拟vo来拼接多路视频了?
谢谢。
我来回答
回答7个
时间排序
认可量排序

feiyashan

0个粉丝

11

问答

0

专栏

0

资料

feiyashan 2017-01-04 10:32:02
认可0
忘了说一句,在hi3521平台上。
初始化代码如下:
    SAMPLE_VI_MODE_E enViMode = SAMPLE_VI_MODE_1_D1;
    HI_U32 u32ViChnCnt = 1/*4*/;
    HI_S32 s32VpssGrpCnt = 2/*4*/;
    PAYLOAD_TYPE_E enPayLoad[2]= {PT_H264, PT_H264};
    PIC_SIZE_E enSize[2] = {PIC_D1, PIC_D1};
    VB_CONF_S stVbConf;
    VPSS_GRP VpssGrp;
    VPSS_CHN VpssChn;
    VPSS_GRP_ATTR_S stGrpAttr;
    VENC_GRP VencGrp;
    VENC_CHN VencChn;
    SAMPLE_RC_E enRcMode;
    HI_S32 i;
    HI_S32 s32Ret = HI_SUCCESS;
    HI_U32 u32BlkSize;
    HI_CHAR ch;
    SIZE_S stSize;
    /******************************************
     step 1: start vi dev & chn to capture
    ******************************************/
    s32Ret = SAMPLE_COMM_VI_Start(enViMode, gs_enNorm);
    if (HI_SUCCESS != s32Ret)
    {
        SAMPLE_PRT("start vi failed!\n");
        goto END_VENC_8D1_0;
    }

    /******************************************
     step 2: start vpss and vi bind vpss
    ******************************************/
    s32Ret = SAMPLE_COMM_SYS_GetPicSize(gs_enNorm, PIC_D1, &stSize);
    if (HI_SUCCESS != s32Ret)
    {
        SAMPLE_PRT("SAMPLE_COMM_SYS_GetPicSize failed!\n");
        goto END_VENC_8D1_0;
    }
    stGrpAttr.u32MaxW = stSize.u32Width;
    stGrpAttr.u32MaxH = stSize.u32Height;
    stGrpAttr.bDrEn = HI_FALSE;
    stGrpAttr.bDbEn = HI_FALSE;
    stGrpAttr.bIeEn = HI_TRUE;
    stGrpAttr.bNrEn = HI_TRUE;
    stGrpAttr.bHistEn = HI_TRUE;
    stGrpAttr.enDieMode = VPSS_DIE_MODE_AUTO;
    stGrpAttr.enPixFmt = SAMPLE_PIXEL_FORMAT;

    s32Ret = SAMPLE_COMM_VPSS_Start_2(0, &stSize, VPSS_MAX_CHN_NUM,&stGrpAttr);
    if (HI_SUCCESS != s32Ret)
    {
        SAMPLE_PRT("Start Vpss failed!\n");
        goto END_VENC_8D1_1;
    }
    s32Ret = SAMPLE_COMM_VI_BindVpss(enViMode);
    if (HI_SUCCESS != s32Ret)
    {
        SAMPLE_PRT("Vi bind Vpss failed!\n");
        goto END_VENC_8D1_2;
    }

                VO_DEV VoDev;
            VO_CHN VoChn;
            VO_PUB_ATTR_S stVoPubAttr,stVoPubAttrSD;
                SAMPLE_VO_MODE_E enVoMode;
            HI_U32 u32WndNum;       
                VPSS_CHN VpssChn_VoHD0 = VPSS_PRE0_CHN;
                VO_WBC_ATTR_S stWbcAttr;
       
                MPP_CHN_S stSrcChn, stDestChn;
               
                /******************************************
                 step 3: start vitual vo
                ******************************************/

                printf("start vo VO_VIRT_DEV_0.\n");
                VoDev = VO_VIRT_DEV_0;
                u32WndNum = 4;
                enVoMode = VO_MODE_4MUX;
                stVoPubAttr.enIntfSync = VO_OUTPUT_PAL;
                stVoPubAttr.enIntfType = VO_INTF_CVBS;
                stVoPubAttr.u32BgColor = 0x000000ff;
                stVoPubAttr.bDoubleFrame = HI_FALSE;
                s32Ret = SAMPLE_COMM_VO_StartDevLayer(VoDev, &stVoPubAttr, 25);
                if (HI_SUCCESS != s32Ret)
                {
                         SAMPLE_PRT("SAMPLE_COMM_VO_StartDevLayer failed!\n");
                         goto END_8D1_3;
                }
               
                s32Ret = SAMPLE_COMM_VO_StartChn(VoDev, &stVoPubAttr, enVoMode);
                if (HI_SUCCESS != s32Ret)
                {
                         SAMPLE_PRT("SAMPLE_COMM_VO_StartChn failed!\n");
                         goto END_8D1_4;
                }
                for(i = 0; i < u32WndNum;i++)
                {
                        VoChn = i;
                        VpssGrp = 0;
                        s32Ret = SAMPLE_COMM_VO_BindVpss(VoDev,VoChn,VpssGrp,VpssChn_VoHD0);
                        if (HI_SUCCESS != s32Ret)
                        {
                                SAMPLE_PRT("Start VO failed!\n");
                                goto END_8D1_5;
                        }

                }

        stGrpAttr.u32MaxW = stSize.u32Width;
        stGrpAttr.u32MaxH = stSize.u32Height;
        stGrpAttr.bDrEn = HI_FALSE;
        stGrpAttr.bDbEn = HI_FALSE;
        stGrpAttr.bIeEn = HI_TRUE;
        stGrpAttr.bNrEn = HI_TRUE;
        stGrpAttr.bHistEn = HI_TRUE;
        stGrpAttr.enDieMode = VPSS_DIE_MODE_AUTO;
        stGrpAttr.enPixFmt = SAMPLE_PIXEL_FORMAT;
       
        s32Ret = SAMPLE_COMM_VPSS_Start_2(1, &stSize, VPSS_MAX_CHN_NUM,&stGrpAttr);
        if (HI_SUCCESS != s32Ret)
        {
                SAMPLE_PRT("Start Vpss failed!\n");
                goto END_VENC_8D1_1;
        }
       
        stSrcChn.enModId = HI_ID_VOU;
        stSrcChn.s32DevId = VoDev;
        stSrcChn.s32ChnId = 0;
       
        stDestChn.enModId = HI_ID_VPSS;
        stDestChn.s32DevId = 1;//VpssGrp;
        stDestChn.s32ChnId = 0;
       
       
        s32Ret = HI_MPI_SYS_Bind(&stSrcChn, &stDestChn);
        if (s32Ret != HI_SUCCESS)
        {
                SAMPLE_PRT("failed with %#x!\n", s32Ret);
        }



    /******************************************
     step 4: select rc mode
    ******************************************/

    enRcMode = SAMPLE_RC_VBR/*SAMPLE_RC_CBR*/;
    /******************************************
     step 5: start stream venc (big + little)
    ******************************************/
    for (i=0; i     {
        /*** main stream **/
        VencGrp = i*2;
        VencChn = i*2;
        VpssGrp = i;
        s32Ret = SAMPLE_COMM_VENC_Start(VencGrp, VencChn, enPayLoad[0],\
                                       gs_enNorm, enSize[0], enRcMode);
        if (HI_SUCCESS != s32Ret)
        {
            SAMPLE_PRT("Start Venc failed!\n");
            goto END_VENC_8D1_2;
        }

        stSrcChn.enModId        = HI_ID_VPSS;
        stSrcChn.s32DevId        = 1;//VpssGrp;
        stSrcChn.s32ChnId        = VpssChn_VoHD0;
       
        stDestChn.enModId = HI_ID_GROUP;
        stDestChn.s32DevId = VencGrp;
        stDestChn.s32ChnId = 0;
        s32Ret = HI_MPI_SYS_Bind(&stSrcChn, &stDestChn);
        if (s32Ret != HI_SUCCESS)
        {
                SAMPLE_PRT("failed with %#x!\n", s32Ret);
        }

    }

    /******************************************
     step 6: stream venc process -- get stream, then save it to file.
    ******************************************/
    s32Ret = SAMPLE_COMM_VENC_StartGetStream(u32ViChnCnt/**2*/);
    if (HI_SUCCESS != s32Ret)
    {
        SAMPLE_PRT("Start Venc failed!\n");
        goto END_VENC_8D1_3;
    }
    else
    {
            return s32Ret;
    }

falloutmx

1个粉丝

15

问答

0

专栏

0

资料

falloutmx 2017-01-04 10:44:12
认可0
第一个vpss是为了配合虚拟vo做叠加,第二个vpss是为了做缩放。没给数据的问题你可以看下logmpp和vpss的信息。

虚拟VO用1080P都没问题,只是行为模式类似标清通道。

feiyashan

0个粉丝

11

问答

0

专栏

0

资料

feiyashan 2017-01-04 14:09:02
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=43707&ptid=13859]falloutmx 发表于 2017-1-4 10:44[/url]
第一个vpss是为了配合虚拟vo做叠加,第二个vpss是为了做缩放。没给数据的问题你可以看下logmpp和vpss的信息 ...[/quote]

谢谢大神回复,我看了/proc/umap/vpss,第二个vpss group确实收不到虚拟vo发来的数据。如下:
# cat vpss

[VPSS] Version: [Hi3521_MPP_V1.0.4.0 Debug], Build Time[Jan 15 2013, 22:13:59]

-------------------------VPSS GRP ATTR-----------------------------------
   GrpID    MaxW    MaxH  PixFmt DieMode    DrEn    DbEn    IeEn    NrEn  HistEn
       0     704     576 semi420       0       0       0       1       1       1
       1     704     576 semi420       0       0       0       1       1       1

-----------------------VPSS GRP FRAME CONTROL INFO-------------------------
   GrpID bFilter   Width  Height    SrcFRate    DstFRate
       0       0       0       0          -1          -1
       1       0       0       0          -1          -1

-------------------------VPSS GRP PARAM-----------------------------------
   GrpID     Lum    Cont    Dark  Bright   IeStr IeSharp   SfStr   TfStr  Motion   DiStr  ChrmRg     NrW   SfWin DisMode
       0       0       0       0       0       2      10       0       0       0       0       0       0       0       0
       1       0       0       0       0       2      10       0       0       0       0       0       0       0       0

-------------------------VPSS CHN PARAM---------------------------------
   GrpID  Chn0Sp  Chn1Sp  Chn2Sp  Chn3Sp  Chn0Sf  Chn1Sf  Chn2Sf  Chn3Sf  Chn0Tf  Chn1Tf  Chn2Tf  Chn3Tf
       0      40      40      40      40      16      16       8       8       3       3       0       0
       1      40      40      40      40      16      16       8       8       3       3       0       0

-----------------------VPSS GRP PRESCALE INFO-------------------------
   GrpID bPreScl  CapSel   Width  Height   totde
       0     OFF    BOTH       0       0       0
       1     OFF    BOTH       0       0       0

-------------------------VPSS CHN ATTR-----------------------------------
   GrpId   ChnID  Enable    SpEn FrmWkEn      LW      RW      TW      BW
       0       0       1       0       1       2       2       2       2
       0       1       1       0       1       2       2       2       2
       0       2       1       0       1       2       2       2       2
       0       3       1       0       1       2       2       2       2
       0       4       1       0       1       2       2       2       2
       1       0       1       0       1       2       2       2       2
       1       1       1       0       1       2       2       2       2
       1       2       1       0       1       2       2       2       2
       1       3       1       0       1       2       2       2       2
       1       4       1       0       1       2       2       2       2

-------------------------VPSS CROP INFO-----------------------------------
   GrpId  CropEn  CoorTp   CoorX   CoorY   Width  Height  CapSel    OriW    OriH TrimWid TrimHgt
       0       0     RIT       0       0       0       0    BOTH     704     576     704     576
       1       0     RIT       0       0       0       0    BOTH       0       0       0       0

-------------------------VPSS GRP PIC QUEUE-------------------------
   GrpID FreeLen BusyLen   Delay
       0       7       0       0
       1       8       0       0

-----------------------VPSS GRP WORK STATUS-------------------------
   GrpID     RecvPic  ViLost    VdecLost       NewDo   OldDo NewUnDo OldUnDo  NoHist StartFl  bStart  CostTm MaxCostTm
       0        3618       0           0        3618       0       0   17856       0       0       1    1088      1108
       1           0       0           0           0       0       0       0       0       0       1       0         0

-----------------------VPSS CHN WORK STATUS-------------------------
   GrpID   ChnID    WorkMode   Depth      SendOk  bConfident     bDouble      CapSel
       0       0        USER       0           0           0          --        BOTH
       0       1        USER       0           0           0          --        BOTH
       0       2        USER       0       14468           1           0          --
       0       3        USER       0           0           0          --          --
       0       4        USER       0           0           0          --          --
       1       0        USER       0           0           0          --        BOTH
       1       1        USER       0           0           0          --        BOTH
       1       2        USER       0           0           0           0          --
       1       3        USER       0           0           0          --          --
       1       4        USER       0           0           0          --          --

-----------------------TIMER WORK STATUS-------------------------
     CntPerSec  MaxCntPerSec        CostTm    MostCostTm  CostTmPerSec MCostTmPerSec
           100           101            14            20           683           782

-------------------------DRV WORK STATUS-----------------------------------
   StartSuc0   StartSuc1     LinkInt     NodeInt   StartErr0  NodeIdErr0   StartErr1  NodeIdErr1      BusErr
        3618           0        3618           0           0           0           0           0           0

-------------------------DRV NODE QUEUE-----------------------------------
FreeNum WaitNum  Busy00  Busy01    Sel0  Busy10  Busy11    Sel1
     128       0       0       0       0       0       0       0

-----------------------INT WORK STATUS-------------------------
     CntPerSec  MaxCntPerSec        CostTm    MostCostTm  CostTmPerSec MCostTmPerSec
            25            25            18            24           376           428



vi -> vpss ->虚拟vo -> vpss -> venc,加粗的这部分没有数据流向,即虚拟vo -> vpss,不知道为什么

feiyashan

0个粉丝

11

问答

0

专栏

0

资料

feiyashan 2017-01-05 11:21:27
认可0
本帖最后由 feiyashan 于 2017-1-5 11:22 编辑

vi -> vpss0 ->虚拟vo -> vpss1 -> venc,现在只想确认一下,hi3521 是否支持虚拟vo绑定vpss1,有人做过实验吗

digibird

1个粉丝

1

问答

0

专栏

0

资料

digibird 2017-01-05 11:55:01
认可0
3531支持,没用过3521

feiyashan

0个粉丝

11

问答

0

专栏

0

资料

feiyashan 2017-01-06 08:39:59
认可0
找到问题了,vi -> vpss0 ->虚拟vo -> vpss1 -> venc,虚拟vo输出的分辨率为720*576,vpss1设置的最大分辨率为702*576,所以虚拟vo超出vpss最大能力,因此无法输出。谢谢大家的回复和帮助。

applepen

0个粉丝

11

问答

0

专栏

11

资料

applepen 2018-07-12 15:23:14
认可0
本帖最后由 applepen 于 2019-4-12 09:40 编辑

求购海思Hi3520D/Hi3521A 车载360全景泊车系统 全套源代码或软件技术指导
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

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

Markdown 语法

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

举报类型

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

详细说明

易百纳技术社区