I want to achieve that :
Capture
|
|
IPC Frames Out(M3)--<<process link>>--IPC Frames In DSP---OSD link
codes:
Void Chains_singleChCapOsdDis(Chains_Ctrl *chainsCfg) {
CaptureLink_CreateParams capturePrm; CaptureLink_VipInstParams *pCaptureInstPrm; CaptureLink_OutParams *pCaptureOutPrm; AlgLink_CreateParams osdPrm; // DisplayLink_CreateParams displayPrm;// NullLink_CreateParams snkPrm;//1
IpcFramesInLinkRTOS_CreateParams ipcFramesInDspPrm;
IpcFramesOutLinkRTOS_CreateParams ipcFramesOutVpssPrm;
IpcFramesInLinkHLOS_CreateParams ipcFramesInHostPrm;//11
UInt32 captureId;
UInt32 vipInstId;
UInt32 osdId;
UInt32 snkId;//2
UInt32 ipcFramesInHost;
Uint32 ipcFramesOutVpssId, ipcFramesInDspId;
int i, j;
Ptr osdWinSrAddr[ALG_LINK_OSD_MAX_CH][CHAINS_OSD_NUM_WINDOWS];
Ptr osdWinBuPtr[ALG_LINK_OSD_MAX_CH][CHAINS_OSD_NUM_WINDOWS];
char ch;
CHAINS_INIT_STRUCT(CaptureLink_CreateParams, capturePrm); //
CHAINS_INIT_STRUCT(IpcFramesInLinkRTOS_CreateParams,ipcFramesInDspPrm);
CHAINS_INIT_STRUCT(IpcFramesOutLinkRTOS_CreateParams,ipcFramesOutVpssPrm); // CHAINS_INIT_STRUCT(IpcBitsOutLinkHLOS_CreateParams,ipcFramesInHostPrm);//
CHAINS_INIT_STRUCT(IpcFramesInLinkHLOS_CreateParams ,ipcFramesInHostPrm);//33 // CHAINS_INIT_STRUCT(IpcFramesOutLinkHLOS_CreateParams ,ipcFramesOutHostPrm);//33
CHAINS_INIT_STRUCT(AlgLink_CreateParams,osdPrm);
captureId = SYSTEM_LINK_ID_CAPTURE;
osdId = SYSTEM_LINK_ID_ALG_0; //
snkId= SYSTEM_VPSS_LINK_ID_NULL_0;//3
ipcFramesInHost = SYSTEM_HOST_LINK_ID_IPC_FRAMES_IN_0;//44 //
ipcFramesOutVpssId = SYSTEM_VPSS_LINK_ID_IPC_FRAMES_OUT_0; ipcFramesInDspId = SYSTEM_DSP_LINK_ID_IPC_FRAMES_IN_0;
capturePrm.numVipInst = 1; capturePrm.tilerEnable = FALSE; capturePrm.numBufsPerCh = CAPTURE_LINK_NUM_BUFS_PER_CH_DEFAULT; capturePrm.numExtraBufs = 0; capturePrm.maxBlindAreasPerCh = 0; capturePrm.isPalMode = FALSE; capturePrm.enableSdCrop = FALSE; capturePrm.doCropInCapture = FALSE;
for(vipInstId=0; vipInstId<capturePrm.numVipInst; vipInstId++)
{
pCaptureInstPrm = &capturePrm.vipInst[vipInstId];
pCaptureInstPrm->vipInstId = (SYSTEM_CAPTURE_INST_VIP0_PORTA+vipInstId*2)SYSTEM_CAPTURE_INST_MAX;
pCaptureInstPrm->videoDecoderId = SYSTEM_DEVICE_VID_DEC_TVP7002_DRV;
pCaptureInstPrm->inDataFormat = SYSTEM_DF_YUV422P;
pCaptureInstPrm->standard = chainsCfg->displayRes[0];
//pCaptureInstPrm->standard = SYSTEM_STD_1080P_60;
pCaptureInstPrm->numOutput = 1;
pCaptureInstPrm->numChPerOutput = 1;
pCaptureOutPrm = &pCaptureInstPrm->outParams[0];
pCaptureOutPrm->dataFormat = SYSTEM_DF_YUV422I_YUYV;
pCaptureOutPrm->scEnable = FALSE;
pCaptureOutPrm->scOutWidth = chainsCfg->channelConf[0].width;
pCaptureOutPrm->scOutHeight = chainsCfg->channelConf[0].height;
pCaptureOutPrm->outQueId = 0;
}
capturePrm.outQueParams[0].nextLink = ipcFramesOutVpssId;
System_linkCreate(captureId, &capturePrm, sizeof(capturePrm));
chainsCfg->displayRes[0] = capturePrm.vipInst[0].standard;
Vsys_getResSize(chainsCfg->displayRes[0], &chainsCfg->channelConf[0].width, &chainsCfg->channelConf[0].height);
Vsys_getResRate(chainsCfg->displayRes[0], &chainsCfg->channelConf[0].frameRate);
ipcFramesOutVpssPrm.baseCreateParams.inQueParams.prevLinkId = captureId; ipcFramesOutVpssPrm.baseCreateParams.inQueParams.prevLinkQueId = 0; ipcFramesOutVpssPrm.baseCreateParams.notifyPrevLink = FALSE; // ipcFramesOutVpssPrm.baseCreateParams.notifyPrevLink = TRUE;
ipcFramesOutVpssPrm.baseCreateParams.numOutQue = 1; // ipcFramesOutVpssPrm.baseCreateParams.outQueParams[0].nextLink = displayId;// ipcFramesOutVpssPrm.baseCreateParams.outQueParams[0].nextLink = ipcFramesInHost;//44 // ipcFramesOutVpssPrm.baseCreateParams.outQueParams[0].nextLink = snkId;//4 ipcFramesOutVpssPrm.baseCreateParams.notifyNextLink = TRUE;
ipcFramesOutVpssPrm.baseCreateParams.processLink = ipcFramesInDspId; ipcFramesOutVpssPrm.baseCreateParams.notifyProcessLink = TRUE;//FALSE; ipcFramesOutVpssPrm.baseCreateParams.noNotifyMode = FALSE;
ipcFramesInDspPrm.baseCreateParams.inQueParams.prevLinkId = ipcFramesOutVpssId; ipcFramesInDspPrm.baseCreateParams.inQueParams.prevLinkQueId = 0; ipcFramesInDspPrm.baseCreateParams.numOutQue = 1; ipcFramesInDspPrm.baseCreateParams.outQueParams[0].nextLink = osdId; ipcFramesInDspPrm.baseCreateParams.notifyPrevLink = FALSE; // ipcFramesInDspPrm.baseCreateParams.notifyPrevLink = TRUE; ipcFramesInDspPrm.baseCreateParams.notifyNextLink = TRUE; ipcFramesInDspPrm.baseCreateParams.noNotifyMode = FALSE;
osdPrm.enableOSDAlg = TRUE;
osdPrm.enableSCDAlg = FALSE;
osdPrm.inQueParams.prevLinkId = ipcFramesInDspId;
osdPrm.inQueParams.prevLinkQueId = 0;
for(i=0; i<1; i++)
{ // set osd window max width and height
osdPrm.osdChCreateParams[i].maxWidth = CHAINS_OSD_WIN_MAX_WIDTH; osdPrm.osdChCreateParams[i].maxHeight = CHAINS_OSD_WIN_MAX_HEIGHT;
// set osd window params
AlgLink_OsdChWinParams * chWinPrm = &osdPrm.osdChCreateParams[i].chDefaultParams;
chWinPrm->chId = i;
chWinPrm->numWindows = CHAINS_OSD_NUM_WINDOWS;
chWinPrm->colorKey[0] = 0xfa; // Y
//chWinPrm->colorKey[0] = 0xff; // Y
chWinPrm->colorKey[1] = 0x7e; // U
//chWinPrm->colorKey[1] = 0x80; // U
chWinPrm->colorKey[2] = 0x7d; // V
//chWinPrm->colorKey[2] = 0x80; // V
chWinPrm->winPrm[0].startX = CHAINS_OSD_WIN0_STARTX;
chWinPrm->winPrm[0].startY = CHAINS_OSD_WIN0_STARTY;
for(j=0; j < chWinPrm->numWindows; j++)
{
Chains_createBuf(&chWinPrm->winPrm[j].addr[0][0], &osdWinBuPtr[i][j], &osdWinSrAddr[i][j], CHAINS_OSD_WIN_WIDTH * CHAINS_OSD_WIN_HEIGHT*2, SYSTEM_IPC_SR_NON_CACHED_DEFAULT);
chWinPrm->winPrm[j].format = SYSTEM_DF_YUV422I_YUYV;
chWinPrm->winPrm[j].width = CHAINS_OSD_WIN_WIDTH;
chWinPrm->winPrm[j].height = CHAINS_OSD_WIN_HEIGHT;
chWinPrm->winPrm[j].lineOffset = CHAINS_OSD_WIN_PITCH;
chWinPrm->winPrm[j].globalAlpha = CHAINS_OSD_GLOBAL_ALPHA;
chWinPrm->winPrm[j].transperencyEnable = CHAINS_OSD_TRANSPARENCY;
chWinPrm->winPrm[j].enableWin = CHAINS_OSD_ENABLE_WIN;
memcpy(osdWinBuPtr[0][j], gMCFW_swosdTiLogoYuv422i, sizeof(gMCFW_swosdTiLogoYuv422i));
}
}
ipcFramesInHostPrm.baseCreateParams.noNotifyMode = FALSE;//TRUE ipcFramesInHostPrm.baseCreateParams.notifyNextLink = FALSE;//FALSE ipcFramesInHostPrm.baseCreateParams.notifyPrevLink = TRUE;//FALSE ipcFramesInHostPrm.baseCreateParams.inQueParams.prevLinkId = ipcFramesOutVpssId; ipcFramesInHostPrm.baseCreateParams.inQueParams.prevLinkQueId = 0; //ipcFramesInHostPrm.baseCreateParams.outQueParams[0].nextLink = SYSTEM_LINK_ID_INVALID; ipcFramesInHostPrm.baseCreateParams.outQueParams[0].nextLink = snkId; ipcFramesInHostPrm.exportOnlyPhyAddr= FALSE;
// ipcFramesInHostPrm.baseCreateParams.notifyProcessLink = FALSE;//FALSE Chains_ipcFramesInSetCbInfo(&ipcFramesInHostPrm);//????
snkPrm.numInQue=1;//5 //
snkPrm.inQueParams[0].prevLinkId=ipcFramesInHost;
snkPrm.inQueParams[0].prevLinkQueId=0;//
Chains_displayCtrlInit(chainsCfg->displayRes);
System_linkCreate(ipcFramesOutVpssId, &ipcFramesOutVpssPrm, sizeof(ipcFramesOutVpssPrm)); System_linkCreate(ipcFramesInHost, &ipcFramesInHostPrm , sizeof(ipcFramesInHostPrm));//66 System_linkCreate(ipcFramesInDspId, &ipcFramesInDspPrm, sizeof(ipcFramesInDspPrm)); System_linkCreate(osdId, &osdPrm, sizeof(osdPrm)); // System_linkCreate(displayId, &displayPrm, sizeof(displayPrm));// System_linkCreate(snkId, &snkPrm, sizeof(snkPrm));//6
Chains_memPrintHeapStatus();
{
System_linkStart(snkId);//7
System_linkStart(osdId);
System_linkStart(ipcFramesInDspId);
System_linkStart(ipcFramesOutVpssId);
System_linkStart(ipcFramesInHost);//77
System_linkStart(captureId);
while(1)
{
ch = Chains_menuRunTime();
if(ch=='0')
break;
if(ch=='v')
System_linkControl(captureId, CAPTURE_LINK_CMD_FORCE_RESET, NULL, 0, TRUE); if(ch=='p') { System_linkControl(captureId, CAPTURE_LINK_CMD_PRINT_ADV_STATISTICS, NULL, 0, TRUE); // System_linkControl(displayId, DISPLAY_LINK_CMD_PRINT_STATISTICS, NULL, 0, TRUE);//
}
}
System_linkStop(captureId);
System_linkStop(ipcFramesOutVpssId);
System_linkStop(ipcFramesInHost);//88
System_linkStop(ipcFramesInDspId);
System_linkStop(osdId); //
System_linkStop(ipcFramesInHost);//88
System_linkStop(snkId);//8
}
System_linkDelete(captureId);
System_linkDelete(ipcFramesOutVpssId);
System_linkDelete(ipcFramesInDspId);
System_linkDelete(osdId);
System_linkDelete(ipcFramesInHost);//99
System_linkDelete(snkId);//9
for(i = 0; i < 1; i++)
{
AlgLink_OsdChWinParams * chWinPrm = &osdPrm.osdChCreateParams[i].chDefaultParams;
chWinPrm->numWindows = CHAINS_OSD_NUM_WINDOWS;
for(j=0; j < chWinPrm->numWindows; j++)
{
Chains_deleteBuf(osdWinBuPtr[i][j], CHAINS_OSD_WIN_WIDTH * CHAINS_OSD_WIN_HEIGHT*2, SYSTEM_IPC_SR_NON_CACHED_DEFAULT);
}
}
Chains_displayCtrlDeInit();
}
message:
[c6xdsp ] come in mcfw/src_bios6/....systemlink_tskMain!
[m3vpss ] This is test point 26!!!
[c6xdsp ] This is test point 66!!! *******************************
[m3vpss ] This is test point cmd=0
[c6xdsp ] come in mcfw/src_bios6/....systemlink_cmdHandler!
[c6xdsp ] This is test point 66!!! ****************36864***************
[m3vpss ] This is test point 27!!!
[m3vpss ] 18720: CAPTURE: Create in progress !!!
[m3vpss ] This is test point 31!!! *****************************
[m3vpss ] This is test point 33!!! ------- 33!!! ----
[m3vpss ] This is test point 35!!! *****************************
[m3vpss ] This is test point 37!!! *****************************pInstPrm->videoDecoderId = 1025 [m3vpss ] This is test point 38!!! *****************************
[m3vpss ] 18752: CAPTURE: VIP0 PortA capture mode is [16-bit, Non-mux Embedded Sync] !!! [m3vpss ] This is test point 39!!! *******************************
[m3vpss ] This is test point 39!!! ------------------*******************************
[m3vpss ] This is test point 39!!! ########===========*******************************
[m3vpss ] 19462: CAPTURE: VIP0 PortA VID DEC 1025 (0x5d): 7002:0002:0000
[m3vpss ] This is test point 36!!! *****************************
[m3vpss ] UTILS: DMA: Allocated CH (TCC) = 58 (58)
[m3vpss ] CAPTURE::HEAPID:0 USED:448
[m3vpss ] CAPTURE::HEAPID:4 USED:50227200
[m3vpss ] 19463: CAPTURE: Create Done !!!
[m3vpss ] This is test point 28!!!
[host] CHAINS_IPCALLOCBUF:Translated Addr Virt:0x40908900 To Phy:0xbf581900 Shared:0x481900 [m3vpss ] 20468: HDMI: Starting HDMI T!
[host] IpcFramesInLink_tskMain:Entered [host] 6052: IPC_FRAMES_IN : Create in progress !!!
[host] 6052: SYSTEM: Opening ListMP [VPSS-M3_IPC_OUT_19] ... 6054: SYSTEM: Opening ListMP [VPSS-M3_IPC_IN_19] ... [m3vpss ] 20478: HDMI: HDMI Config ... DONE !!! [m3vpss ] 20479: HDMI: Starting HDMI Transmitter ... DONE !!! [m3vpss ] 20479: IPC_FRAMES_OUT : Create in progress !!!
[host] 6058: IPC_FRAMES_IN : Create Done !!! [c6xdsp ] 18266: IPC_FRAMES_IN : Create in progress !!! [c6xdsp ] listMPOutName=VPSS-M3_IPC_OUT_19 [m3vpss ] 20481: IPC_FRAMES_OUT : Create Done !!! [c6xdsp ] listMPInName=VPSS-M3_IPC_IN_19 [c6xdsp ] 18267: SYSTEM: Opening ListMP [VPSS-M3_IPC_OUT_19] ... [c6xdsp ] 18267: Assertion @ Line: 106 in links_common/system/system_ipc_listMP.c: 0 : failed !!!
could you tell me how to solve the problem???thanks a lot!