DVRRDK version is 04.01.00.02.
My my link is
| DEI_LINK_OUT_QUE_DEI_SC->nfs-> |
vip1->dei->|DEI_LINK_OUT_QUE_VIP_SC-> |->merge->vpssout->vidin->enc->vidout->a8in
|DEI_LINK_OUT_QUE_VIP_SC_SECONDARY_OUT |
when i start it, there is no error output. But only two encoded frame out, then nothing output.
my source:
/*------------------------------ 1080p <h.264> + 720p <h.264> + 480p <h.264> -------------------------------------
Capture (YUV422I) 1CH 1080p 60fps
|
|
DEI
|+----------------------------------------------------
| | |
(VIP-SC YUV420 ) (VIP-SC YUV420 ) (DEI-SC YUV422I)
| | |
| | |
| | |
| | |
| | NSF
| | (YUV420)
| | |
| | |
| | |
| | |
|--------------- | --------------|
| | |
| | |
| | |
| | |
|2 |3 |1 0 reserved for preview PATH=STREAM in VCAP
-------------------------
Merge Link
-------------------------
|
|
|
(enableVideoFrameExport==false)--|--(enableVideoFrameExport==true)
| |
IPCM3OUT(VPSS) IPCFramesOut(VPSS)------IPCFramesIn(A8)-----
| |
| |
| app process
| |
| |
IPCM3IN(VIDEO) IPCFramesIn(VIDEO)------IPCFramesOut(A8)----
| |
--------------|-----------
|
ENC
|
|
IPCBitsOut(VIDEO)
|
|
IPCBitsIn(A8)
|
|
app
*/
#include "mcfw/src_linux/mcfw_api/usecases/multich_common.h"
#include "mcfw/src_linux/mcfw_api/usecases/multich_ipcbits.h"
#include "mcfw/interfaces/link_api/system_tiler.h"
/* =============================================================================
* Use case code
* =============================================================================
*/
static SystemVideo_Ivahd2ChMap_Tbl systemVid_encDecIvaChMapTbl =
{
.isPopulated = 1,
.ivaMap[0] =
{
.EncNumCh = 4,
.EncChList = {0, 1, 2, 3},
.DecNumCh = 0,
.DecChList = {0},
},
};
#define NUM_CAPTURE_BUFFERS 4
#define NUM_DEI_CH_BUFFERS 2
#define NUM_ENCODE_PRIMARY_BUFFERS 2
#define NUM_ENCODE_SECONDARY_BUFFERS 2
#define NUM_ENCODE_TERTIARY_BUFFERS 2
Bool enableVideoFrameExport;
static
Void MultiCh_set_capture_prm(CaptureLink_CreateParams *capturePrm)
{
CaptureLink_VipInstParams *pCaptureInstPrm;
CaptureLink_OutParams *pCaptureOutPrm;
UInt32 vipInstId;
capturePrm->numVipInst = 1;
capturePrm->tilerEnable = FALSE;
capturePrm->numBufsPerCh = NUM_CAPTURE_BUFFERS;
capturePrm->numExtraBufs = 0;
capturePrm->fakeHdMode = FALSE;
capturePrm->enableSdCrop = FALSE;
capturePrm->doCropInCapture = FALSE;
capturePrm->isPalMode = FALSE;
vipInstId = 0;
pCaptureInstPrm = &capturePrm->vipInst[vipInstId];
pCaptureInstPrm->vipInstId = SYSTEM_CAPTURE_INST_VIP1_PORTA;
pCaptureInstPrm->videoCaptureMode = SYSTEM_CAPT_VIDEO_CAPTURE_MODE_SINGLE_CH_NON_MUX_DISCRETE_SYNC_ACTVID_VSYNC;
pCaptureInstPrm->videoIfMode = SYSTEM_CAPT_VIDEO_IF_MODE_16BIT;
pCaptureInstPrm->inScanFormat = Vcap_getScanFormat();
pCaptureInstPrm->videoDecoderId = 0;
pCaptureInstPrm->inDataFormat = SYSTEM_DF_YUV422P;
pCaptureInstPrm->standard = Vcap_getStandard();
pCaptureInstPrm->numOutput = 1;
pCaptureOutPrm = &pCaptureInstPrm->outParams[0];
pCaptureOutPrm->dataFormat = SYSTEM_DF_YUV422I_YUYV;
//pCaptureOutPrm->dataFormat = SYSTEM_DF_YUV420SP_UV;
pCaptureOutPrm->scEnable = FALSE;
pCaptureOutPrm->scOutWidth = 0;
pCaptureOutPrm->scOutHeight = 0;
pCaptureOutPrm->outQueId = 0;
}
Void MultiCh_createProgressiveVcapFrameOutFrameInVenc()
{
CaptureLink_CreateParams capturePrm;
NsfLink_CreateParams nsfPrm;
MergeLink_CreateParams mergePrm;
DeiLink_CreateParams deiPrm;
EncLink_CreateParams encPrm;
IpcLink_CreateParams ipcOutVpssPrm;
IpcLink_CreateParams ipcInVideoPrm;
IpcBitsOutLinkRTOS_CreateParams ipcBitsOutVideoPrm;
IpcBitsInLinkHLOS_CreateParams ipcBitsInHostPrm;
IpcFramesOutLinkRTOS_CreateParams ipcFramesOutVpssToHostPrm;
IpcFramesInLinkHLOS_CreateParams ipcFramesInHostPrm;
IpcFramesOutLinkHLOS_CreateParams ipcFramesOutHostPrm;
IpcFramesInLinkRTOS_CreateParams ipcFramesInVideoFromHostPrm;
UInt32 mergeId;
UInt32 ipcOutVpssId;
UInt32 ipcInVideoId;
System_LinkInfo framesProducerLinkInfo;
UInt32 vipInstId;
UInt32 i;
MULTICH_INIT_STRUCT(IpcBitsOutLinkRTOS_CreateParams,ipcBitsOutVideoPrm);
MULTICH_INIT_STRUCT(IpcBitsInLinkHLOS_CreateParams,ipcBitsInHostPrm);
MULTICH_INIT_STRUCT(EncLink_CreateParams, encPrm);
MULTICH_INIT_STRUCT(DeiLink_CreateParams, deiPrm);
MULTICH_INIT_STRUCT(NsfLink_CreateParams, nsfPrm);
MULTICH_INIT_STRUCT(IpcFramesOutLinkRTOS_CreateParams, ipcFramesOutVpssToHostPrm);
MULTICH_INIT_STRUCT(IpcFramesInLinkHLOS_CreateParams, ipcFramesInHostPrm);
MULTICH_INIT_STRUCT(IpcFramesOutLinkHLOS_CreateParams, ipcFramesOutHostPrm);
MULTICH_INIT_STRUCT(IpcFramesInLinkRTOS_CreateParams, ipcFramesInVideoFromHostPrm);
MultiCh_detectBoard();
System_linkControl(
SYSTEM_LINK_ID_M3VPSS,
SYSTEM_M3VPSS_CMD_RESET_VIDEO_DEVICES,
NULL,
0,
TRUE
);
System_linkControl(
SYSTEM_LINK_ID_M3VIDEO,
SYSTEM_COMMON_CMD_SET_CH2IVAHD_MAP_TBL,
&systemVid_encDecIvaChMapTbl,
sizeof(SystemVideo_Ivahd2ChMap_Tbl),
TRUE
);
/* Disable tiler allocator for this usecase
* for that tiler memory can be reused for
* non-tiled allocation
*/
SystemTiler_disableAllocator();
vipInstId = 0;
enableVideoFrameExport = FALSE;
gVcapModuleContext.captureId = SYSTEM_LINK_ID_CAPTURE;
gVcapModuleContext.deiId[0] = SYSTEM_LINK_ID_DEI_0;
gVcapModuleContext.nsfId[0] = SYSTEM_LINK_ID_NSF_0;
mergeId = SYSTEM_VPSS_LINK_ID_MERGE_0;
ipcOutVpssId = SYSTEM_VPSS_LINK_ID_IPC_OUT_M3_0;
ipcInVideoId = SYSTEM_VIDEO_LINK_ID_IPC_IN_M3_0;
gVencModuleContext.encId = SYSTEM_LINK_ID_VENC_0;
gVencModuleContext.ipcBitsOutRTOSId = SYSTEM_VIDEO_LINK_ID_IPC_BITS_OUT_0;
gVencModuleContext.ipcBitsInHLOSId = SYSTEM_HOST_LINK_ID_IPC_BITS_IN_0;
if (enableVideoFrameExport)
{
gVcapModuleContext.ipcFramesOutVpssToHostId = SYSTEM_VPSS_LINK_ID_IPC_FRAMES_OUT_0;
gVcapModuleContext.ipcFramesInHostId = SYSTEM_HOST_LINK_ID_IPC_FRAMES_IN_0;
gVencModuleContext.ipcFramesOutHostId = SYSTEM_HOST_LINK_ID_IPC_FRAMES_OUT_0;
gVencModuleContext.ipcFramesInVideoFromHostId = SYSTEM_VIDEO_LINK_ID_IPC_FRAMES_IN_0;
}
CaptureLink_CreateParams_Init(&capturePrm);
capturePrm.outQueParams[0].nextLink = gVcapModuleContext.deiId[0];
MultiCh_set_capture_prm(&capturePrm);
DeiLink_CreateParams_Init(&deiPrm);
deiPrm.inQueParams.prevLinkId = gVcapModuleContext.captureId;
deiPrm.inQueParams.prevLinkQueId = 0;
/* Set Output Scaling at DEI based on ratio */
deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_DEI_SC][0].scaleMode = DEI_SCALE_MODE_RATIO;
deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_DEI_SC][0].ratio.widthRatio.numerator = 1;
deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_DEI_SC][0].ratio.widthRatio.denominator = 4;
deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_DEI_SC][0].ratio.heightRatio.numerator = 1;
deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_DEI_SC][0].ratio.heightRatio.denominator = 4;
for (i=1; i < DEI_LINK_MAX_CH; i++)
deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_DEI_SC][i] = deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_DEI_SC][0];
deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_VIP_SC][0].scaleMode = DEI_SCALE_MODE_RATIO;
deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_VIP_SC][0].ratio.heightRatio.numerator = 1;
deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_VIP_SC][0].ratio.heightRatio.denominator = 1;
deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_VIP_SC][0].ratio.widthRatio.numerator = 1;
deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_VIP_SC][0].ratio.widthRatio.denominator = 1;
for (i=1; i < DEI_LINK_MAX_CH; i++)
deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_VIP_SC][i] = deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_VIP_SC][0];
deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_VIP_SC_SECONDARY_OUT][0].scaleMode = DEI_SCALE_MODE_RATIO;
deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_VIP_SC_SECONDARY_OUT][0].ratio.heightRatio.numerator = 1;
deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_VIP_SC_SECONDARY_OUT][0].ratio.heightRatio.denominator = 2;
deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_VIP_SC_SECONDARY_OUT][0].ratio.widthRatio.numerator = 1;
deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_VIP_SC_SECONDARY_OUT][0].ratio.widthRatio.denominator = 2;
for (i=1; i < DEI_LINK_MAX_CH; i++)
deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_VIP_SC_SECONDARY_OUT][i] = deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_VIP_SC_SECONDARY_OUT][0];
deiPrm.enableOut[DEI_LINK_OUT_QUE_DEI_SC] = TRUE;
deiPrm.enableOut[DEI_LINK_OUT_QUE_VIP_SC] = TRUE;
deiPrm.enableOut[DEI_LINK_OUT_QUE_VIP_SC_SECONDARY_OUT] = TRUE;
deiPrm.outQueParams[DEI_LINK_OUT_QUE_DEI_SC].nextLink = gVcapModuleContext.nsfId[0];
deiPrm.outQueParams[DEI_LINK_OUT_QUE_VIP_SC].nextLink = mergeId;
deiPrm.outQueParams[DEI_LINK_OUT_QUE_VIP_SC_SECONDARY_OUT].nextLink = mergeId;
deiPrm.comprEnable = FALSE;
deiPrm.setVipScYuv422Format = FALSE;
deiPrm.enableDualVipOut = FALSE;
deiPrm.inputDeiFrameRate = 60u;
deiPrm.outputDeiFrameRate = 30u;
deiPrm.inputFrameRate[DEI_LINK_OUT_QUE_DEI_SC] = 30;
deiPrm.outputFrameRate[DEI_LINK_OUT_QUE_DEI_SC] = 30;
deiPrm.inputFrameRate[DEI_LINK_OUT_QUE_VIP_SC] = 30;
deiPrm.outputFrameRate[DEI_LINK_OUT_QUE_VIP_SC] = 30;
deiPrm.inputFrameRate[DEI_LINK_OUT_QUE_VIP_SC_SECONDARY_OUT] = 30;
deiPrm.outputFrameRate[DEI_LINK_OUT_QUE_VIP_SC_SECONDARY_OUT] = 30;
deiPrm.enableDeiForceBypass = TRUE;
deiPrm.numBufsPerCh[DEI_LINK_OUT_QUE_DEI_SC] = NUM_DEI_CH_BUFFERS;
deiPrm.numBufsPerCh[DEI_LINK_OUT_QUE_VIP_SC] = NUM_DEI_CH_BUFFERS;
deiPrm.numBufsPerCh[DEI_LINK_OUT_QUE_VIP_SC_SECONDARY_OUT] = NUM_DEI_CH_BUFFERS;
nsfPrm.bypassNsf = TRUE;
nsfPrm.tilerEnable = FALSE;
nsfPrm.inQueParams.prevLinkId = gVcapModuleContext.deiId[0];
nsfPrm.inQueParams.prevLinkQueId = DEI_LINK_OUT_QUE_DEI_SC;
nsfPrm.numOutQue = 1;
nsfPrm.outQueParams[0].nextLink = mergeId;
nsfPrm.numBufsPerCh = NSF_LINK_NUM_BUFS_PER_CH_DEFAULT;
nsfPrm.inputFrameRate = 30;
nsfPrm.outputFrameRate = 30;
/* Merge Q0 - 1080p <from DEI-SC>, Q1 - 720p <from VIP-SC>, Q2 - 480p <from VIP-SC_SECONDARY> */
mergePrm.inQueParams[0].prevLinkId = gVcapModuleContext.deiId[0];
mergePrm.inQueParams[0].prevLinkQueId = DEI_LINK_OUT_QUE_VIP_SC;
mergePrm.inQueParams[1].prevLinkId = gVcapModuleContext.deiId[0];
mergePrm.inQueParams[1].prevLinkQueId = DEI_LINK_OUT_QUE_VIP_SC_SECONDARY_OUT;
mergePrm.inQueParams[2].prevLinkId = gVcapModuleContext.nsfId[0];
mergePrm.inQueParams[2].prevLinkQueId = 0;
mergePrm.notifyNextLink = TRUE;
mergePrm.numInQue = 3;
if (!enableVideoFrameExport) {
mergePrm.outQueParams.nextLink = ipcOutVpssId;
ipcOutVpssPrm.inQueParams.prevLinkQueId = 0;
ipcOutVpssPrm.inQueParams.prevLinkId = mergeId;
ipcOutVpssPrm.numOutQue = 1;
ipcOutVpssPrm.outQueParams[0].nextLink = ipcInVideoId;
ipcOutVpssPrm.notifyNextLink = TRUE;
ipcOutVpssPrm.notifyPrevLink = TRUE;
ipcOutVpssPrm.noNotifyMode = FALSE;
ipcInVideoPrm.inQueParams.prevLinkId = ipcOutVpssId;
ipcInVideoPrm.inQueParams.prevLinkQueId = 0;
ipcInVideoPrm.numOutQue = 1;
ipcInVideoPrm.outQueParams[0].nextLink = gVencModuleContext.encId;
ipcInVideoPrm.notifyNextLink = TRUE;
ipcInVideoPrm.notifyPrevLink = TRUE;
ipcInVideoPrm.noNotifyMode = FALSE;
} else { /* enableVideoFrameExport */
mergePrm.outQueParams.nextLink = gVcapModuleContext.ipcFramesOutVpssToHostId;
/* Set ipcFramesOutVpss link info */
ipcFramesOutVpssToHostPrm.baseCreateParams.noNotifyMode = TRUE;
ipcFramesOutVpssToHostPrm.baseCreateParams.notifyNextLink = FALSE;
ipcFramesOutVpssToHostPrm.baseCreateParams.notifyPrevLink = TRUE;
ipcFramesOutVpssToHostPrm.baseCreateParams.inQueParams.prevLinkId = mergeId;
ipcFramesOutVpssToHostPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
ipcFramesOutVpssToHostPrm.baseCreateParams.outQueParams[0].nextLink = gVcapModuleContext.ipcFramesInHostId;
ipcFramesInHostPrm.baseCreateParams.noNotifyMode = TRUE;
ipcFramesInHostPrm.baseCreateParams.notifyNextLink = FALSE;
ipcFramesInHostPrm.baseCreateParams.notifyPrevLink = FALSE;
ipcFramesInHostPrm.baseCreateParams.inQueParams.prevLinkId = gVcapModuleContext.ipcFramesOutVpssToHostId;
ipcFramesInHostPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
ipcFramesInHostPrm.baseCreateParams.outQueParams[0].nextLink = SYSTEM_LINK_ID_INVALID;
ipcFramesInHostPrm.exportOnlyPhyAddr = TRUE;
ipcFramesInHostPrm.cbCtx = &gVcapModuleContext;
ipcFramesInHostPrm.cbFxn = Vcap_ipcFramesInCbFxn;
ipcFramesOutHostPrm.baseCreateParams.noNotifyMode = TRUE;
ipcFramesOutHostPrm.baseCreateParams.notifyNextLink = FALSE;
ipcFramesOutHostPrm.baseCreateParams.notifyPrevLink = FALSE;
ipcFramesOutHostPrm.baseCreateParams.inQueParams.prevLinkId = SYSTEM_LINK_ID_INVALID;
ipcFramesOutHostPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
ipcFramesOutHostPrm.baseCreateParams.outQueParams[0].nextLink = gVencModuleContext.ipcFramesInVideoFromHostId;
ipcFramesInVideoFromHostPrm.baseCreateParams.noNotifyMode = TRUE;
ipcFramesInVideoFromHostPrm.baseCreateParams.notifyNextLink = TRUE;
ipcFramesInVideoFromHostPrm.baseCreateParams.notifyPrevLink = FALSE;
ipcFramesInVideoFromHostPrm.baseCreateParams.inQueParams.prevLinkId = gVencModuleContext.ipcFramesOutHostId;
ipcFramesInVideoFromHostPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
ipcFramesInVideoFromHostPrm.baseCreateParams.outQueParams[0].nextLink = gVencModuleContext.encId;
}
/* enc */
//{
EncLink_ChCreateParams *pLinkChPrm;
EncLink_ChDynamicParams *pLinkDynPrm;
VENC_CHN_DYNAMIC_PARAM_S *pDynPrm;
VENC_CHN_PARAMS_S *pChPrm;
EncLink_CreateParams_Init(&encPrm);
encPrm.numBufPerCh[0] = NUM_ENCODE_PRIMARY_BUFFERS;
encPrm.numBufPerCh[1] = NUM_ENCODE_SECONDARY_BUFFERS;
encPrm.numBufPerCh[2] = NUM_ENCODE_TERTIARY_BUFFERS;
/* Primary Stream Params - H264 */
for (i=0; i<3/*gVencModuleContext.vencConfig.numPrimaryChn*/; i++)
{
pLinkChPrm = &encPrm.chCreateParams[i];
pLinkDynPrm = &pLinkChPrm->defaultDynamicParams;
pChPrm = &gVencModuleContext.vencConfig.encChannelParams[i];
pDynPrm = &pChPrm->dynamicParam;
pLinkChPrm->format = IVIDEO_H264HP;
pLinkChPrm->profile = gVencModuleContext.vencConfig.h264Profile[i];
pLinkChPrm->dataLayout = VCODEC_FIELD_SEPARATED;
pLinkChPrm->fieldMergeEncodeEnable = FALSE;
pLinkChPrm->enableAnalyticinfo = pChPrm->enableAnalyticinfo;
pLinkChPrm->enableWaterMarking = pChPrm->enableWaterMarking;
pLinkChPrm->maxBitRate = pChPrm->maxBitRate;
pLinkChPrm->encodingPreset = pChPrm->encodingPreset;
pLinkChPrm->rateControlPreset = pChPrm->rcType;
pLinkChPrm->enableSVCExtensionFlag = pChPrm->enableSVCExtensionFlag;
/* Assign pChPrm->numTemporalLayer for enbling SVC-T feature */
pLinkChPrm->numTemporalLayer = VENC_TEMPORAL_LAYERS_1;
pLinkDynPrm->intraFrameInterval = pDynPrm->intraFrameInterval;
pLinkDynPrm->targetBitRate = pDynPrm->targetBitRate;
pLinkDynPrm->interFrameInterval = 1;
pLinkDynPrm->mvAccuracy = IVIDENC2_MOTIONVECTOR_QUARTERPEL;
pLinkDynPrm->inputFrameRate = pDynPrm->inputFrameRate;
pLinkDynPrm->rcAlg = pDynPrm->rcAlg;
pLinkDynPrm->qpMin = pDynPrm->qpMin;
pLinkDynPrm->qpMax = pDynPrm->qpMax;
pLinkDynPrm->qpInit = pDynPrm->qpInit;
pLinkDynPrm->vbrDuration = pDynPrm->vbrDuration;
pLinkDynPrm->vbrSensitivity = pDynPrm->vbrSensitivity;
}
#if 0
/* MJPEG Params */
for (i=gVencModuleContext.vencConfig.numPrimaryChn; i<(VENC_CHN_MAX); i++)
{
pLinkChPrm = &encPrm.chCreateParams[i];
pLinkDynPrm = &pLinkChPrm->defaultDynamicParams;
pChPrm = &gVencModuleContext.vencConfig.encChannelParams[i];
pDynPrm = &pChPrm->dynamicParam;
pLinkChPrm->format = IVIDEO_MJPEG;
pLinkChPrm->profile = 0;
pLinkChPrm->dataLayout = VCODEC_FIELD_SEPARATED;
pLinkChPrm->fieldMergeEncodeEnable = FALSE;
pLinkChPrm->enableAnalyticinfo = 0;
pLinkChPrm->enableWaterMarking = 0;
pLinkChPrm->maxBitRate = 0;
pLinkChPrm->encodingPreset = 0;
pLinkChPrm->rateControlPreset = 0;
pLinkChPrm->enableSVCExtensionFlag = 0;
pLinkChPrm->numTemporalLayer = 0;
pLinkDynPrm->intraFrameInterval = 0;
pLinkDynPrm->targetBitRate = 100*1000;
pLinkDynPrm->interFrameInterval = 0;
pLinkDynPrm->mvAccuracy = 0;
pLinkDynPrm->inputFrameRate = pDynPrm->inputFrameRate;
pLinkDynPrm->qpMin = 0;
pLinkDynPrm->qpMax = 0;
pLinkDynPrm->qpInit = -1;
pLinkDynPrm->vbrDuration = 0;
pLinkDynPrm->vbrSensitivity = 0;
}
#endif
if (enableVideoFrameExport) {
encPrm.inQueParams.prevLinkId = gVencModuleContext.ipcFramesInVideoFromHostId;
encPrm.inQueParams.prevLinkQueId = 0;
}
else {
encPrm.inQueParams.prevLinkId = ipcInVideoId;
encPrm.inQueParams.prevLinkQueId = 0;
}
encPrm.outQueParams.nextLink = gVencModuleContext.ipcBitsOutRTOSId;
//}
ipcBitsOutVideoPrm.baseCreateParams.inQueParams.prevLinkId = gVencModuleContext.encId;
ipcBitsOutVideoPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
ipcBitsOutVideoPrm.baseCreateParams.numOutQue = 1;
ipcBitsOutVideoPrm.baseCreateParams.outQueParams[0].nextLink = gVencModuleContext.ipcBitsInHLOSId;
MultiCh_ipcBitsInitCreateParams_BitsOutRTOS(&ipcBitsOutVideoPrm, TRUE);
ipcBitsInHostPrm.baseCreateParams.inQueParams.prevLinkId = gVencModuleContext.ipcBitsOutRTOSId;
ipcBitsInHostPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
MultiCh_ipcBitsInitCreateParams_BitsInHLOS(&ipcBitsInHostPrm);
System_linkCreate(gVcapModuleContext.captureId, &capturePrm, sizeof(capturePrm));
System_linkCreate(gVcapModuleContext.deiId[0], &deiPrm, sizeof(deiPrm));
System_linkCreate(gVcapModuleContext.nsfId[0], &nsfPrm, sizeof(nsfPrm));
System_linkCreate(mergeId, &mergePrm, sizeof(mergePrm));
if (enableVideoFrameExport) {
System_linkCreate(gVcapModuleContext.ipcFramesOutVpssToHostId, &ipcFramesOutVpssToHostPrm, sizeof(ipcFramesOutVpssToHostPrm));
System_linkCreate(gVcapModuleContext.ipcFramesInHostId, &ipcFramesInHostPrm, sizeof(ipcFramesInHostPrm));
System_linkGetInfo(gVcapModuleContext.ipcFramesInHostId,&framesProducerLinkInfo);
OSA_assert(framesProducerLinkInfo.numQue == 1);
ipcFramesOutHostPrm.inQueInfo = framesProducerLinkInfo.queInfo[0];
System_linkCreate(gVencModuleContext.ipcFramesOutHostId, &ipcFramesOutHostPrm, sizeof(ipcFramesOutHostPrm));
System_linkCreate(gVencModuleContext.ipcFramesInVideoFromHostId, &ipcFramesInVideoFromHostPrm, sizeof(ipcFramesInVideoFromHostPrm));
} else {
System_linkCreate(ipcOutVpssId, &ipcOutVpssPrm, sizeof(ipcOutVpssPrm) );
System_linkCreate(ipcInVideoId, &ipcInVideoPrm, sizeof(ipcInVideoPrm));
}
System_linkCreate(gVencModuleContext.encId, &encPrm, sizeof(encPrm));
System_linkCreate(gVencModuleContext.ipcBitsOutRTOSId, &ipcBitsOutVideoPrm, sizeof(ipcBitsOutVideoPrm));
System_linkCreate(gVencModuleContext.ipcBitsInHLOSId, &ipcBitsInHostPrm, sizeof(ipcBitsInHostPrm));
}
Void MultiCh_deleteProgressiveVcapFrameOutFrameInVenc()
{
UInt32 mergeId;
UInt32 ipcOutVpssId;
UInt32 ipcInVideoId;
mergeId = SYSTEM_VPSS_LINK_ID_MERGE_0;
ipcOutVpssId = SYSTEM_VPSS_LINK_ID_IPC_OUT_M3_0;
ipcInVideoId = SYSTEM_VIDEO_LINK_ID_IPC_IN_M3_0;
gVencModuleContext.ipcBitsOutRTOSId = SYSTEM_VIDEO_LINK_ID_IPC_BITS_OUT_0;
gVencModuleContext.ipcBitsInHLOSId = SYSTEM_HOST_LINK_ID_IPC_BITS_IN_0;
System_linkDelete(gVcapModuleContext.captureId);
System_linkDelete(gVcapModuleContext.deiId[0]);
System_linkDelete(gVcapModuleContext.nsfId[0]);
System_linkDelete(mergeId);
if (enableVideoFrameExport) {
System_linkDelete(gVcapModuleContext.ipcFramesOutVpssToHostId);
System_linkDelete(gVcapModuleContext.ipcFramesInHostId);
System_linkDelete(gVencModuleContext.ipcFramesOutHostId);
System_linkDelete(gVencModuleContext.ipcFramesInVideoFromHostId);
} else {
System_linkDelete(ipcOutVpssId);
System_linkDelete(ipcInVideoId);
}
System_linkDelete(gVencModuleContext.encId);
System_linkDelete(gVencModuleContext.ipcBitsOutRTOSId);
System_linkDelete(gVencModuleContext.ipcBitsInHLOSId);
/* Print the HWI, SWI and all tasks load */
/* Reset the accumulated timer ticks */
MultiCh_prfLoadCalcEnable(FALSE, TRUE, FALSE);
/* Reenable tiler allocator taht was disabled by this usecase
* at delete time.
*/
SystemTiler_enableAllocator();
}
the log:
0: SYSTEM: System Common Init in progress !!! 1: SYSTEM: IPC init in progress !!! 32: SYSTEM: CPU [DSP] is NOT available on this platform !!! 33: SYSTEM: CPU [VIDEO-M3] syslink proc ID is [0] !!! 33: SYSTEM: CPU [VPSS-M3] syslink proc ID is [1] !!! 33: SYSTEM: CPU [HOST] syslink proc ID is [2] !!! 33: SYSTEM: Creating MsgQ Heap [IPC_MSGQ_MSG_HEAP_3] ... 35: SYSTEM: Creating MsgQ [HOST_MSGQ] ... 38: SYSTEM: Creating MsgQ [HOST_ACK_MSGQ] ... 39: SYSTEM: Opening MsgQ [VIDEO-M3_MSGQ] ... 40: SYSTEM: Opening MsgQ [VPSS-M3_MSGQ] ... 41: SYSTEM: Notify register to [VIDEO-M3] line 0, event 15 ... 42: SYSTEM: Notify register to [VPSS-M3] line 0, event 15 ... 43: SYSTEM: IPC init DONE !!! 44: SYSTEM: Creating ListMP [HOST_IPC_OUT_24] in region 0 ... 46: SYSTEM: Creating ListMP [HOST_IPC_IN_24] in region 0 ... 48: SYSTEM: ListElem Shared Addr = 0x40747000 49: SYSTEM: Creating ListMP [HOST_IPC_OUT_25] in region 0 ... 51: SYSTEM: Creating ListMP [HOST_IPC_IN_25] in region 0 ... 53: SYSTEM: ListElem Shared Addr = 0x4077ed80 55: SYSTEM: Creating ListMP [HOST_IPC_OUT_19] in region 0 ... 57: SYSTEM: Creating ListMP [HOST_IPC_IN_19] in region 0 ... 59: SYSTEM: ListElem Shared Addr = 0x407c1100 60: SYSTEM: Creating ListMP [HOST_IPC_OUT_20] in region 0 ... 62: SYSTEM: Creating ListMP [HOST_IPC_IN_20] in region 0 ... 64: SYSTEM: ListElem Shared Addr = 0x40804400 65: SYSTEM: Creating ListMP [HOST_IPC_OUT_21] in region 0 ... 68: SYSTEM: Creating ListMP [HOST_IPC_IN_21] in region 0 ... 69: SYSTEM: ListElem Shared Addr = 0x40847180 88: SYSTEM: System Common Init Done !!! 90: MCFW : CPU Revision [ES1.1] !!! [m3vpss ] 71561: CAPTURE: Create in progress !!! [m3vpss ] 71571: CAPTURE: VIP1 PortA capture mode is [16-bit, Non-mux Discrete Sync - ACTVID_VSYNC] !!! [m3vpss ] CAPTURE:Create args numBufsPerCh[4] < min[6]Overriding create args [m3vpss ] UTILS: DMA: Allocated CH (TCC) = 58 (58) [m3vpss ] UTILS: DMA: 0 of 4: Allocated PaRAM = 58 (0x49004740) [m3vpss ] UTILS: DMA: 1 of 4: Allocated PaRAM = 64 (0x49004800) [m3vpss ] UTILS: DMA: 2 of 4: Allocated PaRAM = 65 (0x49004820) [m3vpss ] UTILS: DMA: 3 of 4: Allocated PaRAM = 66 (0x49004840) [m3vpss ] CAPTURE::HEAPID:0 USED:328 [m3vpss ] CAPTURE::HEAPID:4 USED:24883200 [m3vpss ] 71707: CAPTURE: Create Done !!! [m3vpss ] 71707: DEI : Create in progress !!! [m3vpss ] DEI: Ch 0, Outformat is PROGRESSIVE [m3vpss ] 71711: DEI: OUT0: 0: Format: PROGRESSIVE, 0xb7ee7480, 480 x 270, 2 frames [m3vpss ] DEI: Ch 0, Outformat is PROGRESSIVE [m3vpss ] 71745: DEI: OUT1: 0: Format: PROGRESSIVE, 0xb7f65d80, 1920 x 1080, 2 frames [m3vpss ] DEI: Ch 0, Outformat is PROGRESSIVE [m3vpss ] 71754: DEI: OUT2: 0: Format: PROGRESSIVE, 0xb8554980, 960 x 540, 2 frames [m3vpss ] 71755: DEI : Loading Down-scaling Co-effs [m3vpss ] 71755: DEI : Co-effs Loading ... DONE !!! [m3video] 71768: IPC_IN_M3 : Create in progress !!! [m3video] 71768: SYSTEM: Opening ListMP [VPSS-M3_IPC_OUT_0] ... [m3vpss ] DEI:HEAPID:0 USED:64 [m3video] 71769: SYSTEM: Opening ListMP [VPSS-M3_IPC_IN_0] ... [m3vpss ] DEI:HEAPID:1 USED:4752 [m3video] 71771: IPC_IN_M3 : Create Done !!! [m3vpss ] DEI:HEAPID:4 USED:8294400 [m3video] 71772: ENCODE: Create in progress ... !!! [m3vpss ] 71756: DEI : Create Done !!! [m3vpss ] 71756: NSF: Create in progress !!! [m3vpss ] NSF::HEAPID:0 USED:128 [m3vpss ] NSF::HEAPID:1 USED:4928 [m3vpss ] NSF::HEAPID:4 USED:1244160 [m3vpss ] 71764: NSF: Create Done !!! [m3vpss ] 71765: MERGE: 0: Format: PROGRESSIVE, 1920 x 1080 [m3vpss ] 71766: MERGE: 1: Format: PROGRESSIVE, 960 x 540 [m3vpss ] 71766: MERGE: 2: Format: PROGRESSIVE, 480 x 270 [m3vpss ] 71766: MERGE : Create Done !!! [m3vpss ] 71767: IPC_OUT_M3 : Create in progress !!! [m3vpss ] 71768: IPC_OUT_M3 : Create Done !!! [m3video] 71793: ENCODE: Creating CH0 of 1920 x 1080, pitch = (1920, 1920) [PROGRESSIVE] [NON-TILED ], bitrate = 2000 Kbps, I-P Interval 1... [m3video] ENCLINK_H264:HEAPID:0 USED:11912 [m3video] ENCLINK_H264:HEAPID:3 USED:7176192 [m3video] 71833: ENCODE: Creating CH1 of 960 x 540, pitch = (960, 960) [PROGRESSIVE] [NON-TILED ], bitrate = 2000 Kbps, I-P Interval 1... [host] IpcBitsInLink_tskMain:Entered[HOST] ThreadName:IpcBitsInLink_tskMain_3000001a,ThreadID:592 [host] 388: IPC_BITS_IN : Create in progress !!! [host] 388: IPC_BITS_IN : ListMPOpen start !!! [host] 388: SYSTEM: Opening ListMP [VIDEO-M3_IPC_OUT_24] ... 390: SYSTEM: Opening ListMP [VIDEO-M3_IPC_IN_24] ... [host] 392: IPC_BITS_IN : ListMPOpen done !!! [host] 393: IPC_BITS_IN : System_linkGetInfo done !!! [host] 393: IPC_BITS_IN : Create Done !!! [HOST] ThreadName:IpcBitsInLink_periodicTaskFxn_3000001a,ThreadID:603 [m3vpss ] 71862: CAPTURE: Start in progress !!! [m3video] ENCLINK_H264:HEAPID:0 USED:11912 [m3video] ENCLINK_H264:HEAPID:3 USED:2154496 [m3video] 71846: ENCODE: Creating CH2 of 480 x 270, pitch = (480, 480) [PROGRESSIVE] [NON-TILED ], bitrate = 2000 Kbps, I-P Interval 1... [m3video] ENCLINK_H264:HEAPID:0 USED:11912 [m3video] ENCLINK_H264:HEAPID:3 USED:692224 [m3video] 71851: ENCODE: All CH Create ... DONE !!! [m3video] ENCLINK:HEAPID:0 USED:35776 [m3video] ENCLINK:HEAPID:2 USED:3409920 [m3video] ENCLINK:HEAPID:3 USED:10022912 [m3video] 71852: ENCODE: Create ... DONE !!! [m3video] 71853: IPC_BITS_OUT : Create in progress !!! [m3video] 71855: IPC_BITS_OUT : Create Done !!! [m3vpss ] 71962: CAPTURE: Enabled Time Stamping !!! [m3vpss ] 71966: CAPTURE: Start Done !!! [m3vpss ] CAPTURE : Capture FPS: 0.0 fps ... in 4294895.3 secs MVideo_ipcBitsMain[102] bitsBuf.numBufs=2 MVideo_ipcBitsMain[102] bitsBuf.numBufs=1 [m3vpss ] CAPTURE : Capture FPS: 59.8 fps ... in 10.0 secs 1 Got 1 [m3vpss ] [m3vpss ] *** CAPTURE Statistics *** [m3vpss ] 84214: CAPTURE: Queued to driver = 737, Dequeued from driver = 731 [m3vpss ] CAPTURE [0] Buf Q Status [m3vpss ] Empty Q -> count 0, wrPtr 0, rdPtr 0 [m3vpss ] Full Q -> count 0, wrPtr 347, rdPtr 347 [m3vpss ] [m3vpss ] *** [NSF0] NSF Statistics *** [m3vpss ] 84215: NSF: Rcvd from prev = 366, Returned to prev = 366 [m3vpss ] NSF Out [0] Buf Q Status [m3vpss ] Empty Q -> count 0, wrPtr 0, rdPtr 0 [m3vpss ] Full Q -> count 0, wrPtr 366, rdPtr 366 [m3vpss ] [m3vpss ] *** [DEI2 ] DEI Statistics *** [m3vpss ] 84216: DEI: Rcvd from prev = 731, Returned to prev = 731 [m3vpss ] DEI Out [0] Buf Q Status [m3vpss ] Empty Q -> count 0, wrPtr 0, rdPtr 0 [m3vpss ] Full Q -> count 0, wrPtr 366, rdPtr 366 [m3vpss ] DEI Out [1] Buf Q Status [m3vpss ] Empty Q -> count 0, wrPtr 0, rdPtr 0 [m3vpss ] Full Q -> count 0, wrPtr 183, rdPtr 183 [m3vpss ] DEI Out [2] Buf Q Status [m3vpss ] Empty Q -> count 0, wrPtr 0, rdPtr 0 [m3vpss ] Full Q -> count 0, wrPtr 183, rdPtr 183 [m3vpss ] DEI Out [3] Buf Q Status [m3vpss ] Empty Q -> count 0, wrPtr 0, rdPtr 0 [m3vpss ] Full Q -> count 0, wrPtr 0, rdPtr 0 [m3vpss ] DEI Out [4] Buf Q Status [m3vpss ] Empty Q -> count 0, wrPtr 0, rdPtr 0 [m3vpss ] Full Q -> count 0, wrPtr 0, rdPtr 0 [m3video] [m3video] *** Encode Statistics *** [m3video] 84717: ENC: Rcvd from prev = 3, Returned to prev = 3 [m3video] ENC Out BitBuf Q Status [m3video] Empty Q 0 -> count 2, wrPtr 3, rdPtr 1 [m3video] Empty Q 1 -> count 2, wrPtr 3, rdPtr 1 [m3video] Empty Q 2 -> count 2, wrPtr 3, rdPtr 1 [m3video] Full Q -> count 0, wrPtr 3, rdPtr 3 [m3vpss ] [m3vpss ] *** Capture Driver Advanced Statistics *** [m3vpss ] [m3vpss ] VIP Parser Reset Count : 0 [m3vpss ] [m3vpss ] | Total Even Odd Total Even Odd Min / Max Min / Max Dropped Fid Repeat Frame Error Y/C [m3vpss ] CH | Fields Fields Fields FPS FPS FPS Width Height Fields Count (Desc Error Y/C) [m3vpss ] ------------------------------------------------------------------------------------------------------------ [m3vpss ] 200 | 793 793 0 61 61 0 1920 / 1920 1080 / 1080 1 0 0/0 (0/0) [m3vpss ] [m3vpss ] VIP Capture Port 2 | DescMissMatch1 = 0, DescMissMatch2 = 0 , DescMissMatch3 = 0 [m3vpss ] [m3vpss ] *** Capture List Manager Advanced Statistics *** [m3vpss ] [m3vpss ] List Post Count : 3848 [m3vpss ] List Stall Count : 2 [m3vpss ] List Post Time (ms) : Max = 3136, Min = 0, Avg = 1, Total = 6272 [m3vpss ] INTC Timeout Count : (2, 0) (Min timeout value = 0, 1000) [m3vpss ] Descriptor miss found count : 0 [m3vpss ] [m3vpss ] List Stall Info, [m3vpss ] 0: 9494 ms [m3vpss ] 1: 38413 ms [m3vpss ] [m3vpss ] [m3vpss ] VIP and VPDMA registers, [m3vpss ] VIP0 : FIQ_STATUS : 0x4810551c = 0x00000000 [m3vpss ] VIP1 : FIQ_STATUS : 0x48105a1c = 0x00000000 [m3vpss ] VPDMA: LIST_BUSY : 0x4810d00c = 0x00000000 [m3vpss ] [m3vpss ] [m3vpss ] 85219: CAPTURE: Fields = 792 (fps = 59, CPU Load = 0) [m3vpss ] 85220: CAPTURE: Num Resets = 0 (Avg 0 ms per reset) [m3vpss ] 85220: SYSTEM : FREE SPACE : System Heap = 245352 B, Mbx = 10239 msgs) [m3vpss ] 85220: SYSTEM : FREE SPACE : SR0 Heap = 1526144 B (1 MB) [m3vpss ] 85220: SYSTEM : FREE SPACE : Frame Buffer = 104402816 B (99 MB) [m3vpss ] 85220: SYSTEM : FREE SPACE : Bitstream Buffer = 533460864 B (508 MB) [m3vpss ] 85220: SYSTEM : FREE SPACE : Tiler Buffer = 99 B (0 MB) - TILER OFF [m3vpss ] [m3vpss ] *** [NSF0] NSF Statistics *** [m3vpss ] [m3vpss ] Elasped Time : 13 secs [m3vpss ] Total Fields Processed : 396 [m3vpss ] Total Fields FPS : 1015 FPS [m3vpss ] [m3vpss ] [m3vpss ] CH | In Recv In Reject In Process Out User Out Out [m3vpss ] Num | FPS FPS FPS FPS Skip FPS Skip FPS [m3vpss ] ------------------------------------------------ [m3vpss ] 0 | 30 0 30 30 0 0 [m3vpss ] [m3vpss ] [m3vpss ] *** [DEI2 ] DEI Statistics *** [m3vpss ] [m3vpss ] Elasped Time : 13 secs [m3vpss ] Total Fields Processed : 396 [m3vpss ] Total Fields FPS : 111 FPS [m3vpss ] [m3vpss ] [m3vpss ] CH | In Recv In Reject In Process Out[0] Out[1] Out[2] Out[3] Out[4] Skip Out[0] Skip Out[1] Skip Out[2] Skip Out[3] Skip Out[4] User Out[0] User Out[1] User Out[2] User Out[3] User Out[4] Latency [m3vpss ] Num | FPS FPS FPS FPS FPS FPS FPS FPS FPS FPS FPS FPS FPS Skip FPS Skip FPS Skip FPS Skip FPS Skip FPS Min / Max [m3vpss ] ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [m3vpss ] 0 | 60 30 30 30 15 15 0 0 0 0 0 0 0 0 0 0 0 0 52 / 68 [m3vpss ] [m3video] 91224: HDVICP-ID:0 [m3video] All percentage figures are based off totalElapsedTime [m3video] totalAcquire2wait :0 % [m3video] totalWait2Isr :47 % [m3video] totalIsr2Done :0 % [m3video] totalWait2Done :47 % [m3video] totalDone2Release :0 % [m3video] totalAcquire2Release :47 % [m3video] totalAcq2acqDelay :52 % [m3video] totalElapsedTime in msec : 48 [m3video] numAccessCnt: 3 [m3video] IVA-FPS : 0 [m3video] Average time spent per frame in microsec: 7520 [m3video] 91225: HDVICP-ID:1 [m3video] All percentage figures are based off totalElapsedTime [m3video] totalAcquire2wait :0 % [m3video] totalWait2Isr :0 % [m3video] totalIsr2Done :0 % [m3video] totalWait2Done :0 % [m3video] totalDone2Release :0 % [m3video] totalAcquire2Release :0 % [m3video] totalAcq2acqDelay :0 % [m3video] totalElapsedTime in msec : 0 [m3video] numAccessCnt: 0 [m3video] IVA-FPS : 0 [m3video] Average time spent per frame in microsec: 0 [m3video] 91225: HDVICP-ID:2 [m3video] All percentage figures are based off totalElapsedTime [m3video] totalAcquire2wait :0 % [m3video] totalWait2Isr :0 % [m3video] totalIsr2Done :0 % [m3video] totalWait2Done :0 % [m3video] totalDone2Release :0 % [m3video] totalAcquire2Release :0 % [m3video] totalAcq2acqDelay :0 % [m3video] totalElapsedTime in msec : 0 [m3video] numAccessCnt: 0 [m3video] IVA-FPS : 0 [m3video] Average time spent per frame in microsec: 0 [m3video] [m3video] *** ENCODE Statistics *** [m3video] [m3video] Elasped Time : 19 secs [m3video] [m3video] [m3video] CH | In Recv In Skip In User Out Latency [m3video] Num | FPS FPS Skip FPS FPS Min / Max [m3video] -------------------------------------------- [m3video] 0 | 0 0 0 0 255 / 71625 [m3video] 1 | 0 0 0 0 255 / 0 [m3video] 2 | 0 0 0 0 255 / 0 [m3video] [m3video] Multi Channel Encode Average Submit Batch Size [m3video] Max Submit Batch Size : 24 [m3video] IVAHD_0 Average Batch Size : 1 [m3video] IVAHD_0 Max achieved Batch Size : 1 [m3video] [m3video] Multi Channel Encode Batch break Stats [m3video] Total Number of Batches created: 1 [m3video] All numbers are based off total number of Batches created [m3video] Batch breaks due to batch sizeexceeding limit: 100 % [m3video] Batch breaks due to ReqObj Que being empty: 0 % [m3video] Batch breaks due to changed resolution class: 0 % [m3video] Batch breaks due to interlace and progressivecontent mix: 0 % [m3video] Batch breaks due to channel repeat: 0 % [m3video] Batch breaks due to different codec: 0 % [m3vpss ] CAPTURE : Capture FPS: 60.0 fps ... in 10.0 secs [m3vpss ] [m3vpss ] 94228: LOAD: CPU: 5.6% HWI: 0.8%, SWI:0.9% [m3vpss ] [m3vpss ] 94228: LOAD: TSK: IPC_OUT_M30 : 0.4% [m3vpss ] 94229: LOAD: TSK: CAPTURE : 0.4% [m3vpss ] 94229: LOAD: TSK: NSF0 : 0.4% [m3vpss ] 94229: LOAD: TSK: DEI2 : 1.0% [m3vpss ] 94229: LOAD: TSK: MERGE0 : 0.2% [m3vpss ] 94229: LOAD: TSK: MISC : 1.5% [m3vpss ] [m3video] [m3video] 94730: LOAD: CPU: 3.1% HWI: 0.7%, SWI:0.6% [m3video] [m3video] 94730: LOAD: TSK: IPC_IN_M30 : 0.3% [m3video] 94730: LOAD: TSK: IPC_BITS_OUT0 : 0.2% [m3video] 94730: LOAD: TSK: ENC0 : 0.9% [m3video] 94730: LOAD: TSK: MISC : 0.4% [m3video]