如题所示: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 720×576, 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 !!!
参考论坛上的
https://e2e.ti.com/support/dsp/davinci_digital_media_processors/f/717/p/339344/1247788?tisearch=e2e-quicksearch&keymatch=DVO2%20dm385#1247788
https://e2e.ti.com/support/dsp/davinci_digital_media_processors/f/717/p/339344/2204748#2204748
发现DVO2都是与HDMI或者HDCOMP绑定使用,
请问:1、DVO2能否独立输出模拟视频?
2、我以上配置对吗?还有哪些配置漏掉了?
谢谢
Chris Meng:
你好,
DVO2可以独立与HDMI输出数字信号,DVO2没有自带video ADC,不能直接输出模拟视频。
我手上有一份资料是基于DVR RDK4.0上去掉DVO2和HDMI时序绑定的修改,你参考看看是否有帮助。
lei xiao2:
回复 Chris Meng:
非常感谢 Chris Meng
首先纠正一下问题,我不是直接输出模拟视频,是要输出数字视频,分辨率为720*576 ;
需要DVO2独立输出;
我先看看你给的参考文档,谢谢
lei xiao2:
回复 Chris Meng:
孟工 你好:
参照你提供的文档,主要是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 = 27562SD 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才对是吧
以上配置都对吗?还是哪里没有配置?请指点指点,谢谢
lei xiao2:
回复 Chris Meng:
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,系统就重启?
Chris Meng:
回复 lei xiao2:
你好,
一般的video dac都不需要activeid的信号,你能否确认一下? 如果不需要该信号,就不需要配置这个pinmux。
另,请查看这个硬件是否有做其他用途导致你修改pinmux后对系统产生影响?