你好,我写了一个程序,采集到数据后交给DSP的OSD算法,运算后再把结果传给VPSS,然后在display中显示,但是程序运行后出现如下错误
@@@@@@@@@@@@@@@@@@@@@@@ capDIS @@@@@@@@@@@@@@@@@@@@@@@
[m3vpss ] 29962: CAPTURE: Create in progress !!!
[m3vpss ] 29970: CAPTURE: VIP0 PortA VID DEC 1027 (0x30): Video Standard Detect in Progress !!!
[m3vpss ] 30072: CAPTURE: Detected video (1920x1080@30Hz, 0)!!!
[m3vpss ] 30080: CAPTURE: VIP1 PortA VID DEC 1027 (0x31): Video Standard Detect in Progress !!!
[m3vpss ] 30181: CAPTURE: Detecting video .....!!!
[m3vpss ] 30282: CAPTURE: Detecting video .....!!!
[m3vpss ] 30383: CAPTURE: Detecting video .....!!!
[m3vpss ] 30484: CAPTURE: Detecting video .....!!!
[m3vpss ] 30585: CAPTURE: Detecting video .....!!!
[m3vpss ] 30686: CAPTURE: Detecting video .....!!!
[m3vpss ] 30686 CAPTURE: VIP1 PortA use default standard 1080P60
[m3vpss ] 30717: CAPTURE: VIP0 PortA capture mode is [16-bit, Non-mux Embedded Sync] !!!
[m3vpss ] 31030: CAPTURE: VIP0 PortA VID DEC 1027 (0x30): 9233:0033:0001
[m3vpss ] 31030: CAPTURE: VIP1 PortA capture mode is [16-bit, Non-mux Embedded Sync] !!!
[m3vpss ] 31342: CAPTURE: VIP1 PortA VID DEC 1027 (0x31): 9233:0033:0001
[m3vpss ] UTILS: DMA: Allocated CH (TCC) = 58 (58)
[m3vpss ] CAPTURE::HEAPID:0 USED:672
[m3vpss ] CAPTURE::HEAPID:4 USED:137318400
[m3vpss ] 31343: CAPTURE: Create Done !!!
[m3vpss ] ==== Vps_sii9233aReadAviInfo ==== devAddr = 0x34
[m3vpss ] AviInfo = 0x82,regValue[1] = 0x2,regValue[2] = 0xd
[m3vpss ] ===============================pAviInfo->colorSpace = 1, pAviInfo->colorImetric = 2,pAviInfo->pixelRepeat= 0
[m3vpss ] ==== Vps_sii9233aReadAviInfo ==== devAddr = 0x35
[m3vpss ] AviInfo = 0x0,regValue[1] = 0x0,regValue[2] = 0x0
[m3vpss ] 32656: IPC_FRAMES_OUT : Create in progress !!!
[c6xdsp ] 30635: IPC_FRAMES_IN : Create in progress !!!
[c6xdsp ] 30635: SYSTEM: Opening ListMP [VPSS-M3_IPC_OUT_19] ...
[c6xdsp ] 30635: SYSTEM: Opening ListMP [VPSS-M3_IPC_IN_19] ...
[m3vpss ] 32657: IPC_FRAMES_OUT : Create Done !!!
[c6xdsp ] 30636: SYSTEM: Opening MsgQ [VPSS-M3_MSGQ] ...
[c6xdsp ] IPC_FRAMES_IN:HEAPID:0 USED:304
[c6xdsp ] 30637: IPC_FRAMES_IN : Create Done !!!
[c6xdsp ] 30639: ALG : Create in progress !!!
[c6xdsp ] ALGLINK:HEAPID:0 USED:2616
[c6xdsp ] ALGLINK:HEAPID:1 USED:5904
[c6xdsp ] 30646: ALG : Create Done !!!
[c6xdsp ] 30649: IPC_FRAMES_OUT : Create in progress !!!
[c6xdsp ] 30650: Assertion @ Line: 231 in links_common/ipcFramesOut/ipcFramesOutLink_tsk.c: pObj->createArgs.baseCreateParams.inQueParams.prevLinkQueId < pObj->inQueInfo.numQue : failed !!!
我的程序如下
#include <demos/link_api_demos/common/chains.h>
#include <mcfw/interfaces/ti_venc.h>
Void Chains_doubleChCapNsfEncDecSwMsDis(Chains_Ctrl *chainsCfg)
{
CaptureLink_CreateParams capturePrm;
CaptureLink_VipInstParams *pCaptureInstPrm;
CaptureLink_OutParams *pCaptureOutPrm;
printf("@@@@@@@@@@@@@@@@@@@@@@@ capDIS @@@@@@@@@@@@@@@@@@@@@@@\n");
/* changed by chen longhu */
IpcFramesInLinkRTOS_CreateParams ipcFramesInDspPrm,ipcFramesInVpssPrm;
IpcFramesOutLinkRTOS_CreateParams ipcFramesOutDspPrm,ipcFramesOutVpssPrm;
AlgLink_CreateParams dspAlgPrm;
DisplayLink_CreateParams displayPrm[CHAINS_SW_MS_MAX_DISPLAYS];
UInt32 captureId, vipInstId;
UInt32 ipcFramesOutVpssId,ipcFramesInDspId;
UInt32 ipcFramesInVpssId,ipcFramesOutDspId;
UInt32 dspAlgId;
UInt32 displayId[CHAINS_SW_MS_MAX_DISPLAYS];
UInt32 i;
char ch;
CHAINS_INIT_STRUCT(CaptureLink_CreateParams,capturePrm);
CHAINS_INIT_STRUCT(IpcFramesOutLinkRTOS_CreateParams,ipcFramesOutVpssPrm);
CHAINS_INIT_STRUCT(IpcFramesInLinkRTOS_CreateParams,ipcFramesInDspPrm);
CHAINS_INIT_STRUCT(IpcFramesOutLinkRTOS_CreateParams,ipcFramesOutDspPrm);
CHAINS_INIT_STRUCT(IpcFramesInLinkRTOS_CreateParams,ipcFramesInVpssPrm);
CHAINS_INIT_STRUCT(AlgLink_CreateParams ,dspAlgPrm);
for (i=0; i<CHAINS_SW_MS_MAX_DISPLAYS; i++) {
CHAINS_INIT_STRUCT(DisplayLink_CreateParams,displayPrm[i]);
}
captureId = SYSTEM_LINK_ID_CAPTURE;
ipcFramesOutVpssId = SYSTEM_VPSS_LINK_ID_IPC_FRAMES_OUT_0;
ipcFramesInDspId= SYSTEM_DSP_LINK_ID_IPC_FRAMES_IN_0;
ipcFramesInVpssId = SYSTEM_VPSS_LINK_ID_IPC_FRAMES_IN_0;
ipcFramesOutDspId= SYSTEM_DSP_LINK_ID_IPC_FRAMES_OUT_0;
dspAlgId= SYSTEM_LINK_ID_ALG_0;
displayId[0] = SYSTEM_LINK_ID_DISPLAY_0;
displayId[1] = SYSTEM_LINK_ID_DISPLAY_1;
capturePrm.numVipInst = 2;
capturePrm.tilerEnable = FALSE;
capturePrm.numBufsPerCh = 16;
capturePrm.numExtraBufs = 0;
capturePrm.maxBlindAreasPerCh = 0;
capturePrm.isPalMode = FALSE;
capturePrm.enableSdCrop = FALSE;
capturePrm.doCropInCapture = FALSE;
for(i=0; i<capturePrm.numVipInst; i++)
{
vipInstId = SYSTEM_CAPTURE_INST_VIP0_PORTA + 2*i;
pCaptureInstPrm = &capturePrm.vipInst[i];
pCaptureInstPrm->vipInstId = vipInstId%SYSTEM_CAPTURE_INST_MAX;
pCaptureInstPrm->videoDecoderId = SYSTEM_DEVICE_VID_DEC_SII9233A_DRV;
pCaptureInstPrm->inDataFormat = SYSTEM_DF_YUV422P;
pCaptureInstPrm->standard = chainsCfg->displayRes[i];
pCaptureInstPrm->numOutput = 1;
pCaptureInstPrm->numChPerOutput = 1;
pCaptureInstPrm->frameCaptureMode = FALSE;
pCaptureInstPrm->fieldsMerged = FALSE;
pCaptureOutPrm = &pCaptureInstPrm->outParams[0];
pCaptureOutPrm->dataFormat = SYSTEM_DF_YUV422I_YUYV;
pCaptureOutPrm->scEnable = FALSE;
pCaptureOutPrm->scOutWidth = chainsCfg->channelConf[i].width;
pCaptureOutPrm->scOutHeight = chainsCfg->channelConf[i].height;
pCaptureOutPrm->outQueId = 0;
}
capturePrm.outQueParams[0].nextLink = ipcFramesOutVpssId;
System_linkCreate(captureId, &capturePrm, sizeof(capturePrm));
for (i=0; i<gChains_ctrl.channelNum; i++) {
chainsCfg->displayRes[i] = capturePrm.vipInst[i].standard;
Vsys_getResSize(chainsCfg->displayRes[i], &chainsCfg->channelConf[i].width, &chainsCfg->channelConf[i].height);
Vsys_getResRate(chainsCfg->displayRes[i], &chainsCfg->channelConf[i].frameRate);
}
ipcFramesOutVpssPrm.baseCreateParams.inQueParams.prevLinkId = captureId;
ipcFramesOutVpssPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
ipcFramesOutVpssPrm.baseCreateParams.numOutQue = 1;
ipcFramesOutVpssPrm.baseCreateParams.processLink = ipcFramesInDspId;
ipcFramesOutVpssPrm.baseCreateParams.notifyProcessLink = TRUE;
ipcFramesOutVpssPrm.baseCreateParams.notifyNextLink = TRUE;
ipcFramesOutVpssPrm.baseCreateParams.notifyPrevLink = TRUE;
ipcFramesOutVpssPrm.baseCreateParams.noNotifyMode = FALSE;
//prevLink->processLink->nextLink
ipcFramesInDspPrm.baseCreateParams.inQueParams.prevLinkId = ipcFramesOutVpssId;
ipcFramesInDspPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
ipcFramesInDspPrm.baseCreateParams.outQueParams[0].nextLink =dspAlgId;
ipcFramesInDspPrm.baseCreateParams.numOutQue = 1;
ipcFramesInDspPrm.baseCreateParams.notifyPrevLink = TRUE;
ipcFramesInDspPrm.baseCreateParams.notifyNextLink = TRUE;
ipcFramesInDspPrm.baseCreateParams.noNotifyMode = FALSE;
dspAlgPrm.enableOSDAlg = TRUE;
dspAlgPrm.enableSCDAlg = FALSE;
dspAlgPrm.inQueParams.prevLinkId =ipcFramesInDspId;
dspAlgPrm.inQueParams.prevLinkQueId = 0;
dspAlgPrm.outQueParams[0].nextLink = ipcFramesOutDspId;
AlgLink_OsdChWinParams * chWinPrm = &dspAlgPrm.osdChCreateParams[0].chDefaultParams;
/* set osd window max width and height */
dspAlgPrm.osdChCreateParams[0].maxWidth = 320;
dspAlgPrm.osdChCreateParams[0].maxHeight = 64;
chWinPrm->chId = 0;
chWinPrm->numWindows = 0;
ipcFramesOutDspPrm.baseCreateParams.inQueParams.prevLinkId = dspAlgId;
ipcFramesOutDspPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
ipcFramesOutDspPrm.baseCreateParams.numOutQue = 1;
ipcFramesOutDspPrm.baseCreateParams.processLink =ipcFramesInVpssId;
ipcFramesOutDspPrm.baseCreateParams.notifyProcessLink = TRUE;
ipcFramesOutDspPrm.baseCreateParams.notifyNextLink = TRUE;
ipcFramesOutDspPrm.baseCreateParams.notifyPrevLink = TRUE;
ipcFramesOutDspPrm.baseCreateParams.noNotifyMode = FALSE;
//prevLink->processLink->nextLink
ipcFramesInVpssPrm.baseCreateParams.inQueParams.prevLinkId = ipcFramesOutDspId;
ipcFramesInVpssPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
ipcFramesInVpssPrm.baseCreateParams.outQueParams[0].nextLink =displayId[0];
ipcFramesInVpssPrm.baseCreateParams.numOutQue = 1;
ipcFramesInVpssPrm.baseCreateParams.notifyPrevLink = TRUE;
ipcFramesInVpssPrm.baseCreateParams.notifyNextLink = TRUE;
ipcFramesInVpssPrm.baseCreateParams.noNotifyMode = FALSE;
System_linkCreate(ipcFramesOutVpssId, &ipcFramesOutVpssPrm, sizeof(ipcFramesOutVpssPrm));
System_linkCreate(ipcFramesInDspId, &ipcFramesInDspPrm, sizeof(ipcFramesInDspPrm));
System_linkCreate(dspAlgId, &dspAlgPrm, sizeof(dspAlgPrm));
System_linkCreate(ipcFramesOutDspId, &ipcFramesOutDspPrm, sizeof(ipcFramesOutDspPrm));
System_linkCreate(ipcFramesInVpssId, &ipcFramesInVpssPrm, sizeof(ipcFramesInVpssPrm));
Chains_displayCtrlInit(chainsCfg->displayRes);
displayPrm[0].numInputQueues = 1;
displayPrm[0].activeQueue = 0;
displayPrm[0].inQueParams[0].prevLinkId = ipcFramesInDspId;
displayPrm[0].inQueParams[0].prevLinkQueId = 0;
displayPrm[0].displayRes = chainsCfg->displayRes[0];
displayPrm[0].forceFieldSeparatedInputMode = FALSE;
System_linkCreate(displayId[0], &displayPrm[0], sizeof(displayPrm[0]));
Chains_memPrintHeapStatus();
{
System_linkStart(displayId[0]);
System_linkStart(captureId);
System_linkStart(dspAlgId);
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_linkStop(captureId);
System_linkStop(dspAlgId);
System_linkStop(displayId[0]);
}
System_linkDelete(captureId);
System_linkDelete(displayId[0]);
System_linkDelete(dspAlgId);
System_linkDelete(ipcFramesOutVpssId);
System_linkDelete(ipcFramesInDspId);
System_linkDelete(ipcFramesInVpssId);
System_linkDelete(ipcFramesOutDspId);
Chains_displayCtrlDeInit();
}