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.

chains problem

Other Parts Discussed in Thread: TVP5158

Hi,I am using DVRRDK_04.00.00.03 on my own dm8168 board.

8 channels PAL/NTSC inputs from TVP5158,now I want two video chain,one for D1,one for CIF,and my chain is:

                                     Capture

                                        |

                                       Dei

                                        |

                                       Nsf

                                        |

                                       Dup

                                        |

                            -----------------

                               |                |

       ipcFramesOutVpss1   Sclr         

                               |                |

              ipcOutVpss         ipcFrameOutVpss--------ipcFramesInDs(processLink)                  

                              |                             |                                              |

                     ipcInVideo      SYSTEM_LINK_ID_INVALID      DspAlg            

                              |

                            Enc

                              |

                    ipcBitsOutVideo

                              | 

                    ipcBitsInHost

                              |

           SYSTEM_LINK_ID_INVALID

 and my chains config is:

captureId = SYSTEM_LINK_ID_CAPTURE;
 deiId = SYSTEM_LINK_ID_DEI_HQ_0;
 sclrId = SYSTEM_LINK_ID_SCLR_INST_0;
 ipcFramesOutVpssId2 = SYSTEM_VPSS_LINK_ID_IPC_FRAMES_OUT_1;
 dupId = SYSTEM_VPSS_LINK_ID_DUP_0;
 nsfId = SYSTEM_LINK_ID_NSF_0;
 ipcOutVpssId = SYSTEM_VPSS_LINK_ID_IPC_OUT_M3_0;
 ipcInVideoId = SYSTEM_VIDEO_LINK_ID_IPC_IN_M3_0;
 encId = SYSTEM_LINK_ID_VENC_0;
 ipcBitsOutVideoId = SYSTEM_VIDEO_LINK_ID_IPC_BITS_OUT_0;
 ipcBitsInHostId   = SYSTEM_HOST_LINK_ID_IPC_BITS_IN_0;
 ipcFramesOutVpssId = SYSTEM_VPSS_LINK_ID_IPC_FRAMES_OUT_0;
 ipcFramesInDspId = SYSTEM_DSP_LINK_ID_IPC_FRAMES_IN_0;
 dspAlgId = SYSTEM_LINK_ID_ALG_0  ;

 capturePrm.numVipInst         = 2;
 capturePrm.tilerEnable        = FALSE;
 capturePrm.numBufsPerCh       = 8;
 for (vipInstId = 0; vipInstId < capturePrm.numVipInst; vipInstId++)
 {
  pCaptureInstPrm                   = &capturePrm.vipInst[vipInstId];
  pCaptureInstPrm->vipInstId        = SYSTEM_CAPTURE_INST_VIP0_PORTA + vipInstId;
  pCaptureInstPrm->videoDecoderId   = SYSTEM_DEVICE_VID_DEC_TVP5158_DRV;
  pCaptureInstPrm->inDataFormat     = SYSTEM_DF_YUV422P;
  pCaptureInstPrm->standard         = SYSTEM_STD_MUX_4CH_D1;
  pCaptureInstPrm->numOutput        = 1;

  pCaptureOutPrm                    = &pCaptureInstPrm->outParams[0];
  pCaptureOutPrm->dataFormat        = SYSTEM_DF_YUV422I_YUYV;
  pCaptureOutPrm->scEnable          = FALSE;
  pCaptureOutPrm->scOutWidth        = 0;
  pCaptureOutPrm->scOutHeight       = 0;
  pCaptureOutPrm->outQueId          = 0;
 }
 
 for (i = 0; i < 2; i++)
 {
  vidDecVideoModeArgs[i].vipInstId           = SYSTEM_CAPTURE_INST_VIP0_PORTA+i;
  vidDecVideoModeArgs[i].deviceId            = DEVICE_VID_DEC_TVP5158_DRV;
  vidDecVideoModeArgs[i].numChInDevice       = 4;
  vidDecVideoModeArgs[i].modeParams.videoIfMode              = DEVICE_CAPT_VIDEO_IF_MODE_8BIT;
  vidDecVideoModeArgs[i].modeParams.videoDataFormat  = SYSTEM_DF_YUV422P;
  vidDecVideoModeArgs[i].modeParams.standard    = SYSTEM_STD_MUX_4CH_D1;
  vidDecVideoModeArgs[i].modeParams.videoCaptureMode   = DEVICE_CAPT_VIDEO_CAPTURE_MODE_MULTI_CH_PIXEL_MUX_EMBEDDED_SYNC;
  vidDecVideoModeArgs[i].modeParams.videoSystem             = DEVICE_VIDEO_DECODER_VIDEO_SYSTEM_AUTO_DETECT;
  vidDecVideoModeArgs[i].modeParams.videoCropEnable         = FALSE;
  vidDecVideoModeArgs[i].modeParams.videoAutoDetectTimeout  = -1;
 }

 capturePrm.outQueParams[0].nextLink     = deiId;
 capturePrm.outQueParams[1].nextLink     = deiId;
 deiPrm.inQueParams.prevLinkId        = captureId;
 deiPrm.inQueParams.prevLinkQueId     = 0;
 deiPrm.outQueParams[DEI_LINK_OUT_QUE_VIP_SC].nextLink  = nsfId;
 deiPrm.enableOut[DEI_LINK_OUT_QUE_DEI_SC]                 = FALSE;
 deiPrm.enableOut[DEI_LINK_OUT_QUE_VIP_SC]              = TRUE;
 deiPrm.enableOut[DEI_LINK_OUT_QUE_VIP_SC_SECONDARY_OUT]   = FALSE;
 deiPrm.tilerEnable[DEI_LINK_OUT_QUE_DEI_SC]            = FALSE;
 deiPrm.tilerEnable[DEI_LINK_OUT_QUE_VIP_SC]            = FALSE;
 deiPrm.comprEnable      = FALSE;
 deiPrm.setVipScYuv422Format     = TRUE;
 deiPrm.enableDeiForceBypass     = FALSE;
 deiPrm.enableLineSkipSc      = FALSE;
 deiPrm.inputFrameRate[DEI_LINK_OUT_QUE_VIP_SC]       = 60;
 deiPrm.outputFrameRate[DEI_LINK_OUT_QUE_VIP_SC]      = 30;
 deiPrm.inputDeiFrameRate = 60;
 deiPrm.outputDeiFrameRate = 60;
  
        nsfPrm.bypassNsf                = FALSE;
 nsfPrm.tilerEnable              = FALSE;
 nsfPrm.inQueParams.prevLinkId   = deiId;
 nsfPrm.numOutQue                = 1;
 nsfPrm.outQueParams[0].nextLink = dupId;
 nsfPrm.inQueParams.prevLinkQueId = 1;

 dupPrm.inQueParams.prevLinkId    = nsfId;
 dupPrm.inQueParams.prevLinkQueId = 0;
 dupPrm.notifyNextLink            = TRUE;
 dupPrm.numOutQue                 = 2;
 dupPrm.outQueParams[0].nextLink  = sclrId;
 dupPrm.outQueParams[1].nextLink  = ipcFramesOutVpssId2;

 sclrPrm.inQueParams.prevLinkId              = dupId;
 sclrPrm.outQueParams.nextLink               = ipcFramesOutVpssId;
 sclrPrm.pathId                              = SCLR_LINK_SC5;
 sclrPrm.inQueParams.prevLinkQueId           = 0;
 sclrPrm.tilerEnable                         = FALSE;
 sclrPrm.enableLineSkipSc                    = FALSE;
 sclrPrm.inputFrameRate                      = 60;
 sclrPrm.outputFrameRate                     = 60;
 sclrPrm.scaleMode                           = SCLR_SCALE_MODE_RATIO;
 sclrPrm.outScaleFactor.ratio.widthRatio.numerator    = 1;
 sclrPrm.outScaleFactor.ratio.widthRatio.denominator  = 2;
 sclrPrm.outScaleFactor.ratio.heightRatio.numerator   = 1;
 sclrPrm.outScaleFactor.ratio.heightRatio.denominator = 2;

 ipcFramesOutVpssPrm.baseCreateParams.inQueParams.prevLinkId  = sclrId;
 ipcFramesOutVpssPrm.baseCreateParams.inQueParams.prevLinkQueId  = 0;
 ipcFramesOutVpssPrm.baseCreateParams.notifyPrevLink   = TRUE;
 ipcFramesOutVpssPrm.baseCreateParams.numOutQue    = 1;
 ipcFramesOutVpssPrm.baseCreateParams.outQueParams[0].nextLink  = SYSTEM_LINK_ID_INVALID;
 ipcFramesOutVpssPrm.baseCreateParams.notifyNextLink   = FALSE;
 ipcFramesOutVpssPrm.baseCreateParams.processLink   = ipcFramesInDspId;
 ipcFramesOutVpssPrm.baseCreateParams.notifyProcessLink   = TRUE;
 ipcFramesOutVpssPrm.baseCreateParams.noNotifyMode   = FALSE;

 ipcFramesOutVpssPrm2.baseCreateParams.inQueParams.prevLinkId  = dupId;
 ipcFramesOutVpssPrm2.baseCreateParams.inQueParams.prevLinkQueId = 1;
 ipcFramesOutVpssPrm2.baseCreateParams.notifyPrevLink  = TRUE;
 ipcFramesOutVpssPrm2.baseCreateParams.numOutQue   = 1;
 ipcFramesOutVpssPrm2.baseCreateParams.outQueParams[0].nextLink  = ipcOutVpssId;
 ipcFramesOutVpssPrm2.baseCreateParams.notifyNextLink   = TRUE;
 ipcFramesOutVpssPrm2.baseCreateParams.processLink   = SYSTEM_LINK_ID_INVALID;
 ipcFramesOutVpssPrm2.baseCreateParams.notifyProcessLink  = FALSE;
 ipcFramesOutVpssPrm2.baseCreateParams.noNotifyMode   = FALSE;

 ipcFramesInDspPrm.baseCreateParams.inQueParams.prevLinkId  = ipcFramesOutVpssId;
 ipcFramesInDspPrm.baseCreateParams.inQueParams.prevLinkQueId  = 0;
 ipcFramesInDspPrm.baseCreateParams.numOutQue      = 1;
 ipcFramesInDspPrm.baseCreateParams.outQueParams[0].nextLink  = dspAlgId;
 ipcFramesInDspPrm.baseCreateParams.notifyPrevLink   = TRUE;
 ipcFramesInDspPrm.baseCreateParams.notifyNextLink   = TRUE;
 ipcFramesInDspPrm.baseCreateParams.noNotifyMode     = FALSE;

 dspAlgPrm.inQueParams.prevLinkId = ipcFramesInDspId;
 dspAlgPrm.inQueParams.prevLinkQueId = 0;
 dspAlgPrm.enableOSDAlg = TRUE;
 for(chId = 0; chId < ALG_LINK_OSD_MAX_CH; chId++)
 {
  AlgLink_OsdChWinParams * chWinPrm = &dspAlgPrm.osdChCreateParams[chId].chDefaultParams;
  dspAlgPrm.osdChCreateParams[chId].maxWidth  = 720;
  dspAlgPrm.osdChCreateParams[chId].maxHeight = 576;
  chWinPrm->chId = chId;
  chWinPrm->numWindows = 0;
 }

 pIpcOutVpssPrm = &(IpcOutVpssPrm);
 pIpcOutVpssPrm->inQueParams.prevLinkId  = ipcFramesOutVpssId2;
 pIpcOutVpssPrm->inQueParams.prevLinkQueId = 0;
 pIpcOutVpssPrm->numOutQue   = 1;
 pIpcOutVpssPrm->outQueParams[0].nextLink = ipcInVideoId;
 pIpcOutVpssPrm->notifyNextLink   = TRUE;
 pIpcOutVpssPrm->notifyPrevLink   = TRUE;
 pIpcOutVpssPrm->noNotifyMode   = FALSE;

 pIpcInVideoPrm = &(IpcInVideoPrm);
 pIpcInVideoPrm->inQueParams.prevLinkId  = ipcOutVpssId;
 pIpcInVideoPrm->inQueParams.prevLinkQueId = 0;
 pIpcInVideoPrm->numOutQue   = 1;
 pIpcInVideoPrm->outQueParams[0].nextLink = encId;
 pIpcInVideoPrm->notifyNextLink   = TRUE;
 pIpcInVideoPrm->notifyPrevLink   = TRUE;
 pIpcInVideoPrm->noNotifyMode   = FALSE;

 pEncPrm = &(EncPrm);
 for(i=0;i<8;i++)
 {
  pEncPrm->chCreateParams[i].format = IVIDEO_H264HP;
  pEncPrm->chCreateParams[i].profile = IH264_HIGH_PROFILE;
  pEncPrm->chCreateParams[i].dataLayout = IVIDEO_FIELD_SEPARATED;
  pEncPrm->chCreateParams[i].fieldMergeEncodeEnable  = FALSE;
  pEncPrm->chCreateParams[i].defaultDynamicParams.intraFrameInterval = 60;
  pEncPrm->chCreateParams[i].encodingPreset = XDM_DEFAULT;
  pEncPrm->chCreateParams[i].enableAnalyticinfo = 0;
  pEncPrm->chCreateParams[i].rateControlPreset = IVIDEO_STORAGE;
  pEncPrm->chCreateParams[i].defaultDynamicParams.inputFrameRate = 30;
  pEncPrm->chCreateParams[i].defaultDynamicParams.targetBitRate = 1*1000*1000;//20000 * 1000;
  pEncPrm->chCreateParams[i].defaultDynamicParams.interFrameInterval = 1;
  pEncPrm->chCreateParams[i].defaultDynamicParams.mvAccuracy = IVIDENC2_MOTIONVECTOR_QUARTERPEL;
 }
 pEncPrm->inQueParams.prevLinkId = ipcInVideoId;
 pEncPrm->inQueParams.prevLinkQueId = 0;
 pEncPrm->outQueParams.nextLink = ipcBitsOutVideoId;

 pIpcBitsOutVideoPrm = &(IpcBitsOutVideoPrm);
 pIpcBitsOutVideoPrm->baseCreateParams.inQueParams.prevLinkId = encId;
 pIpcBitsOutVideoPrm->baseCreateParams.inQueParams.prevLinkQueId = 0;
 pIpcBitsOutVideoPrm->baseCreateParams.numOutQue   = 1;
 pIpcBitsOutVideoPrm->baseCreateParams.outQueParams[0].nextLink = ipcBitsInHostId;
 pIpcBitsOutVideoPrm->baseCreateParams.noNotifyMode  = TRUE;
 pIpcBitsOutVideoPrm->baseCreateParams.notifyNextLink  = FALSE;
 pIpcBitsOutVideoPrm->baseCreateParams.notifyPrevLink  = TRUE;

 pIpcBitsInHostPrm = &(IpcBitsInHostPrm);
 pIpcBitsInHostPrm->baseCreateParams.inQueParams.prevLinkId = ipcBitsOutVideoId;
 pIpcBitsInHostPrm->baseCreateParams.inQueParams.prevLinkQueId = 0;
 pIpcBitsInHostPrm->baseCreateParams.outQueParams[0].nextLink = SYSTEM_LINK_ID_INVALID;
 pIpcBitsInHostPrm->baseCreateParams.noNotifyMode   = TRUE; 
 pIpcBitsInHostPrm->baseCreateParams.notifyNextLink = FALSE;
 pIpcBitsInHostPrm->baseCreateParams.notifyPrevLink = FALSE;

 System_linkCreate(captureId, &capturePrm, sizeof(CaptureLink_CreateParams));
 System_linkCreate(deiId,&(deiPrm), sizeof(DeiLink_CreateParams));
 System_linkCreate(nsfId,&(nsfPrm), sizeof(NsfLink_CreateParams));
 System_linkCreate(dupId, &dupPrm, sizeof(DupLink_CreateParams));
 System_linkCreate(sclrId, &sclrPrm, sizeof(SclrLink_CreateParams));
 System_linkCreate(ipcFramesOutVpssId, &ipcFramesOutVpssPrm, sizeof(ipcFramesOutVpssPrm));
 System_linkCreate(ipcFramesInDspId, &ipcFramesInDspPrm, sizeof(ipcFramesInDspPrm)); 
 System_linkCreate(dspAlgId , &dspAlgPrm, sizeof(dspAlgPrm));
 System_linkCreate(ipcFramesOutVpssId2, &ipcFramesOutVpssPrm2, sizeof(ipcFramesOutVpssPrm2));
 System_linkCreate(ipcOutVpssId, &IpcOutVpssPrm, sizeof(IpcLink_CreateParams));
 System_linkCreate(ipcInVideoId, &IpcInVideoPrm, sizeof(IpcLink_CreateParams));
 System_linkCreate(encId, &EncPrm, sizeof(EncLink_CreateParams));
 System_linkCreate(ipcBitsOutVideoId, &IpcBitsOutVideoPrm, sizeof(IpcBitsOutLinkRTOS_CreateParams));
 System_linkCreate(ipcBitsInHostId, &IpcBitsInHostPrm, sizeof(IpcBitsInLinkHLOS_CreateParams));

 System_linkStart(ipcBitsInHostId);
 System_linkStart(ipcBitsOutVideoId);
 System_linkStart(encId);
 System_linkStart(ipcInVideoId);
 System_linkStart(ipcOutVpssId);
 System_linkStart(ipcFramesOutVpssId2);
 System_linkStart(ipcFramesInDspId);
 System_linkStart(dspAlgId);
 System_linkStart(ipcFramesOutVpssId);
 System_linkStart(sclrId);
 System_linkStart(dupId);
 System_linkStart(nsfId);
 System_linkStart(deiId); 
 System_linkStart(captureId);

when I run the program,It thrown exception:

!!!SLAVE CORE [VPSS-M3] DOWN!!!
SystemLink_copySlaveCoreExceptionContext:120
mmap of [0xbe020000:36864]
mmap virt addresss:0x400ac000
munmap of [0x400ac000:36864]
SystemLink_copySlaveCoreExceptionContext:127
SystemLink_handleSlaveCoreException:149
14505:!!!SLAVE CORE DOWN!!!.EXCEPTION INFO DUMP

 !!HW EXCEPTION ACTIVE (0/1): [0]

 !!EXCEPTION CORE NAME      : [VPSS-M3]

 !!EXCEPTION TASK NAME      : [IPC_FRAMES_OUT1]

 !!EXCEPTION LOCATION       : [links_common/system/system_ipc_notify.c:69]

 !!EXCEPTION INFO           : [status == Notify_S_SUCCESS]

[m3vpss ]  21730: NOTIFY: Send Event to [VPSS-M3][0] failed!!! (status = -14)
[m3vpss ]  21730: Assertion @ Line: 69 in links_common/system/system_ipc_notify.c: status == Notify_S_SUCCESS : failed !!!

any sugesstions??

THX!

  • For ipcFramesOutVpssPrm use nextLInk as ipcFramesInDsp and not the processLink. The nextLink cannot be INVALID link.

    Also I don't see why you are using ipcFramesOutVpssPrm2. It it nott connected to any remote ipc link.Remove it.

    Also pls delete below line since you are using single output queue for capture

     capturePrm.outQueParams[1].nextLink     = deiId;

  • Hi Badri,Thx for your quick reply.

    1:you means

    ipcFramesOutVpssPrm.baseCreateParams.outQueParams[0].nextLink = ipcFramesInDspId ;
    ipcFramesOutVpssPrm.baseCreateParams.notifyNextLink = TRUE;
    ipcFramesOutVpssPrm.baseCreateParams.processLink = SYSTEM_LINK_ID_INVALID;
    ipcFramesOutVpssPrm.baseCreateParams.notifyProcessLink = FALSE;
    ipcFramesOutVpssPrm.baseCreateParams.noNotifyMode = FALSE;

    is it right?

    2:when I remove ipcFramesOutVpssPrm2,the exception has gone,But the chains seems not all running,cause I put some print in the link when it running it periodically print "xxxlink alive",now only the capture dei nsf is running.

    any suggestions?

  • ling ling said:

    ipcFramesOutVpssPrm.baseCreateParams.outQueParams[0].nextLink = ipcFramesInDspId ;
    ipcFramesOutVpssPrm.baseCreateParams.notifyNextLink = TRUE;
    ipcFramesOutVpssPrm.baseCreateParams.processLink = SYSTEM_LINK_ID_INVALID;
    ipcFramesOutVpssPrm.baseCreateParams.notifyProcessLink = FALSE;
    ipcFramesOutVpssPrm.baseCreateParams.noNotifyMode = FALSE;

    is it right?

    Yes. You should additionally set ipcFramesOutVpssPrm.baseCreateParams.notifyNextLink   = TRUE;

    Share log of Vsys_printDetailedStatistics and Vsys_pritnBufferStatistics collected 3 times with 1 min interval

  • Hi Badri

    I found the problem

    pIpcOutVpssPrm->inQueParams.prevLinkQueId = 0;

    should be

    pIpcOutVpssPrm->inQueParams.prevLinkQueId = 1;

    thank you very much:)

    why you know

    "ipcFramesOutVpssPrm use nextLInk as ipcFramesInDsp and not the processLink. The nextLink cannot be INVALID link"

    "ipcFramesOutVpssPrm2. It not connected to any remote ipc link.Remove it."

    is there any reference pdf about it?

  • You can refer DVR_RDK_McFW_Link_API_Training.pdf for understanding basics of links.

    ling ling said:
    "ipcFramesOutVpssPrm use nextLInk as ipcFramesInDsp and not the processLink. The nextLink cannot be INVALID link"

    - nextLinkId cannot be INVALID for any links except ipcFramesInHost and IpcBitsInHost.

    ling ling said:
    "ipcFramesOutVpssPrm2. It not connected to any remote ipc link.Remove it."

    You should use ipcFrames link only if you want to send the frame to a remote core. In your case this was not the case hence you have to remove it.