Hello:
this is my first time use scd
input is 4 channel:1080p30
my link chain:
2.my link config:
CaptureLink_CreateParams capturePrm, *pCapPrm = &capturePrm;
CaptureLink_CreateParams_Init(pCapPrm);
pCapPrm->numVipInst = 4;
pCapPrm->enableSdCrop = FALSE;
pCapPrm->doCropInCapture = FALSE;
pCapPrm->tilerEnable = tilerEnable;
pCapPrm->outQueParams[0].nextLink = osd_display_linkId_core.linkId_dup0;
for(num=0; num<pCapPrm->numVipInst; num++)
{
pCapPrm->vipInst[num].vipInstId = VIP_IDs[num];
pCapPrm->vipInst[num].inDataFormat = SYSTEM_DF_YUV422P;
if(num==3)
{
pCapPrm->vipInst[num].standard = SYSTEM_STD_1080P_30;
}
else
{
pCapPrm->vipInst[num].standard = SYSTEM_STD_1080P_30;
}
pCapPrm->vipInst[num].numOutput = 1;
pCapPrm->vipInst[num].outParams[0].outQueId = 0;
pCapPrm->vipInst[num].outParams[0].dataFormat = SYSTEM_DF_YUV420SP_UV;
pCapPrm->vipInst[num].outParams[0].scEnable = FALSE;
}
ret = System_linkCreate(osd_display_linkId_core.linkId_capture, pCapPrm,sizeof(*pCapPrm));
OSA_assert(ERROR_NONE==ret);
sysDBG("Create Link capture Success.");
__register_created_LnkId(osd_display_linkId_core.linkId_capture);
/*======BEGIN DUP Link======*/
DupLink_CreateParams dupPrm, *pDupPrm = &dupPrm;
pDupPrm->inQueParams.prevLinkId = osd_display_linkId_core.linkId_capture;
pDupPrm->inQueParams.prevLinkQueId = 0;
pDupPrm->notifyNextLink = TRUE;
pDupPrm->numOutQue = 2;
pDupPrm->outQueParams[0].nextLink = osd_display_linkId_core.linkId_merge0;
pDupPrm->outQueParams[1].nextLink = osd_display_linkId_core.linkId_sclr0;
ret = System_linkCreate(osd_display_linkId_core.linkId_dup0,pDupPrm,sizeof(*pDupPrm));
OSA_assert(ERROR_NONE==ret);
sysDBG("Create Link dup0 Success.");
__register_created_LnkId(osd_display_linkId_core.linkId_dup0);
/******link sclr0****************/
SclrLink_CreateParams SclrPrm,*pSclrPrm = &SclrPrm;
SclrLink_CreateParams_Init(pSclrPrm);
pSclrPrm->inQueParams.prevLinkId = osd_display_linkId_core.linkId_dup0;
pSclrPrm->inQueParams.prevLinkQueId = 1;
pSclrPrm->pathId = SCLR_LINK_SC5;
pSclrPrm->tilerEnable = FALSE;
pSclrPrm->enableLineSkipSc = FALSE;//FALSE;
pSclrPrm->inputFrameRate = 60;
pSclrPrm->outputFrameRate = 30;
pSclrPrm->outDataFormat = SYSTEM_DF_YUV422I_YUYV;
pSclrPrm->scaleMode = SCLR_SCALE_MODE_ABSOLUTE;
pSclrPrm->outScaleFactor.absoluteResolution.outHeight = 288;
pSclrPrm->outScaleFactor.absoluteResolution.outWidth = 352;
pSclrPrm->outQueParams.nextLink = osd_display_linkId_core.linkId_nsf0;
System_linkCreate(osd_display_linkId_core.linkId_sclr0, pSclrPrm, sizeof(*pSclrPrm));
OSA_assert(ERROR_NONE==ret);
sysDBG("Create Link sclr0 Success.");
__register_created_LnkId(osd_display_linkId_core.linkId_sclr0);
/***********link nsf0*****************/
NsfLink_CreateParams nsfPrm,*pNsfPrm = &nsfPrm;
NsfLink_CreateParams_Init(pNsfPrm);
pNsfPrm->inQueParams.prevLinkId = osd_display_linkId_core.linkId_sclr0;
pNsfPrm->inQueParams.prevLinkQueId = 0;
pNsfPrm->bypassNsf = TRUE;
pNsfPrm->numOutQue = 1;
pNsfPrm->tilerEnable = tilerEnable;
pNsfPrm->outQueParams[0].nextLink = osd_display_linkId_core.linkId_ipcframeOutVpss0;
ret = System_linkCreate(osd_display_linkId_core.linkId_nsf0,pNsfPrm,sizeof(*pNsfPrm));
OSA_assert(ERROR_NONE==ret);
sysDBG("Create Link linkId_nsf0 Success.");
__register_created_LnkId(osd_display_linkId_core.linkId_nsf0);
/*======END NSF Link======*/
/*******link ipcframeOutVpss0*****************/
IpcFramesOutLinkRTOS_CreateParams ipcoutm3vpss_createprm,*ipcoutm3vpss_arg=&ipcoutm3vpss_createprm;
IpcFramesOutLinkRTOS_CreateParams_Init(ipcoutm3vpss_arg);
ipcoutm3vpss_arg->baseCreateParams.inQueParams.prevLinkId=osd_display_linkId_core.linkId_nsf0;
ipcoutm3vpss_arg->baseCreateParams.inQueParams.prevLinkQueId=0;
ipcoutm3vpss_arg->baseCreateParams.notifyPrevLink=FALSE;
ipcoutm3vpss_arg->baseCreateParams.numOutQue=1;
ipcoutm3vpss_arg->baseCreateParams.outQueParams[0].nextLink=osd_display_linkId_core.linkId_ipcframeInDsp0;
ipcoutm3vpss_arg->baseCreateParams.notifyNextLink=FALSE;
ipcoutm3vpss_arg->baseCreateParams.noNotifyMode=FALSE;
ret=System_linkCreate(osd_display_linkId_core.linkId_ipcframeOutVpss0,ipcoutm3vpss_arg,sizeof(ipcoutm3vpss_createprm));
OSA_assert(ERROR_NONE==ret);
sysDBG("Create Link ipcframeoutVpss0 Success.");
__register_created_LnkId(osd_display_linkId_core.linkId_ipcframeOutVpss0);
/**====END ipcFramesOutvpss link create=======*/
/**===BEGIN ipcFramesIn dsp link create=====*/
IpcFramesInLinkRTOS_CreateParams ipcInDsp_creatprm,*ipcInDsp_arg=&ipcInDsp_creatprm;
IpcFramesInLinkRTOS_CreateParams_Init(ipcInDsp_arg);
ipcInDsp_arg->baseCreateParams.inQueParams.prevLinkId=osd_display_linkId_core.linkId_ipcframeOutVpss0;
ipcInDsp_arg->baseCreateParams.inQueParams.prevLinkQueId=0;
ipcInDsp_arg->baseCreateParams.outQueParams[0].nextLink=osd_display_linkId_core.linkId_dsp_alg;
ipcInDsp_arg->baseCreateParams.numOutQue=1;
ipcInDsp_arg->baseCreateParams.notifyProcessLink=FALSE;
ipcInDsp_arg->baseCreateParams.notifyNextLink=TRUE;
ipcInDsp_arg->baseCreateParams.notifyPrevLink=TRUE;
ipcInDsp_arg->baseCreateParams.noNotifyMode=FALSE;
ret=System_linkCreate(osd_display_linkId_core.linkId_ipcframeInDsp0,ipcInDsp_arg,sizeof(ipcInDsp_creatprm));
OSA_assert(ERROR_NONE==ret);
sysDBG("Create Link ipcFramesInDsp0 Success.");
__register_created_LnkId(osd_display_linkId_core.linkId_ipcframeInDsp0);
/**===END ipcFramesIn dsp link create=====*/
#if 1
/**== BEGIN link ALG_DSP0 create =====*/
AlgLink_CreateParams algLink_createprm,*algLink_create_arg=&algLink_createprm;
AlgLink_CreateParams_Init(algLink_create_arg);
algLink_create_arg->inQueParams.prevLinkId=osd_display_linkId_core.linkId_ipcframeInDsp0;
algLink_create_arg->inQueParams.prevLinkQueId=0;
algLink_create_arg->enableSCDAlg = TRUE;
algLink_create_arg->outQueParams[ALG_LINK_SCD_OUT_QUE].nextLink=osd_display_linkId_core.linkId_ipcbitsOutDsp;
algLink_create_arg->scdCreateParams.numBufPerCh = 3;
algLink_create_arg->scdCreateParams.maxWidth = 352;
algLink_create_arg->scdCreateParams.maxHeight = 288;
algLink_create_arg->scdCreateParams.maxStride = 352;
algLink_create_arg->scdCreateParams.numValidChForSCD = 4; //scd max support channel is 16
algLink_create_arg->scdCreateParams.numSecs2WaitB4Init = 3;
algLink_create_arg->scdCreateParams.numSecs2WaitB4FrmAlert=1;
algLink_create_arg->scdCreateParams.inputFrameRate = 30;
algLink_create_arg->scdCreateParams.outputFrameRate = 2;
algLink_create_arg->scdCreateParams.numSecs2WaitAfterFrmAlert=2;
algLink_create_arg->scdCreateParams.numSecs2Wait2MarkStableFrame=5;
algLink_create_arg->scdCreateParams.enableMotionNotify=FALSE;
algLink_create_arg->scdCreateParams.enableTamperNotify=FALSE;
{
Int32 numBlksInFrame;
Int32 numHorzBlks, numVertBlks, chIdx;
Uint32 x, y, i;
numHorzBlks = algLink_create_arg->scdCreateParams.maxWidth / 32;
numVertBlks = algLink_create_arg->scdCreateParams.maxHeight / 12;
numBlksInFrame = numHorzBlks * numVertBlks;
for(chIdx = 0; chIdx < algLink_create_arg->scdCreateParams.numValidChForSCD; chIdx++)
{
AlgLink_ScdChParams * chPrm = &algLink_create_arg->scdCreateParams.chDefaultParams[chIdx];
chPrm->blkNumBlksInFrame = numBlksInFrame;
chPrm->chId = chIdx;
chPrm->mode = ALG_LINK_SCD_DETECTMODE_MONITOR_BLOCKS_AND_FRAME;
chPrm->frmIgnoreLightsON = FALSE;
chPrm->frmIgnoreLightsOFF = FALSE;
chPrm->frmSensitivity = ALG_LINK_SCD_SENSITIVITY_VERYLOW;//ALG_LINK_SCD_SENSITIVITY_VERYHIGH;
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++;
}
}
}
}
ret=System_linkCreate(osd_display_linkId_core.linkId_dsp_alg,algLink_create_arg,sizeof(algLink_createprm));
OSA_assert(ERROR_NONE==ret);
sysDBG("Create Link dsp_alg Success.");
__register_created_LnkId(osd_display_linkId_core.linkId_dsp_alg);
/**== END link ALG_DSP0 create =====*/
#endif
#if 1
/*======BEGIN ipcBitsOutDSP======*/
IpcBitsOutLinkRTOS_CreateParams ipcBitsOutDsp,*pipcBitsOutDsp = &ipcBitsOutDsp;
IpcBitsOutLinkRTOS_CreateParams_Init(pipcBitsOutDsp);
pipcBitsOutDsp->baseCreateParams.inQueParams.prevLinkId = osd_display_linkId_core.linkId_dsp_alg;
pipcBitsOutDsp->baseCreateParams.inQueParams.prevLinkQueId = 0;
pipcBitsOutDsp->baseCreateParams.numOutQue = 1;
pipcBitsOutDsp->baseCreateParams.outQueParams[0].nextLink = osd_display_linkId_core.linkId_ipcbitsInA8_0;
MultiCh_ipcBitsInitCreateParams_BitsOutRTOS(pipcBitsOutDsp,TRUE);
ret = System_linkCreate(osd_display_linkId_core.linkId_ipcbitsOutDsp,pipcBitsOutDsp,sizeof(*pipcBitsOutDsp));
OSA_assert(ERROR_NONE==ret);
sysDBG("Create Link ipcbitsOutDsp Success.");
__register_created_LnkId(osd_display_linkId_core.linkId_ipcbitsOutDsp);
/*======END ipcBitsOutM3Video======*/
/*======BEGIN ipcBitsInA8======*/
IpcBitsInLinkHLOS_CreateParams ipcBitsInA8Prm,*pIpcBitsInA8Prm = &ipcBitsInA8Prm;
IpcBitsInLinkHLOS_CreateParams_Init(pIpcBitsInA8Prm);
pIpcBitsInA8Prm->baseCreateParams.inQueParams.prevLinkId = osd_display_linkId_core.linkId_ipcbitsOutDsp;
pIpcBitsInA8Prm->baseCreateParams.inQueParams.prevLinkQueId = 0;
MultiCh_ipcBitsInitCreateParams_BitsInHLOS(pIpcBitsInA8Prm);
ret = System_linkCreate(osd_display_linkId_core.linkId_ipcbitsInA8_0,pIpcBitsInA8Prm,sizeof(*pIpcBitsInA8Prm));
sysDBG("Create Link ipcbitsInA8_0 SUccess.");
__register_created_LnkId(osd_display_linkId_core.linkId_ipcbitsInA8_0);
/*======END ipcBitsInA8======*/
#endif
/**********link swms0****************/
SwMsLink_CreateParams swMsPrm,*pSwMsPrm = &swMsPrm;
SwMsLink_CreateParams_Init(pSwMsPrm);
pSwMsPrm->inQueParams.prevLinkId = osd_display_linkId_core.linkId_dup0;
pSwMsPrm->inQueParams.prevLinkQueId = 0;
pSwMsPrm->outQueParams.nextLink = osd_display_linkId_core.linkId_display0;
pSwMsPrm->numSwMsInst = 1;
/*
* fixme:why set two mosic SYSTEM_SW_MS_SC_INST_DEIHQ_SC_NO_DEI would be error;
* set SYSTEM_SW_MS_SC_INST_SC5 would lost frame.
* */
pSwMsPrm->swMsInstId[0] = SYSTEM_SW_MS_SC_INST_DEI_SC_NO_DEI;
pSwMsPrm->swMsInstStartWin[0] = 0;
pSwMsPrm->enableProcessTieWithDisplay = FALSE;
pSwMsPrm->numOutBuf = 6;
pSwMsPrm->maxInputQueLen = SYSTEM_SW_MS_INVALID_INPUT_QUE_LEN;
// pSwMsPrm->numOutBuf = 0;//use SWMS default setting
pSwMsPrm->maxInputQueLen = SYSTEM_SW_MS_DEFAULT_INPUT_QUE_LEN;
pSwMsPrm->maxOutRes = VSYS_STD_1080P_60;
pSwMsPrm->lineSkipMode = FALSE;
pSwMsPrm->enableLayoutGridDraw = FALSE;
pSwMsPrm->enableOuputDup = FALSE;
pSwMsPrm->outDataFormat = SYSTEM_DF_YUV422I_YUYV;
pSwMsPrm->outputBufModified = TRUE;
pSwMsPrm->layoutPrm.onlyCh2WinMapChanged = FALSE;
pSwMsPrm->layoutPrm.outputFPS = 30;
pSwMsPrm->initOutRes = gVdisModuleContext.vdisConfig.deviceParams[VDIS_DEV_HDMI].resolution;
pSwMsPrm->layoutPrm.numWin = gVdisModuleContext.vdisConfig.mosaicParams[VDIS_DEV_HDMI].numberOfWindows;
{
int i=0;
for(i=0; i< pSwMsPrm->layoutPrm.numWin; i++)
{
pSwMsPrm->layoutPrm.winInfo[i].bypass=TRUE;
pSwMsPrm->layoutPrm.winInfo[i].channelNum=gVdisModuleContext.vdisConfig.mosaicParams[VDIS_DEV_HDMI].chnMap[i];
pSwMsPrm->layoutPrm.winInfo[i].startX=gVdisModuleContext.vdisConfig.mosaicParams[VDIS_DEV_HDMI].winList[i].start_X;
pSwMsPrm->layoutPrm.winInfo[i].startY=gVdisModuleContext.vdisConfig.mosaicParams[VDIS_DEV_HDMI].winList[i].start_Y;
pSwMsPrm->layoutPrm.winInfo[i].width=gVdisModuleContext.vdisConfig.mosaicParams[VDIS_DEV_HDMI].winList[i].width;
pSwMsPrm->layoutPrm.winInfo[i].height=gVdisModuleContext.vdisConfig.mosaicParams[VDIS_DEV_HDMI].winList[i].height;
}
}
ret = System_linkCreate(osd_display_linkId_core.linkId_swms0,pSwMsPrm,sizeof(*pSwMsPrm));
OSA_assert(ERROR_NONE==ret);
sysDBG("Create Link swms1 Success.");
__register_created_LnkId(osd_display_linkId_core.linkId_swms0);
/***********link display0***************/
DisplayLink_CreateParams displayPrm,*pDisPrm=&displayPrm;
DisplayLink_CreateParams_Init(pDisPrm);
pDisPrm->numInputQueues = 1;
pDisPrm->inQueParams[0].prevLinkId = osd_display_linkId_core.linkId_swms0;
pDisPrm->inQueParams[0].prevLinkQueId = 0;
pDisPrm->activeQueue = 0;
pDisPrm->displayRes = VSYS_STD_1080P_60;
pDisPrm->displayId = DISPLAY_LINK_DISPLAY_BP0;
ret = System_linkCreate(osd_display_linkId_core.linkId_display0,pDisPrm,sizeof(*pDisPrm));
OSA_assert(ERROR_NONE==ret)
sysDBG("Create Link display Success.");
__register_created_LnkId(osd_display_linkId_core.linkId_display0);
my question:
1. when statrt up have follow warning:
[c6xdsp ] > SCD: Algorithm memory requirements queried ::
[c6xdsp ] > Processing Frame Resolution = 352x288
[c6xdsp ] > Number of buffers = 11
[c6xdsp ] > Number of channels supported = 4
[c6xdsp ] > Persistent Internal Memory = 11204 bytes
[c6xdsp ] > Persistent External Memory = 2551296 bytes
[c6xdsp ] > Scratch Internal Memory = 61248 bytes
[c6xdsp ] > SCD: Initializing Scene Change Detection Algorithm...
[c6xdsp ] 23293: SCD : VA :
[c6xdsp ] > DMVAL: 513716 bytes required for DMVAL instance.
[c6xdsp ] 23293: SCD : VA :
[c6xdsp ] > DMVAL: 4128 bytes required for DMVAL output.
[c6xdsp ]
[c6xdsp ] 23294: SCD : VA :
[c6xdsp ] > DMVAL: Invalid EDMA3 parametrs (CH ID : -1 or QUEUE ID : -1 ).
[c6xdsp ]
[c6xdsp ] 23294: SCD : VA :
[c6xdsp ] > DMVAL: Library framework initialized for the 1st time.
[c6xdsp ] 23294: SCD : VA :
[c6xdsp ] > DMVAL: Assigned memory to Camera Tamper Detection application.
[c6xdsp ] 23294: SCD : VA :
[c6xdsp ] > DMVAL: Completed memory assignments to library applications.
[c6xdsp ]
[c6xdsp ] 23294: SCD : VA :
[c6xdsp ] > DMVAL: Library framework reset.
[c6xdsp ] 23294: SCD : VA :
[c6xdsp ] > DMVAL: Initialized library applications.
[c6xdsp ]
[c6xdsp ] 23294: SCD : VA :
[c6xdsp ] > DMVAL: 513716 bytes required for DMVAL instance.
[c6xdsp ] 23294: SCD : VA :
[c6xdsp ] > DMVAL: 4128 bytes required for DMVAL output.
[c6xdsp ]
[c6xdsp ] 23296: SCD : VA :
[c6xdsp ] > DMVAL: Invalid EDMA3 parametrs (CH ID : -1 or QUEUE ID : -1 ).
[c6xdsp ]
[c6xdsp ] 23296: SCD : VA :
[c6xdsp ] > DMVAL: Library framework initialized for the 1st time.
[c6xdsp ] 23296: SCD : VA :
[c6xdsp ] > DMVAL: Assigned memory to Camera Tamper Detection application.
[c6xdsp ] 23296: SCD : VA :
[c6xdsp ] > DMVAL: Completed memory assignments to library applications.
[c6xdsp ]
[c6xdsp ] 23296: SCD : VA :
[c6xdsp ] > DMVAL: Library framework reset.
[c6xdsp ] 23296: SCD : VA :
[c6xdsp ] > DMVAL: Initialized library applications.
[c6xdsp ]
[c6xdsp ] 23296: SCD : VA :
[c6xdsp ] > DMVAL: 513716 bytes required for DMVAL instance.
[c6xdsp ] 23296: SCD : VA :
[c6xdsp ] > DMVAL: 4128 bytes required for DMVAL output.
[c6xdsp ]
[c6xdsp ] 23298: SCD : VA :
[c6xdsp ] > DMVAL: Invalid EDMA3 parametrs (CH ID : -1 or QUEUE ID : -1 ).
[c6xdsp ]
[c6xdsp ] 23298: SCD : VA :
[c6xdsp ] > DMVAL: Library framework initialized for the 1st time.
[c6xdsp ] 23298: SCD : VA :
[c6xdsp ] > DMVAL: Assigned memory to Camera Tamper Detection application.
[c6xdsp ] 23298: SCD : VA :
[c6xdsp ] > DMVAL: Completed memory assignments to library applications.
[c6xdsp ]
[c6xdsp ] 23298: SCD : VA :
[c6xdsp ] > DMVAL: Library framework reset.
[c6xdsp ] 23298: SCD : VA :
[c6xdsp ] > DMVAL: Initialized library applications.
[c6xdsp ]
[c6xdsp ] 23298: SCD : VA :
[c6xdsp ] > DMVAL: 513716 bytes required for DMVAL instance.
[c6xdsp ] 23298: SCD : VA :
[c6xdsp ] > DMVAL: 4128 bytes required for DMVAL output.
[c6xdsp ]
[c6xdsp ] 23299: SCD : VA :
[c6xdsp ] > DMVAL: Invalid EDMA3 parametrs (CH ID : -1 or QUEUE ID : -1 ).
[c6xdsp ]
[c6xdsp ] 23299: SCD : VA :
[c6xdsp ] > DMVAL: Library framework initialized for the 1st time.
[c6xdsp ] 23299: SCD : VA :
[c6xdsp ] > DMVAL: Assigned memory to Camera Tamper Detection application.
[c6xdsp ] 23299: SCD : VA :
[c6xdsp ] > DMVAL: Completed memory assignments to library applications.
[c6xdsp ]
[c6xdsp ] 23299: SCD : VA :
[c6xdsp ] > DMVAL: Library framework reset.
[c6xdsp ] 23299: SCD : VA :
[c6xdsp ] > DMVAL: Initialized library applications.
[c6xdsp ]
[c6xdsp ] UTILS: DSP DMA Channle Alloc: EDMA3_RM_allocLogicalChannel call Successful
[c6xdsp ] Allocated Chanel 30, Param 30 and TC is 30
[c6xdsp ] 23300: SCD: Process Tsk Started !!!
[c6xdsp ] 23300: ALG : Create Done !!!
don't know the reason for :[c6xdsp ] > DMVAL: Invalid EDMA3 parametrs (CH ID : -1 or QUEUE ID : -1 ).
2. I use Vcap_getAlgResultBuffer() then save the buff,every file is 4232 byte? it's correct?
3.how can sure the ldm is correct?
