This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

SWOSD in DVRRDK2.8

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!