Hi,
I used 8168EVM + DVRRDK2.8, and I had several problems as follow about SWOSD and SCD in the usecase of multich_progressive_vcap_venc_vdec_vdis of the demo.
Thanks !
1、What's the different effects between used SWOSD and not used ?
2、What's the different between processLink and nextLink ?
ipcFramesOutVpssPrm[0].baseCreateParams.processLink = gVcapModuleContext.ipcFramesInDspId[0];
ipcFramesOutVpssPrm[0].baseCreateParams.notifyProcessLink = TRUE;
ipcFramesOutVpssPrm[0].baseCreateParams.noNotifyMode = FALSE;
//prevLink->processLink->nextLink
ipcFramesInDspPrm[0].baseCreateParams.inQueParams.prevLinkId = gVcapModuleContext.ipcFramesOutVpssId[0];
ipcFramesInDspPrm[0].baseCreateParams.inQueParams.prevLinkQueId = 0;
ipcFramesInDspPrm[0].baseCreateParams.numOutQue = 1;
ipcFramesInDspPrm[0].baseCreateParams.outQueParams[0].nextLink = gVcapModuleContext.dspAlgId[0];
ipcFramesInDspPrm[0].baseCreateParams.notifyPrevLink = TRUE;
ipcFramesInDspPrm[0].baseCreateParams.notifyNextLink = TRUE;
ipcFramesInDspPrm[0].baseCreateParams.noNotifyMode = FALSE;
...
ipcFramesOutVpssPrm[1].baseCreateParams.numOutQue = 1;
ipcFramesOutVpssPrm[1].baseCreateParams.outQueParams[0].nextLink = gVcapModuleContext.ipcFramesInDspId[1];//SYSTEM_LINK_ID_INVALID;
ipcFramesOutVpssPrm[1].baseCreateParams.notifyNextLink = TRUE;
ipcFramesOutVpssPrm[1].baseCreateParams.processLink = SYSTEM_LINK_ID_INVALID;//gVcapModuleContext.ipcFramesInDspId[1];
ipcFramesOutVpssPrm[1].baseCreateParams.notifyProcessLink = FALSE;//TRUE;
ipcFramesOutVpssPrm[1].baseCreateParams.noNotifyMode = FALSE;
ipcFramesInDspPrm[1].baseCreateParams.inQueParams.prevLinkId = gVcapModuleContext.ipcFramesOutVpssId[1];
ipcFramesInDspPrm[1].baseCreateParams.inQueParams.prevLinkQueId = 0;
ipcFramesInDspPrm[1].baseCreateParams.numOutQue = 1;
ipcFramesInDspPrm[1].baseCreateParams.outQueParams[0].nextLink = gVcapModuleContext.dspAlgId[1];
ipcFramesInDspPrm[1].baseCreateParams.notifyPrevLink = TRUE;
ipcFramesInDspPrm[1].baseCreateParams.notifyNextLink = TRUE;
ipcFramesInDspPrm[1].baseCreateParams.noNotifyMode = FALSE;
dspAlgPrm[1].inQueParams.prevLinkId = gVcapModuleContext.ipcFramesInDspId[1];
dspAlgPrm[1].inQueParams.prevLinkQueId = 0;
3、The code as follow,the osd's chain :capture -> ipcFramesOutVpss -> ipcFramesInDsp -> dspAlg[0] -> SYSTEM_LINK_ID_INVALID ?dspAlg[0] has no output?
if(enableOsdAlgLink)
{
int chId;
dspAlgPrm[0].enableOSDAlg = TRUE;
dspAlgPrm[0].enableSCDAlg = FALSE;
dspAlgPrm[0].outQueParams[ALG_LINK_SCD_OUT_QUE].nextLink = SYSTEM_LINK_ID_INVALID;
for(chId = 0; chId < ALG_LINK_OSD_MAX_CH; chId++)
{
AlgLink_OsdChWinParams * chWinPrm = &dspAlgPrm[0].osdChCreateParams[chId].chDefaultParams;
/* set osd window max width and height */
dspAlgPrm[0].osdChCreateParams[chId].maxWidth = EXAMPLE_OSD_WIN_MAX_WIDTH;
dspAlgPrm[0].osdChCreateParams[chId].maxHeight = EXAMPLE_OSD_WIN_MAX_HEIGHT;
chWinPrm->chId = chId;
chWinPrm->numWindows = 0;
}
}
if (enableScdAlgLink)
{
Int32 numBlksInFrame;
Int32 numHorzBlks, numVertBlks, chIdx;
Uint32 x, y, i;
dspAlgPrm[1].enableOSDAlg = FALSE;
dspAlgPrm[1].enableSCDAlg = TRUE;
dspAlgPrm[1].outQueParams[ALG_LINK_SCD_OUT_QUE].nextLink = ipcBitsOutDSPId;
dspAlgPrm[1].scdCreateParams.maxWidth = 352;
if(Vcap_isPalMode())
dspAlgPrm[1].scdCreateParams.maxHeight = 288;
else
dspAlgPrm[1].scdCreateParams.maxHeight = 240;
dspAlgPrm[1].scdCreateParams.maxStride = 352;
dspAlgPrm[1].scdCreateParams.numValidChForSCD = 16;
dspAlgPrm[1].scdCreateParams.numSecs2WaitB4Init = 3;
dspAlgPrm[1].scdCreateParams.numSecs2WaitB4FrmAlert = 1;
dspAlgPrm[1].scdCreateParams.inputFrameRate = 2;
dspAlgPrm[1].scdCreateParams.outputFrameRate = 2;
dspAlgPrm[1].scdCreateParams.numSecs2WaitAfterFrmAlert = 2;
dspAlgPrm[1].scdCreateParams.numBufPerCh = 6;
dspAlgPrm[1].scdCreateParams.enableMotionNotify = FALSE;
dspAlgPrm[1].scdCreateParams.enableTamperNotify = TRUE;
// Configure array to monitor scene changes in all frame blocks, i.e., motion detection.
// Each block is fixed to be 32x10 in size when height is 240,
// Each block is fixed to be 32x11 in size when height is 288
numHorzBlks = dspAlgPrm[1].scdCreateParams.maxWidth / 32;
if((dspAlgPrm[1].scdCreateParams.maxHeight%10) == 0)
numVertBlks = dspAlgPrm[1].scdCreateParams.maxHeight / 10;
else /* For 288 Block height becomes 12 */
numVertBlks = dspAlgPrm[1].scdCreateParams.maxHeight / 12;
numBlksInFrame = numHorzBlks * numVertBlks;
for(chIdx = 0; chIdx < dspAlgPrm[1].scdCreateParams.numValidChForSCD; chIdx++)
{
AlgLink_ScdChParams * chPrm = &dspAlgPrm[1].scdCreateParams.chDefaultParams[chIdx];
chPrm->blkNumBlksInFrame = numBlksInFrame;
chPrm->chId = SCDChannelMonitor[chIdx];
chPrm->mode = ALG_LINK_SCD_DETECTMODE_MONITOR_BLOCKS_AND_FRAME;
chPrm->frmIgnoreLightsON = FALSE;
chPrm->frmIgnoreLightsOFF = FALSE;
chPrm->frmSensitivity = ALG_LINK_SCD_SENSITIVITY_HIGH;//ALG_LINK_SCD_SENSITIVITY_MID;
chPrm->frmEdgeThreshold = 100;
i = 0;
for(y = 0; y < numVertBlks; y++)
{
for(x = 0; x < numHorzBlks; x++)
{
chPrm->blkConfig[i].sensitivity = ALG_LINK_SCD_SENSITIVITY_LOW;
chPrm->blkConfig[i].monitored = 0;
i++;
}
}
}
ipcBitsOutDspPrm.baseCreateParams.inQueParams.prevLinkId = gVcapModuleContext.dspAlgId[1];
ipcBitsOutDspPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
ipcBitsOutDspPrm.baseCreateParams.numOutQue = 1;
ipcBitsOutDspPrm.baseCreateParams.outQueParams[0].nextLink = gVcapModuleContext.ipcBitsInHLOSId;
MultiCh_ipcBitsInitCreateParams_BitsOutRTOS(&ipcBitsOutDspPrm,
TRUE);
ipcBitsOutDspPrm.baseCreateParams.notifyNextLink = TRUE;
ipcBitsOutDspPrm.baseCreateParams.noNotifyMode = FALSE;
ipcBitsInHostPrm[1].baseCreateParams.inQueParams.prevLinkId = ipcBitsOutDSPId;
ipcBitsInHostPrm[1].baseCreateParams.inQueParams.prevLinkQueId = 0;
ipcBitsInHostPrm[1].baseCreateParams.numOutQue = 1;
ipcBitsInHostPrm[1].baseCreateParams.outQueParams[0].nextLink = SYSTEM_LINK_ID_INVALID;
MultiCh_ipcBitsInitCreateParams_BitsInHLOSVcap(&ipcBitsInHostPrm[1]);
ipcBitsInHostPrm[1].baseCreateParams.notifyPrevLink = TRUE;
ipcBitsInHostPrm[1].baseCreateParams.noNotifyMode = FALSE;
}
else
{
dspAlgPrm[1].outQueParams[ALG_LINK_SCD_OUT_QUE].nextLink = SYSTEM_LINK_ID_INVALID;
}
Best regards!