Quantcast
Channel: 数字信号处理器 (DSP) & ARM® 微处理器
Viewing all articles
Browse latest Browse all 21822

帖子: 链路cap+osd+swms+dis HDMI输出屏幕没有显示

$
0
0

大家好,我目前用的平台是DM8168 开发包DVRRDK_02.00.00.23  仿照multich_vcap_vdis.c修改的link参数,想要做到不用编解码,在osd添加图像算法,直接通过HDMI显示出来。链路如下:

/*
Capture (YUV422I) 16CH D1 60fps
|
|
|
IpcFramesOutvpss Link ---------IpcFramesIndsp Link----------algosd link
|
|
|
SW Mosaic
(SC5 YUV422I)
|
|
|
|
display link
Off-Chip HDMI
1080p60
*/

出现的问题:屏幕一片黑,没有视频,只是一闪一闪

修改的各个link参数如下:

Void MultiCh_createVcapVdis()
{
CaptureLink_CreateParams capturePrm;
SwMsLink_CreateParams swMsPrm;
DisplayLink_CreateParams displayPrm;
AlgLink_CreateParams dspAlgPrm;

IpcFramesInLinkRTOS_CreateParams ipcFramesInDspPrm;
IpcFramesOutLinkRTOS_CreateParams ipcFramesOutVpssPrm;

CaptureLink_VipInstParams *pCaptureInstPrm;
CaptureLink_OutParams *pCaptureOutPrm;

VCAP_VIDDEC_PARAMS_S vidDecVideoModeArgs[NUM_CAPTURE_DEVICES];

//UInt32 deiOutQue;

UInt32 vipInstId;
UInt32 i;
//UInt32 numSubChains;
//Bool enableSdtv;

MULTICH_INIT_STRUCT(CaptureLink_CreateParams,capturePrm);
MULTICH_INIT_STRUCT(IpcFramesOutLinkRTOS_CreateParams,ipcFramesOutVpssPrm);
MULTICH_INIT_STRUCT(IpcFramesInLinkRTOS_CreateParams,ipcFramesInDspPrm);
MULTICH_INIT_STRUCT(AlgLink_CreateParams,dspAlgPrm);
MULTICH_INIT_STRUCT(SwMsLink_CreateParams ,swMsPrm);
MULTICH_INIT_STRUCT(DisplayLink_CreateParams,displayPrm);

System_init();

MultiCh_detectBoard();

System_linkControl(SYSTEM_LINK_ID_M3VPSS , SYSTEM_M3VPSS_CMD_RESET_VIDEO_DEVICES , NULL , 0 , TRUE);

gVcapModuleContext.captureId = SYSTEM_LINK_ID_CAPTURE;
gVcapModuleContext.ipcFramesOutVpssId[0] = SYSTEM_VPSS_LINK_ID_IPC_FRAMES_OUT_0;
gVcapModuleContext.ipcFramesInDspId[0] = SYSTEM_DSP_LINK_ID_IPC_FRAMES_IN_0;
gVcapModuleContext.dspAlgId[0] = SYSTEM_LINK_ID_ALG_0;

gVdisModuleContext.swMsId[0] = SYSTEM_LINK_ID_SW_MS_MULTI_INST_0;
gVdisModuleContext.swMsId[1] = SYSTEM_LINK_ID_SW_MS_MULTI_INST_1;

gVdisModuleContext.displayId[0] = SYSTEM_LINK_ID_DISPLAY_0; // ON CHIP HDMI
gVdisModuleContext.displayId[1] = SYSTEM_LINK_ID_DISPLAY_1; // OFF CHIP HDMI
gVdisModuleContext.displayId[2] = SYSTEM_LINK_ID_DISPLAY_2; // OFF CHIP HDMI
#if 0 /* Enabling graphics only for ON CHIP HDMI an OFF CHIP HDMI*/
//grpxId[2] = SYSTEM_LINK_ID_GRPX_2;
#endif
//numSubChains = 2;
//deiOutQue = DEI_LINK_OUT_QUE_VIP_SC;
//enableSdtv = FALSE;

CaptureLink_CreateParams_Init(&capturePrm);
capturePrm.numVipInst = 1;
capturePrm.outQueParams[0].nextLink = gVcapModuleContext.ipcFramesOutVpssId[0];
capturePrm.tilerEnable = FALSE;
capturePrm.enableSdCrop = FALSE;

for(vipInstId=0; vipInstId<capturePrm.numVipInst; vipInstId++)
{
pCaptureInstPrm = &capturePrm.vipInst[vipInstId];
pCaptureInstPrm->vipInstId = SYSTEM_CAPTURE_INST_VIP0_PORTA;

pCaptureInstPrm->videoDecoderId = SYSTEM_DEVICE_VID_DEC_TVP5158_DRV;
pCaptureInstPrm->inDataFormat = SYSTEM_DF_YUV422P;
pCaptureInstPrm->standard = SYSTEM_STD_1080P_60;
pCaptureInstPrm->numOutput = 1;

pCaptureOutPrm = &pCaptureInstPrm->outParams[0];
pCaptureOutPrm->dataFormat = SYSTEM_DF_YUV422I_YUYV;
pCaptureOutPrm->scEnable = FALSE;
pCaptureOutPrm->scOutWidth = 0;
pCaptureOutPrm->scOutHeight = 0;
pCaptureOutPrm->outQueId = 0;
}

IpcFramesOutLinkRTOS_CreateParams_Init(&ipcFramesOutVpssPrm);
ipcFramesOutVpssPrm.baseCreateParams.inQueParams.prevLinkId = gVcapModuleContext.captureId;
ipcFramesOutVpssPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
ipcFramesOutVpssPrm.baseCreateParams.inputFrameRate = 25;
ipcFramesOutVpssPrm.baseCreateParams.outputFrameRate = 25;
ipcFramesOutVpssPrm.baseCreateParams.notifyPrevLink = TRUE;
//ipcFramesOutVpssPrm.baseCreateParams.equallyDivideChAcrossOutQues = TRUE; //DVRRDK_02.00.00.23
ipcFramesOutVpssPrm.baseCreateParams.numOutQue =1;
ipcFramesOutVpssPrm.baseCreateParams.outQueParams[0].nextLink= gVdisModuleContext.swMsId[0];
ipcFramesOutVpssPrm.baseCreateParams.processLink = gVcapModuleContext.ipcFramesInDspId[0];
ipcFramesOutVpssPrm.baseCreateParams.notifyProcessLink = TRUE;
ipcFramesOutVpssPrm.baseCreateParams.notifyNextLink = TRUE;
ipcFramesOutVpssPrm.baseCreateParams.noNotifyMode = FALSE;//TRUE;

IpcFramesInLinkRTOS_CreateParams_Init(&ipcFramesInDspPrm);
ipcFramesInDspPrm.baseCreateParams.inQueParams.prevLinkId =gVcapModuleContext.ipcFramesOutVpssId[0];
ipcFramesInDspPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
ipcFramesInDspPrm.baseCreateParams.numOutQue = 1;
ipcFramesInDspPrm.baseCreateParams.outQueParams[0].nextLink = gVcapModuleContext.dspAlgId[0];
ipcFramesInDspPrm.baseCreateParams.inputFrameRate = 25;
ipcFramesInDspPrm.baseCreateParams.outputFrameRate = 25;
ipcFramesInDspPrm.baseCreateParams.notifyNextLink =TRUE;
ipcFramesInDspPrm.baseCreateParams.notifyPrevLink = TRUE;
ipcFramesInDspPrm.baseCreateParams.noNotifyMode = FALSE;

AlgLink_CreateParams_Init(&dspAlgPrm);
dspAlgPrm.inQueParams.prevLinkId = gVcapModuleContext.ipcFramesInDspId[0];
dspAlgPrm.inQueParams.prevLinkQueId = 0;
dspAlgPrm.enableOSDAlg = TRUE;
dspAlgPrm.enableSCDAlg = FALSE;
dspAlgPrm.osdChCreateParams[0].maxHeight =64;
dspAlgPrm.osdChCreateParams[0].maxWidth =320;
AlgLink_OsdChWinParams *chWinPrm=&dspAlgPrm.osdChCreateParams[0].chDefaultParams;
chWinPrm->chId =0 ;
chWinPrm->numWindows =1;
//chWinPrm->colorKey[0] = 0xfa; /* Y */
//chWinPrm->colorKey[1] = 0x7e; /* U */
//chWinPrm->colorKey[2] = 0x7d; /* V */
chWinPrm->winPrm[0].startX = EXAMPLE_OSD_WIN0_STARTX;
chWinPrm->winPrm[0].startY = EXAMPLE_OSD_WIN0_STARTY;
chWinPrm->winPrm[0].format = SYSTEM_DF_YUV422I_YUYV;
chWinPrm->winPrm[0].width = EXAMPLE_OSD_WIN_MAX_WIDTH;
chWinPrm->winPrm[0].height = EXAMPLE_OSD_WIN_MAX_HEIGHT;
chWinPrm->winPrm[0].lineOffset = EXAMPLE_OSD_WIN_PITCH;
chWinPrm->winPrm[0].globalAlpha= EXAMPLE_OSD_GLOBAL_ALPHA;
chWinPrm->winPrm[0].transperencyEnable = EXAMPLE_OSD_TRANSPARENCY;
chWinPrm->winPrm[0].enableWin= EXAMPLE_OSD_ENABLE_WIN;

//??????????
for(i = 0; i < NUM_CAPTURE_DEVICES; i++) //NUM_CAPTURE_DEVICES=4 -->0
{
vidDecVideoModeArgs[i].videoIfMode = DEVICE_CAPT_VIDEO_IF_MODE_8BIT;
vidDecVideoModeArgs[i].videoDataFormat = SYSTEM_DF_YUV422P;
vidDecVideoModeArgs[i].standard = SYSTEM_STD_1080P_60; //1080p60
vidDecVideoModeArgs[i].videoCaptureMode =
DEVICE_CAPT_VIDEO_CAPTURE_MODE_MULTI_CH_PIXEL_MUX_EMBEDDED_SYNC;
vidDecVideoModeArgs[i].videoSystem =
DEVICE_VIDEO_DECODER_VIDEO_SYSTEM_AUTO_DETECT;
vidDecVideoModeArgs[i].videoCropEnable = FALSE;
vidDecVideoModeArgs[i].videoAutoDetectTimeout = -1;
}

Vcap_configVideoDecoder(vidDecVideoModeArgs, NUM_CAPTURE_DEVICES);

MultiCh_displayCtrlInit(&gVdisModuleContext.vdisConfig);

swMsPrm.numSwMsInst = 1;
swMsPrm.swMsInstId[0] = SYSTEM_SW_MS_SC_INST_SC5;
//swMsPrm.swMsInstId[1] = SYSTEM_SW_MS_SC_INST_SC5;

swMsPrm.inQueParams.prevLinkId = gVcapModuleContext.ipcFramesOutVpssId[0];
swMsPrm.inQueParams.prevLinkQueId = 0;
swMsPrm.outQueParams.nextLink = gVdisModuleContext.displayId[0];
swMsPrm.maxInputQueLen = SYSTEM_SW_MS_DEFAULT_INPUT_QUE_LEN;
swMsPrm.maxOutRes = VSYS_STD_1080P_60;
swMsPrm.lineSkipMode = TRUE;
swMsPrm.enableLayoutGridDraw = gVdisModuleContext.vdisConfig.enableLayoutGridDraw;
MultiCh_swMsGetDefaultLayoutPrm(0, &swMsPrm, FALSE);

displayPrm.inQueParams[0].prevLinkId = gVdisModuleContext.swMsId[0];
displayPrm.inQueParams[0].prevLinkQueId = 0;
displayPrm.displayRes = VSYS_STD_1080P_60;
#ifndef SYSTEM_USE_VIDEO_DECODER
//capturePrm.isPalMode = Vcap_isPalMode();
#endif

System_linkCreate(gVcapModuleContext.captureId, &capturePrm, sizeof(capturePrm));
System_linkCreate(gVcapModuleContext.ipcFramesOutVpssId[0], &ipcFramesOutVpssPrm, sizeof(ipcFramesOutVpssPrm));
System_linkCreate(gVcapModuleContext.ipcFramesInDspId[0], &ipcFramesInDspPrm, sizeof(ipcFramesInDspPrm));
System_linkCreate(gVcapModuleContext.dspAlgId[0] , &dspAlgPrm, sizeof(dspAlgPrm));
System_linkCreate(gVdisModuleContext.swMsId[0] , &swMsPrm, sizeof(swMsPrm));
System_linkCreate(gVdisModuleContext.displayId[0], &displayPrm, sizeof(displayPrm));

System_linkStart(gVdisModuleContext.displayId[0]);
System_linkStart(gVdisModuleContext.swMsId[0]);
System_linkStart(gVcapModuleContext.dspAlgId[0]);
System_linkStart(gVcapModuleContext.ipcFramesInDspId[0]);
System_linkStart(gVcapModuleContext.ipcFramesOutVpssId[0]);
System_linkStart(gVcapModuleContext.captureId);

MultiCh_memPrintHeapStatus();

}

串口打印的日志:

[m3vpss ] 38793: CAPTURE: Create in progress !!!
[m3vpss ] 38821: CAPTURE: VIP0 PortA capture mode is [ 8-bit, Pixel-mux Embedd
ed Sync] !!!
[c6xdsp ] 35406: IPC_FRAMES_IN : Create in progress !!!
[c6xdsp ] 35406: SYSTEM: Opening ListMP [VPSS-M3_IPC_OUT_23] ...
[c6xdsp ] 35406: SYSTEM: Opening ListMP [VPSS-M3_IPC_IN_23] ...
[m3vpss ] CAPTURE::HEAPID:0 USED:192
[c6xdsp ] 35407: SYSTEM: Opening MsgQ [VPSS-M3_MSGQ] ...
[m3vpss ] 38915: CAPTURE: Create Done !!!
[m3vpss ] 38915: IPC_FRAMES_OUT : Create in progress !!!
[m3vpss ] 38917: IPC_FRAMES_OUT : Create Done !!!
[c6xdsp ] IPC_FRAMES_IN:HEAPID:0 USED:240
[m3vpss ] 38930: SWMS: Create in progress !!!
[c6xdsp ] 35408: IPC_FRAMES_IN : Create Done !!!
[c6xdsp ] 35410: ALG : Create in progress !!!
[c6xdsp ] ALGLINK:HEAPID:0 USED:2968
[c6xdsp ] ALGLINK:HEAPID:1 USED:5584
[c6xdsp ] 35416: ALG : Create Done !!!
[m3vpss ] UTILS: DMA: Allocated CH (TCC) = 58 (58)
[m3vpss ] SWMS: instance 0, sc id 5, start win 0 end win 17
[m3vpss ] 39050: SWMS : Loading Up-scaling Co-effs ...
[m3vpss ] 39050: SWMS : Co-effs Loading ... DONE !!!
[m3vpss ] 39050: SWMS : ******* Configuring clock 30 secs...
[m3vpss ]
[m3vpss ] *** [SWMS0] Mosaic Parameters ***
[m3vpss ]
[m3vpss ] Output FPS: 30
[m3vpss ]
[m3vpss ] Win | Ch | Input | Input | Input | Input
| Output | Output | Output | Output | Low Cost | SWMS
| Data |
[m3vpss ] Num | Num | Start X, Y | Width x Height | Pitch Y / C | Memory Typ
e | Start X, Y | Width x Height | Pitch Y / C | Memory Type | ON / OFF | Inst
| Format|
[m3vpss ] --------------------------------------------------------------------
--------------------------------------------------------------------------------
----------
[m3vpss ] 0 | 0 | 0, 0 | 720 x 240 | 1472 / 1472 | NON-TILED
| 0, 0 | 1920 x 1080 | 3840 / 0 | NON-TILED | OFF | 0
| 422I |
[m3vpss ]
[m3vpss ] 39051: SWMS: Create Done !!!
[m3vpss ] 39051: DISPLAY: Create in progress !!!
[m3vpss ] 39052: DISPLAY: Create Done !!!
[m3vpss ] 39052: DISPLAY: Start in progress !!!
[m3vpss ]
[m3vpss ] *** UTILS: DM_TIMER[2] KHz = 27000 Khz ***
[m3vpss ]
[m3vpss ] 39117: DISPLAY: Start Done !!!
[m3vpss ] 39117: DISPLAY: HDDAC(BP0) : 30 fps, Latency (Min / Max) = ( 255 / 0
), Callback Interval (Min / Max) = ( 255 / 0 ) !!!
[m3vpss ] 39117: DISPLAY: UNDERFLOW COUNT: HDMI(BP0) 1, HDDAC(BP0) 1, DVO2(BP1
) 0, SDDAC(SEC1) 0
[m3vpss ] 39117: SYSTEM : Heap Free Space (System = 21504 bytes, SR0 = 143973
12 bytes, FrmBuf = 459064192 bytes,
[m3vpss ] BitBuf = 101711744 bytes, Mbx = 10238 msgs)
[m3vpss ] 39118: SWMS: Start in Progress !!!
[m3vpss ] 39118: SWMS: Start Done !!!
[m3vpss ] 39119: CAPTURE: Start in progress !!!
[m3vpss ] 39119: CAPTURE: Start Done !!!

=============
Run-Time Menu
=============

1: Capture Settings
2: Encode Settings
3: Decode Settings
4: Display Settings
5: Audio Settings

i: Print detailed system information

e: Stop Demo

Enter Choice: [m3vpss ] 39243: CAPTURE: Fields = 0 (fps = 0), Total Resets =
0 (Avg 0 ms per reset)
[m3vpss ] DMTIMER_TEST:TotElapsed:29978:NumUpdates:999

请教各位前辈哪里有问题?谢谢


Viewing all articles
Browse latest Browse all 21822

Trending Articles