gauntf

gauntf

0个粉丝

3

问答

0

专栏

0

资料

gauntf  发布于  2016-05-20 09:45:03
采纳率 0%
3个问答
7881

关于3531的hdmi和vga输出问题

 
各位,请问有谁知道3531的hdmi和vga能否输出不同的高清图像,即输出不同视频源,两个都是高清的
我来回答
回答8个
时间排序
认可量排序

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-05-20 09:59:25
认可0

可以

芯片             最大分辨率                    
Hi3531   HD  DHD0:  1920x1080        
                   DHD1:  2560x1600

gauntf

0个粉丝

3

问答

0

专栏

0

资料

gauntf 2016-05-20 21:10:05
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=30342&ptid=11376]zhuangweiye 发表于 2016-5-20 09:59[/url]
可以

芯片             最大分辨率                    
[/quote]

感谢回复,下面的代码是我修改3531 SDK sample_vio的例子,
HI_S32 SAMPLE_VIO_4HD_Homo(HI_VOID)
{
    SAMPLE_VI_MODE_E enViMode = SAMPLE_VI_MODE_4_1080P;
    HI_U32 u32ViChnCnt = 4;
    HI_S32 s32VpssGrpCnt = 4;
   
    VB_CONF_S stVbConf;
    VPSS_GRP VpssGrp;
    VPSS_GRP_ATTR_S stGrpAttr;
    VO_DEV VoDev;
    VO_CHN VoChn;
    VI_CHN ViChn_Sub;                //for cvbs output
    VO_PUB_ATTR_S stVoPubAttr;
    SAMPLE_VO_MODE_E enVoMode, enPreVoMode;
   
    HI_S32 i;
    HI_S32 s32Ret = HI_SUCCESS;
    HI_U32 u32BlkSize;
    HI_CHAR ch;
    SIZE_S stSize;
    HI_U32 u32WndNum,u32PreWndNum;

    VO_WBC_ATTR_S stWbcAttr;

    /******************************************
     step  1: init global  variable
    ******************************************/
    gs_u32ViFrmRate = (VIDEO_ENCODING_MODE_PAL == gs_enNorm)?25:30;
   
    memset(&stVbConf,0,sizeof(VB_CONF_S));

    u32BlkSize = SAMPLE_COMM_SYS_CalcPicVbBlkSize(gs_enNorm,\
                PIC_HD1080, SAMPLE_PIXEL_FORMAT, SAMPLE_SYS_ALIGN_WIDTH);
    stVbConf.u32MaxPoolCnt = 128;

    /*ddr0 video buffer*/
    stVbConf.astCommPool[0].u32BlkSize = u32BlkSize;
    stVbConf.astCommPool[0].u32BlkCnt = u32ViChnCnt * 3;
    memset(stVbConf.astCommPool[0].acMmzName,0,
        sizeof(stVbConf.astCommPool[0].acMmzName));

    /*ddr1 video buffer*/
    stVbConf.astCommPool[1].u32BlkSize = u32BlkSize;
    stVbConf.astCommPool[1].u32BlkCnt = u32ViChnCnt * 3;
    strcpy(stVbConf.astCommPool[1].acMmzName,"ddr1");

    u32BlkSize = SAMPLE_COMM_SYS_CalcPicVbBlkSize(gs_enNorm,\
                PIC_D1, SAMPLE_PIXEL_FORMAT, SAMPLE_SYS_ALIGN_WIDTH);
   
    /* WARNING : HD we will use 4*D1 VI_SUB_CHNs for CVBS Preview. */
    /* because these SUB_CHNs not pass VPSS, so needn't hist buffer.    */
    u32BlkSize = SAMPLE_COMM_SYS_CalcPicVbBlkSize(gs_enNorm,\
                PIC_D1, SAMPLE_PIXEL_FORMAT, SAMPLE_SYS_ALIGN_WIDTH);

    /*ddr0 video buffer*/
    stVbConf.astCommPool[2].u32BlkSize = u32BlkSize;
    stVbConf.astCommPool[2].u32BlkCnt = u32ViChnCnt * 3;
    memset(stVbConf.astCommPool[2].acMmzName,0,
        sizeof(stVbConf.astCommPool[2].acMmzName));

    /*ddr1 video buffer*/
    stVbConf.astCommPool[3].u32BlkSize = u32BlkSize;
    stVbConf.astCommPool[3].u32BlkCnt = u32ViChnCnt * 3;
    strcpy(stVbConf.astCommPool[3].acMmzName,"ddr1");

    /******************************************
     step 2: mpp system init.
    ******************************************/
    s32Ret = SAMPLE_COMM_SYS_Init(&stVbConf);
    if (HI_SUCCESS != s32Ret)
    {
        SAMPLE_PRT("system init failed with %d!\n", s32Ret);
        goto END_4HD_HOMO_0;
    }

    s32Ret = SAMPLE_COMM_VI_MemConfig(enViMode);
    if (HI_SUCCESS != s32Ret)
    {
        SAMPLE_PRT("SAMPLE_COMM_VI_MemConfig failed with %d!\n", s32Ret);
        goto END_4HD_HOMO_0;
    }

    s32Ret = SAMPLE_COMM_VPSS_MemConfig();
    if (HI_SUCCESS != s32Ret)
    {
        SAMPLE_PRT("SAMPLE_COMM_VPSS_MemConfig failed with %d!\n", s32Ret);
        goto END_4HD_HOMO_0;
    }

    s32Ret = SAMPLE_COMM_VO_MemConfig(SAMPLE_VO_DEV_DSD0, NULL);
    if (HI_SUCCESS != s32Ret)
    {
        SAMPLE_PRT("SAMPLE_COMM_VO_MemConfig failed with %d!\n", s32Ret);
        goto END_4HD_HOMO_0;
    }
    s32Ret = SAMPLE_COMM_VO_MemConfig(SAMPLE_VO_DEV_DSD1, NULL);
    if (HI_SUCCESS != s32Ret)
    {
        SAMPLE_PRT("SAMPLE_COMM_VO_MemConfig failed with %d!\n", s32Ret);
        goto END_4HD_HOMO_0;
    }
    s32Ret = SAMPLE_COMM_VO_MemConfig(SAMPLE_VO_DEV_DHD1, "ddr1");
    if (HI_SUCCESS != s32Ret)
    {
        SAMPLE_PRT("SAMPLE_COMM_VO_MemConfig failed with %d!\n", s32Ret);
        goto END_4HD_HOMO_0;
    }

    /******************************************
     step 3: 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_4HD_HOMO_0;
    }
   
    /******************************************
     step 4: start vpss and vi bind vpss (subchn needn't bind vpss in this mode)
    ******************************************/
    s32Ret = SAMPLE_COMM_SYS_GetPicSize(gs_enNorm, PIC_HD1080, &stSize);
    if (HI_SUCCESS != s32Ret)
    {
        SAMPLE_PRT("SAMPLE_COMM_SYS_GetPicSize failed!\n");
        goto END_4HD_HOMO_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(s32VpssGrpCnt, &stSize, VPSS_MAX_CHN_NUM,NULL);
    if (HI_SUCCESS != s32Ret)
    {
        SAMPLE_PRT("Start Vpss failed!\n");
        goto END_4HD_HOMO_1;
    }

    s32Ret = SAMPLE_COMM_VI_BindVpss(enViMode);
    if (HI_SUCCESS != s32Ret)
    {
        SAMPLE_PRT("Vi bind Vpss failed!\n");
        goto END_4HD_HOMO_2;
    }

#if 1 //HDMI
    printf("start vo hd1 from HDMI\n");
    VoDev = SAMPLE_VO_DEV_DHD1;
    u32WndNum = 1;
    enVoMode = VO_MODE_1MUX;
        
    stVoPubAttr.enIntfSync = VO_OUTPUT_1080P60;
    stVoPubAttr.enIntfType =  VO_INTF_HDMI; // HDMI output
    stVoPubAttr.u32BgColor = 0x000000ff;
    stVoPubAttr.bDoubleFrame = HI_FALSE;  // In VI HD input case, this item should be set to HI_FALSE

    s32Ret = SAMPLE_COMM_VO_StartDevLayer(VoDev, &stVoPubAttr, gs_u32ViFrmRate);
    if (HI_SUCCESS != s32Ret)
    {
            SAMPLE_PRT("SAMPLE_COMM_VO_StartDevLayer failed!\n");
            goto END_4HD_HOMO_6;
    }
    s32Ret = SAMPLE_COMM_VO_StartChn(VoDev, &stVoPubAttr, enVoMode);
    if (HI_SUCCESS != s32Ret)
    {
            SAMPLE_PRT("SAMPLE_COMM_VO_StartChn failed!\n");
            goto END_4HD_HOMO_6;
    }
    /* if it's displayed on HDMI, we should start HDMI */
    if (stVoPubAttr.enIntfType & VO_INTF_HDMI)
    {
        if (HI_SUCCESS != SAMPLE_COMM_VO_HdmiStart(stVoPubAttr.enIntfSync))
        {
                SAMPLE_PRT("Start SAMPLE_COMM_VO_HdmiStart failed!\n");
                    goto END_4HD_HOMO_6;
        }
    }

    VoChn = 0;
    VpssGrp = 0;
    s32Ret = SAMPLE_COMM_VO_BindVpss(VoDev,VoChn,VpssGrp,VPSS_PRE0_CHN);
    if (HI_SUCCESS != s32Ret)
    {
              SAMPLE_PRT("SAMPLE_COMM_VO_BindVpss failed!\n");
              goto END_4HD_HOMO_6;
    }
#endif
#if 1//VGA  
    printf("start vo hd0 from vga\n");
    VoDev = SAMPLE_VO_DEV_DHD0;
    u32WndNum = 1;
    enVoMode = VO_MODE_1MUX;
   
    stVoPubAttr.enIntfSync = VO_OUTPUT_1080P60;
    stVoPubAttr.enIntfType = VO_INTF_VGA; // BT1120 output
    stVoPubAttr.u32BgColor = 0x000000ff;
    stVoPubAttr.bDoubleFrame = HI_FALSE;  // enable doubleframe

    s32Ret = SAMPLE_COMM_VO_StartDevLayer(VoDev, &stVoPubAttr, gs_u32ViFrmRate);
    if (HI_SUCCESS != s32Ret)
    {
        SAMPLE_PRT("SAMPLE_COMM_VO_StartDevLayer failed!\n");
        goto END_4HD_HOMO_6;
    }
    s32Ret = SAMPLE_COMM_VO_StartChn(VoDev, &stVoPubAttr, enVoMode);
    if (HI_SUCCESS != s32Ret)
    {
        SAMPLE_PRT("SAMPLE_COMM_VO_StartChn failed!\n");
        goto END_4HD_HOMO_6;
    }
  
    VoChn = 1;    //假如我修改为VoChn为0,这时图像能够在显示器上显示,但上面的HDMI输出被挤掉,显示器停留在最后一个画面不动
    VpssGrp = 1;
    s32Ret = SAMPLE_COMM_VO_BindVpss(VoDev,VoChn,VpssGrp,VPSS_PRE0_CHN);
    if (HI_SUCCESS != s32Ret)
    {
              SAMPLE_PRT("SAMPLE_COMM_VO_BindVpss failed!\n");
              goto END_4HD_HOMO_6;
    }
  
#endif
    while(1)
        sleep(1);
   
  
    /******************************************
     step 6: exit process
    ******************************************/
   
END_4HD_HOMO_7:        //stop vo hd1 wbc
#if HICHIP == HI3531_V100
    SAMPLE_COMM_VO_UnBindVoWbc(SAMPLE_VO_DEV_DHD0, 0);
    HI_MPI_VO_DisableWbc(SAMPLE_VO_DEV_DHD1);
#endif
END_4HD_HOMO_6:        //stop vo hd1
#if HICHIP == HI3531_V100
    VoDev = SAMPLE_VO_DEV_DHD1;
#else
    VoDev = SAMPLE_VO_DEV_DHD0;
#endif
    //u32WndNum = 4;
    //enVoMode = VO_MODE_4MUX;   
    if (stVoPubAttr.enIntfType & VO_INTF_HDMI)
    {
        SAMPLE_COMM_VO_HdmiStop();
    }
    SAMPLE_COMM_VO_StopChn(VoDev, enVoMode);
    for(i=0;i     {
        VoChn = i;
        VpssGrp = i;
        SAMPLE_COMM_VO_UnBindVpss(VoDev,VoChn,VpssGrp,VPSS_PRE0_CHN);
    }
    SAMPLE_COMM_VO_StopDevLayer(VoDev);
END_4HD_HOMO_5:        //stop vo sd1
#if HICHIP == HI3531_V100
    enPreVoMode = enVoMode;
    u32PreWndNum = u32WndNum;
    VoDev = SAMPLE_VO_DEV_DSD1;
    u32WndNum = 1;
    enVoMode = VO_MODE_1MUX;
    SAMPLE_COMM_VO_StopChn(VoDev, enVoMode);
    SAMPLE_COMM_VO_StopDevLayer(VoDev);

    u32WndNum = u32PreWndNum;
    enVoMode = enPreVoMode;
#endif   
END_4HD_HOMO_4:        //stop vo sd0
#if HICHIP == HI3531_V100
    VoDev = SAMPLE_VO_DEV_DSD0;
    u32WndNum = 4;
    enVoMode = VO_MODE_4MUX;
    SAMPLE_COMM_VO_StopChn(VoDev, enVoMode);
    for(i=0;i     {
        VoChn = i;
        VpssGrp = i;
        SAMPLE_COMM_VO_UnBindVpss(VoDev,VoChn,VpssGrp,VPSS_PRE0_CHN);
    }   
    SAMPLE_COMM_VO_StopDevLayer(VoDev);
#endif   
END_4HD_HOMO_3:
    SAMPLE_COMM_VI_UnBindVpss(enViMode);
END_4HD_HOMO_2:
    SAMPLE_COMM_VPSS_Stop(s32VpssGrpCnt, VPSS_MAX_CHN_NUM);
END_4HD_HOMO_1:
    SAMPLE_COMM_VI_Stop(enViMode);
END_4HD_HOMO_0:
    SAMPLE_COMM_SYS_Exit();
   
    return s32Ret;
}

结论是DHD0的输出是能够在显示器看到图像的,DHD1在显示器上看只有蓝屏,不知道是不是3531就是这样的,希望有人弄过可以告知是否哪里设置错误

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-05-23 08:21:56
认可0
楼主试试都用4分割, 另外如果方便地话,把工作时的/proc/umap/vo /proc/umap/sys /proc/umap/vpss放上来看看

gauntf

0个粉丝

3

问答

0

专栏

0

资料

gauntf 2016-06-03 18:04:43
认可0
一下子过去两个礼拜啦,感谢zhuangweiye 的回复,VGA与HDMI输出不同的视频源已经出来了,放出来的代码第二个高清输出初始化不能直接调用SAMPLE_COMM_VO_StartChn这个函数,因为这样还是设置到通道0的属性,所以注意下这个地方就OK了

jl3276

0个粉丝

8

问答

0

专栏

0

资料

jl3276 2016-09-10 10:32:15
认可0
楼主请教个问题,我至今不懂SAMPLE_SYS_ALIGN_WIDTH这个宏定义成64的意义是什么~它只能在64,32,16中选择,不同的选择指的是哪里不同呢~:hug:

jl3276

0个粉丝

8

问答

0

专栏

0

资料

jl3276 2016-09-10 10:35:08
认可0
MPP_SYS_CONF_S
【说明】
定义 MPP 系统控制属性结构体。
【定义】
typedef struct hiMPP_SYS_CONF_S
{
/* stride of picture buffer must be aligned with this value.
* you can choose a value from 1 to 1024,
* and it except 1 must be multiple of 16.*/
HI_U32 u32AlignWidth;
}MPP_SYS_CONF_S;
【成员】
成员名称 描述
u32AlignWidth 整个系统中使用图像的 stride 字节对齐数。
取值范围: [1, 1024],一般选择 16 字节对齐。
静态属性。

jl3276

0个粉丝

8

问答

0

专栏

0

资料

jl3276 2016-09-10 10:37:00
认可0
stSysConf.u32AlignWidth = SAMPLE_SYS_ALIGN_WIDTH;
    s32Ret = HI_MPI_SYS_SetConf(&stSysConf);
还是不懂

jl3276

0个粉丝

8

问答

0

专栏

0

资料

jl3276 2016-09-10 10:38:51
认可0
这个结构体居然只有一个成员变量哎
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

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

Markdown 语法

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

举报类型

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

详细说明

易百纳技术社区