DM385外挂tvp5151时capturelink及deilink的配置问题

2019-03-26 15:20发布

我们现在的DM385开发板上外挂了一个tvp5151芯片,用来接CVBS摄像头,原理图如下:
1.jpg
tvp5151输出8bit 内嵌同步的CVBS(NTSC或PAL)信号到DM385的VIP1 PORTA的D0~D7位上,数据流如下:

tvp5151(cvbs) -> capture-> deinterlace -> encode -> send

软件版本使用的是dvr rdk 4.0,代码如下:

  1. void MultiCh_createVcapVencVdis()
  2. {
  3.     CaptureLink_CreateParams            capturePrm;
  4.     DeiLink_CreateParams                deiPrm;
  5.     IpcFramesOutLinkRTOS_CreateParams   ipcFramesOutVpssToHostPrm;
  6.     IpcFramesInLinkRTOS_CreateParams    ipcFramesInVideoFromHostPrm;
  7.     EncLink_CreateParams                encPrm;
  8.     IpcBitsOutLinkRTOS_CreateParams     ipcBitsOutVideoPrm;
  9.     IpcBitsInLinkHLOS_CreateParams      ipcBitsInHostPrm;

  10.     CaptureLink_VipInstParams           *pCaptureInstPrm;
  11.     CaptureLink_OutParams               *pCaptureOutPrm;

  12.     VCAP_VIDEO_SOURCE_STATUS_S vidSourceStatus;
  13.     int i;

  14.     MULTICH_INIT_STRUCT(DeiLink_CreateParams, deiPrm);
  15.     MULTICH_INIT_STRUCT(IpcFramesOutLinkRTOS_CreateParams, ipcFramesOutVpssToHostPrm);
  16.     MULTICH_INIT_STRUCT(IpcFramesInLinkRTOS_CreateParams, ipcFramesInVideoFromHostPrm);
  17.     MULTICH_INIT_STRUCT(EncLink_CreateParams, encPrm);
  18.     MULTICH_INIT_STRUCT(IpcBitsOutLinkRTOS_CreateParams, ipcBitsOutVideoPrm);
  19.     MULTICH_INIT_STRUCT(IpcBitsInLinkHLOS_CreateParams, ipcBitsInHostPrm);

  20.     gVcapModuleContext.captureId                = SYSTEM_LINK_ID_CAPTURE;
  21.     gVcapModuleContext.deiId[0]                 = SYSTEM_LINK_ID_DEI_0;
  22.     gVcapModuleContext.ipcFramesOutVpssToHostId = SYSTEM_VPSS_LINK_ID_IPC_OUT_M3_0;
  23.     gVencModuleContext.ipcM3InId                = SYSTEM_VIDEO_LINK_ID_IPC_IN_M3_0;
  24.     gVencModuleContext.encId                    = SYSTEM_LINK_ID_VENC_0;
  25.     gVencModuleContext.ipcBitsOutRTOSId         = SYSTEM_VIDEO_LINK_ID_IPC_BITS_OUT_0;
  26.     gVencModuleContext.ipcBitsInHLOSId          = SYSTEM_HOST_LINK_ID_IPC_BITS_IN_0;

  27.     MultiCh_detectBoard();

  28.     System_linkControl(SYSTEM_LINK_ID_M3VPSS,
  29.         SYSTEM_M3VPSS_CMD_RESET_VIDEO_DEVICES,
  30.         NULL,
  31.         0,
  32.         TRUE
  33.         );

  34.     System_linkControl(SYSTEM_LINK_ID_M3VIDEO,
  35.         SYSTEM_COMMON_CMD_SET_CH2IVAHD_MAP_TBL,
  36.         &systemVid_encDecIvaChMapTbl,
  37.         sizeof(SystemVideo_Ivahd2ChMap_Tbl),
  38.         TRUE
  39.         );

  40.     gVcapModuleContext.isWrbkCaptEnable = FALSE;

  41.     CaptureLink_CreateParams_Init(&capturePrm);
  42.     capturePrm.outQueParams[0].nextLink     = gVcapModuleContext.deiId[0];
  43.     capturePrm.isPalMode                = TRUE;
  44.     capturePrm.numVipInst                   = 1;
  45.     capturePrm.enableSdCrop                 = FALSE;
  46.     capturePrm.doCropInCapture              = FALSE;
  47.     capturePrm.tilerEnable                  = FALSE;
  48.     capturePrm.numBufsPerCh                 = NUM_CAPTURE_BUFFERS;
  49.     capturePrm.overrideNumBufsInInstPrms    = 1u;

  50.     pCaptureInstPrm                     = &capturePrm.vipInst[0];
  51.     pCaptureInstPrm->inDataFormat        = SYSTEM_DF_YUV422P;
  52.     //pCaptureInstPrm->standard          = SYSTEM_STD_D1;
  53.     pCaptureInstPrm->standard            = SYSTEM_STD_MUX_4CH_D1;
  54.     pCaptureInstPrm->videoDecoderId      = 0;
  55.     pCaptureInstPrm->numOutput           = 1;
  56.     pCaptureInstPrm->numBufsPerCh        = NUM_CAPTURE_BUFFERS;
  57.     pCaptureInstPrm->vipInstId           = SYSTEM_CAPTURE_INST_VIP1_PORTA;
  58.     pCaptureInstPrm->videoIfMode     = SYSTEM_CAPT_VIDEO_IF_MODE_8BIT;
  59.     pCaptureInstPrm->inScanFormat        = SYSTEM_SF_INTERLACED;

  60.     pCaptureOutPrm                      = &pCaptureInstPrm->outParams[0];
  61.     pCaptureOutPrm->dataFormat           = SYSTEM_DF_YUV422I_YUYV;
  62.     pCaptureOutPrm->scEnable         = FALSE;
  63.     pCaptureOutPrm->scOutWidth           = 0;
  64.     pCaptureOutPrm->scOutHeight      = 0;
  65.     pCaptureOutPrm->outQueId         = 0;

  66.     deiPrm.inQueParams.prevLinkId       = gVcapModuleContext.captureId;
  67.     deiPrm.inQueParams.prevLinkQueId    = 0;

  68.     deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_VIP_SC][0].scaleMode = DEI_SCALE_MODE_RATIO;
  69.     deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_VIP_SC][0].ratio.widthRatio.numerator = 1;
  70.     deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_VIP_SC][0].ratio.widthRatio.denominator = 1;
  71.     deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_VIP_SC][0].ratio.heightRatio.numerator = 1;
  72.     deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_VIP_SC][0].ratio.heightRatio.denominator = 1;

  73.     for (i = 1; i < DEI_LINK_MAX_CH; i++)
  74.         deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_VIP_SC][i] = deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_VIP_SC][0];

  75.     deiPrm.enableOut[DEI_LINK_OUT_QUE_DEI_SC]                   = FALSE;
  76.     deiPrm.enableOut[DEI_LINK_OUT_QUE_VIP_SC]                   = TRUE;
  77.     deiPrm.enableOut[DEI_LINK_OUT_QUE_VIP_SC_SECONDARY_OUT]     = FALSE;
  78.     deiPrm.enableOut[DEI_LINK_OUT_QUE_DEI_SC_SECONDARY_OUT]     = FALSE;
  79.     deiPrm.enableOut[DEI_LINK_OUT_QUE_DEI_SC_TERTIARY_OUT]      = FALSE;

  80.     deiPrm.outQueParams[DEI_LINK_OUT_QUE_VIP_SC].nextLink       = gVcapModuleContext.ipcFramesOutVpssToHostId;
  81.     deiPrm.tilerEnable[DEI_LINK_OUT_QUE_VIP_SC]                 = FALSE;
  82.     deiPrm.comprEnable                                          = FALSE;
  83.     deiPrm.setVipScYuv422Format                                 = FALSE;
  84.     deiPrm.enableDeiForceBypass                                 = FALSE;

  85.     ipcFramesOutVpssToHostPrm.baseCreateParams.noNotifyMode                 = FALSE;
  86.     ipcFramesOutVpssToHostPrm.baseCreateParams.notifyNextLink               = TRUE;
  87.     ipcFramesOutVpssToHostPrm.baseCreateParams.notifyPrevLink               = TRUE;
  88.     ipcFramesOutVpssToHostPrm.baseCreateParams.inQueParams.prevLinkQueId    = 0;
  89.     ipcFramesOutVpssToHostPrm.baseCreateParams.inQueParams.prevLinkId       = gVcapModuleContext.deiId[0];
  90.     ipcFramesOutVpssToHostPrm.baseCreateParams.outQueParams[0].nextLink     = gVencModuleContext.ipcM3InId;

  91.     ipcFramesInVideoFromHostPrm.baseCreateParams.noNotifyMode               = FALSE;
  92.     ipcFramesInVideoFromHostPrm.baseCreateParams.notifyNextLink             = TRUE;
  93.     ipcFramesInVideoFromHostPrm.baseCreateParams.notifyPrevLink             = TRUE;
  94.     ipcFramesInVideoFromHostPrm.baseCreateParams.inQueParams.prevLinkQueId  = 0;   
  95.     ipcFramesInVideoFromHostPrm.baseCreateParams.inQueParams.prevLinkId     = gVcapModuleContext.ipcFramesOutVpssToHostId;
  96.     ipcFramesInVideoFromHostPrm.baseCreateParams.outQueParams[0].nextLink   = gVencModuleContext.encId;

  97.     {
  98.         EncLink_ChCreateParams *pLinkChPrm;
  99.         EncLink_ChDynamicParams *pLinkDynPrm;
  100.         VENC_CHN_DYNAMIC_PARAM_S *pDynPrm;
  101.         VENC_CHN_PARAMS_S *pChPrm;

  102.         for (i = 0; i < gVencModuleContext.vencConfig.numPrimaryChn; i++) {
  103.             pLinkChPrm = &encPrm.chCreateParams[i];
  104.             pLinkDynPrm = &pLinkChPrm->defaultDynamicParams;

  105.             pChPrm = &gVencModuleContext.vencConfig.encChannelParams[i];
  106.             pDynPrm = &pChPrm->dynamicParam;

  107.             pLinkChPrm->format                       = IVIDEO_H264HP;
  108.             pLinkChPrm->profile                      = gVencModuleContext.vencConfig.h264Profile[i];
  109.             pLinkChPrm->dataLayout                   = IVIDEO_PROGRESSIVE;
  110.             pLinkChPrm->fieldMergeEncodeEnable       = FALSE;
  111.             pLinkChPrm->enableAnalyticinfo           = pChPrm->enableAnalyticinfo;
  112.             pLinkChPrm->enableWaterMarking           = pChPrm->enableWaterMarking;
  113.             pLinkChPrm->maxBitRate                   = pChPrm->maxBitRate;
  114.             pLinkChPrm->encodingPreset               = pChPrm->encodingPreset;
  115.             pLinkChPrm->rateControlPreset            = IVIDEO_USER_DEFINED;
  116.             pLinkChPrm->enableSVCExtensionFlag       = pChPrm->enableSVCExtensionFlag;
  117.             pLinkChPrm->numTemporalLayer         = pChPrm->numTemporalLayer;
  118.             pLinkChPrm->enableHighSpeed              = FALSE;

  119.             pLinkDynPrm->intraFrameInterval          = pDynPrm->intraFrameInterval;
  120.             pLinkDynPrm->targetBitRate               = pDynPrm->targetBitRate;
  121.             pLinkDynPrm->interFrameInterval          = 1;
  122.             pLinkDynPrm->mvAccuracy                  = IVIDENC2_MOTIONVECTOR_QUARTERPEL;
  123.             pLinkDynPrm->inputFrameRate              = pDynPrm->inputFrameRate;
  124.             pLinkDynPrm->rcAlg                       = pDynPrm->rcAlg;
  125.             pLinkDynPrm->qpMin                       = pDynPrm->qpMin;
  126.             pLinkDynPrm->qpMax                       = pDynPrm->qpMax;
  127.             pLinkDynPrm->qpInit                      = pDynPrm->qpInit;
  128.             pLinkDynPrm->vbrDuration             = pDynPrm->vbrDuration;
  129.             pLinkDynPrm->vbrSensitivity              = pDynPrm->vbrSensitivity;

  130.             encPrm.numBufPerCh[i]                   = 4;
  131.         }
  132.     }

  133.     encPrm.chCreateParams[0].defaultDynamicParams.inputFrameRate = 30;
  134.     encPrm.chCreateParams[1].defaultDynamicParams.inputFrameRate = 30;
  135.     encPrm.inQueParams.prevLinkQueId    = 0;
  136.     encPrm.inQueParams.prevLinkId       = gVencModuleContext.ipcM3InId;
  137.     encPrm.outQueParams.nextLink        = gVencModuleContext.ipcBitsOutRTOSId;

  138.     ipcBitsOutVideoPrm.baseCreateParams.noNotifyMode                = FALSE;
  139.     ipcBitsOutVideoPrm.baseCreateParams.notifyNextLink              = TRUE;
  140.     ipcBitsOutVideoPrm.baseCreateParams.notifyPrevLink              = TRUE;
  141.     ipcBitsOutVideoPrm.baseCreateParams.numOutQue                   = 1;
  142.     ipcBitsOutVideoPrm.baseCreateParams.inQueParams.prevLinkQueId   = 0;
  143.     ipcBitsOutVideoPrm.baseCreateParams.inQueParams.prevLinkId      = gVencModuleContext.encId;
  144.     ipcBitsOutVideoPrm.baseCreateParams.outQueParams[0].nextLink        = gVencModuleContext.ipcBitsInHLOSId;

  145.     ipcBitsInHostPrm.baseCreateParams.inQueParams.prevLinkQueId     = 0;
  146.     ipcBitsInHostPrm.baseCreateParams.inQueParams.prevLinkId        = gVencModuleContext.ipcBitsOutRTOSId;
  147.     MultiCh_ipcBitsInitCreateParams_BitsInHLOS(&ipcBitsInHostPrm);

  148.     vidSourceStatus.numChannels = 1;
  149.     vidSourceStatus.chStatus[0].chId = 0;
  150.     vidSourceStatus.chStatus[0].frameWidth = 720;
  151.     vidSourceStatus.chStatus[0].frameHeight = 288;
  152.     vidSourceStatus.chStatus[0].vipInstId = SYSTEM_CAPTURE_INST_VIP1_PORTA;
  153.     vidSourceStatus.chStatus[0].isInterlaced = TRUE;
  154.     vidSourceStatus.chStatus[0].frameInterval = 20000;
  155.     vidSourceStatus.chStatus[0].isVideoDetect = FALSE;

  156.     Vcap_setVideoSourceStatus(&vidSourceStatus);

  157.     System_linkCreate(gVcapModuleContext.captureId, &capturePrm, sizeof(capturePrm));
  158.     System_linkCreate(gVcapModuleContext.deiId[0], &deiPrm, sizeof(deiPrm));
  159.     System_linkCreate(gVcapModuleContext.ipcFramesOutVpssToHostId, &ipcFramesOutVpssToHostPrm, sizeof(ipcFramesOutVpssToHostPrm));
  160.     System_linkCreate(gVencModuleContext.ipcM3InId, &ipcFramesInVideoFromHostPrm, sizeof(ipcFramesInVideoFromHostPrm));
  161.     System_linkCreate(gVencModuleContext.encId, &encPrm, sizeof(encPrm));
  162.     System_linkCreate(gVencModuleContext.ipcBitsOutRTOSId, &ipcBitsOutVideoPrm, sizeof(ipcBitsOutVideoPrm));
  163.     System_linkCreate(gVencModuleContext.ipcBitsInHLOSId, &ipcBitsInHostPrm, sizeof(ipcBitsInHostPrm));
  164. }
复制代码测试结果如下:1. 当“pCaptureInstPrm->standard  = SYSTEM_STD_D1”时,capture采不到视频;2. 当“pCaptureInstPrm->standard  = SYSTEM_STD_MUX_4CH_D1”时,capture可以采到视频,但deinterlace会出错;
麻烦各位帮忙看一下上面的哪些配置是错误的,到底该怎么配置才能让视频出来? 谢谢!
此帖出自小平头技术问答
0条回答

一周热门 更多>