This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

DM385通过DVO2(VOUT0)输出PAL视频问题



如题所示:DM385通过DVO2(VOUT0)输出PAL视频问题请教

首先使用的是ipnc_rdk 3.8版本,采用 ENC->A8->DEC usecase,配置输出HDMI和PAL模拟视频均正常

现在需要使用DVO2输出PAL模拟视频,分辨率为720*576 

更改如下:

1、在ipnc_rdk\ipnc_mcfw\demos\mcfw_api_demos\multich_usecase\Ti_mcfw_ipnc_main.c文件中

 //Original Code 

//vdisParams.deviceParams[VDIS_DEV_DVO2].resolution = VSYS_STD_720P_60;

//Modified Code

vdisParams.deviceParams[VDIS_DEV_DVO2].resolution = VSYS_STD_PAL;

2、在ti_vdis.c 中函数Vdis_params_init

 //Original Code 

pContext->deviceParams[i].resolution = VSYS_STD_720P_60;

width = 1280;
height = 720;

if(i == VDIS_DEV_SD)
{
     pContext->deviceParams[i].resolution = VSYS_STD_PAL;
     width = 720;
     height = 576;
}

//Modified Code

if((i == VDIS_DEV_SD)||(i == VDIS_DEV_DVO2))
{
pContext->deviceParams[i].resolution = VSYS_STD_PAL;
width = 720;
height = 576;
}

3、在multich_encode_decode.c中配置

// gVdisModuleContext.displayId[VDIS_DEV_SD] = SYSTEM_LINK_ID_DISPLAY_2;
// gVdisModuleContext.displayId[VDIS_DEV_HDMI] = SYSTEM_LINK_ID_DISPLAY_0;
gVdisModuleContext.displayId[VDIS_DEV_DVO2] = SYSTEM_LINK_ID_DISPLAY_1;

……

/* display link params */
MULTICH_INIT_STRUCT(DisplayLink_CreateParams,displayPrm_SD);
displayPrm_SD.inQueParams[0].prevLinkId = gDupId1;//gSwOsdId;//gDupId1;
displayPrm_SD.inQueParams[0].prevLinkQueId = 0;

// HDMI DISPLAY
//displayPrm_SD.displayRes = gVdisModuleContext.vdisConfig.deviceParams[VDIS_DEV_HDMI].resolution;
//displayPrm_SD.displayId = DISPLAY_LINK_DISPLAY_SC1;

//PAL DISPLAY
// displayPrm_SD.displayRes = gVdisModuleContext.vdisConfig.deviceParams[VDIS_DEV_SD].resolution;
// displayPrm_SD.displayId = DISPLAY_LINK_DISPLAY_SD;

//LCD DISPLAY

displayPrm_SD.displayRes = gVdisModuleContext.vdisConfig.deviceParams[VDIS_DEV_DVO2].resolution;
displayPrm_SD.displayId = DISPLAY_LINK_DISPLAY_BP1;

这样配置完后,程序报错:

[m3video] 2593: DECODE: Create in progress ... !!!
[m3video] 2618: DECODE: Creating CH0 of 720 x 576 [PROGRESSIVE] [NON-TILED ],target bitrate = 10000 Kbps ...
[m3vpss ] 2647: DUP : Create Done !!!
[m3video] DECLINK_H264:HEAPID:0 USED:2408
[m3vpss ] 2648: DISPLAY: Create in progress !!!
[m3video] 2629: DECODE: All CH Create ... DONE !!!
[m3vpss ] DisplayId = 3,DataFormat = 7
[m3vpss ] SC2 displayInstId = 6
[m3vpss ] @@@@@@###### 2649: DISPLAY: 6: Window size 720x576, 896B
[m3vpss ] @@@@@@######: goto DisplayLink_drvSetDeiDispPrms
[m3video] DECLINK:HEAPID:0 USED:2448
[m3video] 2630: DECODE: Create ... DONE !!!
[m3vpss ] @@@@@@######:in DisplayLink_drvSetDeiDispPrms w:720 h:576
[m3video] 2630: IPC_OUT_M3 : Create in progress !!!
[m3video] 2632: IPC_OUT_M3 : Create Done !!!
[m3vpss ] @@@@@@######: status : -3
[m3vpss ] @@@@@@######: status2 : -3
[m3vpss ] 2651: Assertion @ Line: 868 in links_m3vpss/display/displayLink_drv.c: status == FVID2_SOK : failed !!!

参考论坛上的

e2e.ti.com/.../1247788

e2e.ti.com/.../2204748

发现DVO2都是与HDMI或者HDCOMP绑定使用,

请问:1、DVO2能否独立输出模拟视频?

            2、我以上配置对吗?还有哪些配置漏掉了?

谢谢

  • 你好,

    DVO2可以独立与HDMI输出数字信号,DVO2没有自带video ADC,不能直接输出模拟视频。

    我手上有一份资料是基于DVR RDK4.0上去掉DVO2和HDMI时序绑定的修改,你参考看看是否有帮助。

  • 非常感谢 Chris Meng 

        首先纠正一下问题,我不是直接输出模拟视频,是要输出数字视频,分辨率为720*576 ;

    需要DVO2独立输出;

      我先看看你给的参考文档,谢谢

  • 孟工 你好:

    参照你提供的文档,主要是TI814X 解绑DVO2的解释,参照该文档,我修改了以下几个地方;

    1、在/mcfw/src_bios6/links_m3vpss/system/system_dctrl.c中改为
    #if defined(TI_8107_BUILD)
    /* Display Controller Configuration */
    /* To tie DVO2 and HDCOMP together refer following Mesh */
    Vps_DcConfig gSystem_dctrlTriDisplayConfig = {
    VPS_DC_USERSETTINGS, /* Use Case */
    /* Edge information */
    {
    {VPS_DC_BP0_INPUT_PATH, VPS_DC_VCOMP_MUX},
    {VPS_DC_VCOMP_MUX, VPS_DC_VCOMP},
    {VPS_DC_CIG_NON_CONSTRAINED_OUTPUT, VPS_DC_HDMI_BLEND},


    {VPS_DC_BP1_INPUT_PATH, VPS_DC_HDCOMP_MUX},
    {VPS_DC_HDCOMP_MUX, VPS_DC_CIG_PIP_INPUT},
    {VPS_DC_CIG_PIP_OUTPUT, VPS_DC_DVO2_BLEND},


    {VPS_DC_GRPX0_INPUT_PATH, VPS_DC_HDMI_BLEND},
    {VPS_DC_GRPX1_INPUT_PATH, VPS_DC_DVO2_BLEND},


    {VPS_DC_MAIN_INPUT_PATH, VPS_DC_VCOMP},
    {VPS_DC_AUX_INPUT_PATH, VPS_DC_VCOMP_MUX},
    },
    10,
    /* VENC information */
    {
    /* Mode information */
    {
    {VPS_DC_VENC_HDMI, {FVID2_STD_1080P_60}
    }
    , /* 1080p30 is mode
    * is overwritten
    * later inside
    * System_displayCtrlInit
    */
    {VPS_DC_VENC_HDCOMP, {FVID2_STD_1080P_60}
    }, /* 1080p30 is mode
    * is overwritten
    * later inside
    * System_displayCtrlInit
    */

    {VPS_DC_VENC_SD, {FVID2_STD_NTSC}
    },

    {VPS_DC_VENC_DVO2, {FVID2_STD_PAL}
    }

    }
    ,
    // (VPS_DC_VENC_HDMI | VPS_DC_VENC_HDCOMP), /* Tied VENC bit * mask */
    0,

    4u /* Number of VENCs
    */
    }
    };
    #endif

    2、在ipnc_rdk/ipnc_mcfw/mcfw/src_bios6/links_m3vpss/system/system_dctrl_modeInfo.c中

    #if defined(TI_8107_BUILD)
    if(System_getVencMode(pPrm->deviceParams[SYSTEM_DC_VENC_HDMI].resolution) != FVID2_STD_CUSTOM)
    {
    gSystem_objVpss.displayCtrlCfg.vencInfo.modeInfo[0].mInfo.standard =
    System_getVencMode(pPrm->deviceParams[SYSTEM_DC_VENC_HDMI].resolution);
    }
    else
    {
    retVal = System_setVencModeInfo(0, pPrm->deviceParams[SYSTEM_DC_VENC_HDMI].resolution);
    UTILS_assert(0 == retVal);
    }

    if(System_getVencMode(pPrm->deviceParams[SYSTEM_DC_VENC_HDCOMP].resolution) != FVID2_STD_CUSTOM)
    {
    gSystem_objVpss.displayCtrlCfg.vencInfo.modeInfo[1].mInfo.standard =
    System_getVencMode(pPrm->deviceParams[SYSTEM_DC_VENC_HDCOMP].resolution);
    }
    else
    {
    retVal = System_setVencModeInfo(1, pPrm->deviceParams[SYSTEM_DC_VENC_HDCOMP].resolution);
    UTILS_assert(0 == retVal);
    }

    if(System_getVencMode(pPrm->deviceParams[SYSTEM_DC_VENC_SD].resolution) != FVID2_STD_CUSTOM)
    {
    gSystem_objVpss.displayCtrlCfg.vencInfo.modeInfo[2].mInfo.standard =
    System_getVencMode(pPrm->deviceParams[SYSTEM_DC_VENC_SD].resolution);
    }
    else
    {
    retVal = System_setVencModeInfo(2, pPrm->deviceParams[SYSTEM_DC_VENC_SD].resolution);
    UTILS_assert(0 == retVal);
    }
    //add xiaolei

    if(System_getVencMode(pPrm->deviceParams[SYSTEM_DC_VENC_DVO2].resolution) != FVID2_STD_CUSTOM)
    {
    gSystem_objVpss.displayCtrlCfg.vencInfo.modeInfo[3].mInfo.standard =
    System_getVencMode(pPrm->deviceParams[SYSTEM_DC_VENC_DVO2].resolution);
    }
    else
    {
    retVal = System_setVencModeInfo(3, pPrm->deviceParams[SYSTEM_DC_VENC_DVO2].resolution);
    UTILS_assert(0 == retVal);
    }
    #endif

    3、在ti_mcfw_ipnc_main.c中

     vdisParams.deviceParams[VDIS_DEV_DVO2].resolution = VSYS_STD_PAL;

    4、在ti_vids文件Void Vdis_params_init(VDIS_PARAMS_S * pContext)函数中

    //  pContext->tiedDevicesMask = VDIS_VENC_HDMI | VDIS_VENC_DVO2;

    pContext->tiedDevicesMask = 0;

    pContext->enableConfigExtVideoEncoder = TRUE;

    5、在 ipnc_mcfw/mcfw/src_linux/mcfw_api/usecases/multich_encode_decode.c中设置

    // gVdisModuleContext.displayId[VDIS_DEV_SD] = SYSTEM_LINK_ID_DISPLAY_2;
    // gVdisModuleContext.displayId[VDIS_DEV_HDMI] = SYSTEM_LINK_ID_DISPLAY_0;
    gVdisModuleContext.displayId[VDIS_DEV_DVO2] = SYSTEM_LINK_ID_DISPLAY_1;

    ……

    // HDMI DISPLAY
    //displayPrm_SD.displayRes = gVdisModuleContext.vdisConfig.deviceParams[VDIS_DEV_HDMI].resolution;
    //displayPrm_SD.displayId = DISPLAY_LINK_DISPLAY_SC1;

    //PAL DISPLAY
    // displayPrm_SD.displayRes = gVdisModuleContext.vdisConfig.deviceParams[VDIS_DEV_SD].resolution;
    // displayPrm_SD.displayId = DISPLAY_LINK_DISPLAY_SD;

    //LCD DISPLAY

    displayPrm_SD.displayRes = gVdisModuleContext.vdisConfig.deviceParams[VDIS_DEV_DVO2].resolution;
    displayPrm_SD.displayId = DISPLAY_LINK_DISPLAY_BP1;

    ……


    以上修改后,程序报错:

    [host] MCFW_IPCBITS:App_ipcBitsRecvStreamFxn:Entered...
    [host] MCFW_IPCFRAMES:App_ipcFramesSendRecvFxn:Entered...
    [host] Vsys_allocBuf - addr = 0x51e5b000,size = 27562
    SD Inserted

    [host] DCC buffer allocated for size 27562

    [host] DCC Default File Intialization Done

    [host] Before System_linkControl SYSTEM_M3VPSS_CMD_GET_DISPLAYCTRL_INIT
    [m3vpss ] tiedVencs ##########################
    mount: mounting /dev/mmcblk0 on /mnt/mmc failed: Invalid argument
    [m3vpss ] VPS_DCTRL_INST_0
    [m3vpss ] IOCTL_VPS_DCTRL_SET_VENC_OUTPUT SYSTEM_DC_VENC_DVO2
    [m3vpss ] IOCTL_VPS_DCTRL_SET_VENC_OUTPUT SYSTEM_DC_VENC_HDMI
    [m3vpss ] IOCTL_VPS_DCTRL_SET_VENC_OUTPUT SYSTEM_DC_VENC_SD
    [m3vpss ] IOCTL_VPS_DCTRL_SET_VENC_OUTPUT SYSTEM_DC_VENC_HDCOMP
    [m3vpss ] IOCTL_VPS_DCTRL_SET_VENC_CLK_SRC ###################
    [m3vpss ] HDCOMPCLK
    [m3vpss ] 2402: Assertion @ Line: 708 in links_m3vpss/system/system_dctrl.c: retVal == FVID2_SOK : failed !!!
    inside autorun

    另外我测试HS/VS/CLK都有信号,测试值为74.25M,30HZ

    理论上VSYS_STD_PAL应该是27M才对是吧

    以上配置都对吗?还是哪里没有配置?请指点指点,谢谢




  • hi  Chris Meng

    我在论坛上看到说将DVO2的有引脚复用,需要改为

    /* Vout 0 configuration DVO2 Function 1 */
    /* TODO There are two pins for the fid. Need to see whichone is used */
    REG32(CSL_TI814x_CTRL_MODULE_BASE + 0x0AB8) = 0x1 /* vout0_fid_mux1 */
    REG32(CSL_TI814x_CTRL_MODULE_BASE + 0x0ABC) = 0x1; /* vout0_clk */
    REG32(CSL_TI814x_CTRL_MODULE_BASE + 0x0AC0) = 0x1; /* vout0_hsync */
    REG32(CSL_TI814x_CTRL_MODULE_BASE + 0x0AC4) = 0x1; /* vout0_vsync */
    REG32(CSL_TI814x_CTRL_MODULE_BASE + 0x0AC8) = 0x1;//0x80;/* vout0_avid */  ,j,将此值改为1,系统就重启?

    REG32(CSL_TI814x_CTRL_MODULE_BASE + 0x0ACC) = 0x1; /* vout0_b_cb_c[2]
    */
    REG32(CSL_TI814x_CTRL_MODULE_BASE + 0x0AD0) = 0x1; /* vout0_b_cb_c[3]
    */
    REG32(CSL_TI814x_CTRL_MODULE_BASE + 0x0AD4) = 0x1; /* vout0_b_cb_c[4]
    */
    REG32(CSL_TI814x_CTRL_MODULE_BASE + 0x0AD8) = 0x1; /* vout0_b_cb_c[5]
    */
    REG32(CSL_TI814x_CTRL_MODULE_BASE + 0x0ADC) = 0x1; /* vout0_b_cb_c[6]
    */
    REG32(CSL_TI814x_CTRL_MODULE_BASE + 0x0AE0) = 0x1; /* vout0_b_cb_c[7]
    */
    REG32(CSL_TI814x_CTRL_MODULE_BASE + 0x0AE4) = 0x1; /* vout0_b_cb_c[8]
    */
    REG32(CSL_TI814x_CTRL_MODULE_BASE + 0x0AE8) = 0x1; /* vout0_b_cb_c[9]
    */
    REG32(CSL_TI814x_CTRL_MODULE_BASE + 0x0AEC) = 0x1; /* vout0_g_y_yc[2]
    */
    REG32(CSL_TI814x_CTRL_MODULE_BASE + 0x0AF0) = 0x1; /* vout0_g_y_yc[3]
    */
    REG32(CSL_TI814x_CTRL_MODULE_BASE + 0x0AF4) = 0x1; /* vout0_g_y_yc[4]
    */
    REG32(CSL_TI814x_CTRL_MODULE_BASE + 0x0AF8) = 0x1; /* vout0_g_y_yc[5]
    */
    REG32(CSL_TI814x_CTRL_MODULE_BASE + 0x0AFC) = 0x1; /* vout0_g_y_yc[6]
    */
    REG32(CSL_TI814x_CTRL_MODULE_BASE + 0x0B00) = 0x1; /* vout0_g_y_yc[7]
    */
    REG32(CSL_TI814x_CTRL_MODULE_BASE + 0x0B04) = 0x1; /* vout0_g_y_yc[8]
    */
    REG32(CSL_TI814x_CTRL_MODULE_BASE + 0x0B08) = 0x1; /* vout0_g_y_yc[9]
    */
    REG32(CSL_TI814x_CTRL_MODULE_BASE + 0x0B0C) = 0x1; /* vout0_r_cr[2] */
    REG32(CSL_TI814x_CTRL_MODULE_BASE + 0x0B10) = 0x1; /* vout0_r_cr[3] */
    REG32(CSL_TI814x_CTRL_MODULE_BASE + 0x0B14) = 0x1; /* vout0_r_cr[4] */
    REG32(CSL_TI814x_CTRL_MODULE_BASE + 0x0B18) = 0x1; /* vout0_r_cr[5] */
    REG32(CSL_TI814x_CTRL_MODULE_BASE + 0x0B1C) = 0x1; /* vout0_r_cr[6] */
    REG32(CSL_TI814x_CTRL_MODULE_BASE + 0x0B20) = 0x1; /* vout0_r_cr[7] */
    REG32(CSL_TI814x_CTRL_MODULE_BASE + 0x0B24) = 0x1; /* vout0_r_cr[8] */
    REG32(CSL_TI814x_CTRL_MODULE_BASE + 0x0B28) = 0x1; /* vout0_r_cr[9] */

    如上,将REG32(CSL_TI814x_CTRL_MODULE_BASE + 0x0AC8) = 0x1;//0x80;/* vout0_avid */  ,j,将此值改为1,系统就重启?


  • 你好,

    一般的video dac都不需要activeid的信号,你能否确认一下? 如果不需要该信号,就不需要配置这个pinmux。

    另,请查看这个硬件是否有做其他用途导致你修改pinmux后对系统产生影响?