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.

DM8168 24bit(RGB24_888)采集编码问题

大家好,

        我现在用的hdmi接口芯片与DM8168采用的是 24bit(RGB24_888)连接方式,当我chains为capture->display时可以正确显示,具体参数如下:  

vipInstId = SYSTEM_CAPTURE_INST_VIP0_PORTA + 2 * gChains_ctrl.chCfg[i].channel;
pCaptureInstPrm = &capturePrm.vipInst[i];
pCaptureInstPrm->videoIfMode = SYSTEM_CAPT_VIDEO_IF_MODE_24BIT; //SYSTEM_CAPT_VIDEO_IF_MODE_16BIT;
pCaptureInstPrm->videoCaptureMode = SYSTEM_CAPT_VIDEO_CAPTURE_MODE_SINGLE_CH_NON_MUX_DISCRETE_SYNC_ACTVID_VSYNC;

prm.channelParams[i].deviceId = vipInstId;

prm.enableConfigExtVideoDecoder = TRUE;
prm.deviceParams[vipInstId].standard = chainsCfg->chCfg[i].inStd;

pCaptureInstPrm->vipInstId = vipInstId%SYSTEM_CAPTURE_INST_MAX;
pCaptureInstPrm->inScanFormat = SYSTEM_SF_PROGRESSIVE;
pCaptureInstPrm->inDataFormat = SYSTEM_DF_RGB24_888;//SYSTEM_DF_YUV422P;
pCaptureInstPrm->standard = chainsCfg->chCfg[i].inStd;
pCaptureInstPrm->numOutput = 1;
pCaptureInstPrm->numChPerOutput = 1;

pCaptureOutPrm = &pCaptureInstPrm->outParams[0];
pCaptureOutPrm->dataFormat = SYSTEM_DF_YUV422I_YUYV;
pCaptureOutPrm->scEnable = FALSE;
pCaptureOutPrm->outQueId = i;

capturePrm.outQueParams[i].nextLink = displayId[i];

        当我加入encode模块后,程序能正确运行起来,我保存的264文件里面只有1帧数据,而且程序很快就会崩溃,大家给帮忙看看,问题是在哪?谢谢拉

具体的参数设置如下:

capturePrm.numVipInst = 1;
capturePrm.tilerEnable = FALSE;
capturePrm.numBufsPerCh = 16;
capturePrm.numExtraBufs = 0;
capturePrm.maxBlindAreasPerCh = 0;
capturePrm.isPalMode = FALSE;
capturePrm.enableSdCrop = FALSE;
capturePrm.doCropInCapture = FALSE;
for(i = 0; i < capturePrm.numVipInst; i++)
{
vipInstId = SYSTEM_CAPTURE_INST_VIP0_PORTA + 2 * gChains_ctrl.chCfg[i].channel;
printf("************vipInstId = %d***********\n", vipInstId);
pCaptureInstPrm = &capturePrm.vipInst[i];
pCaptureInstPrm->videoIfMode = SYSTEM_CAPT_VIDEO_IF_MODE_24BIT; //SYSTEM_CAPT_VIDEO_IF_MODE_16BIT;
pCaptureInstPrm->videoCaptureMode = SYSTEM_CAPT_VIDEO_CAPTURE_MODE_SINGLE_CH_NON_MUX_DISCRETE_SYNC_ACTVID_VSYNC;

prm.channelParams[i].deviceId = vipInstId;
prm.enableConfigExtVideoDecoder = TRUE;
prm.deviceParams[vipInstId].standard = chainsCfg->chCfg[i].inStd;

pCaptureInstPrm->vipInstId = vipInstId%SYSTEM_CAPTURE_INST_MAX;
pCaptureInstPrm->inScanFormat = SYSTEM_SF_PROGRESSIVE;
pCaptureInstPrm->inDataFormat = SYSTEM_DF_RGB24_888;//SYSTEM_DF_YUV422P;
pCaptureInstPrm->standard = chainsCfg->chCfg[i].inStd;
pCaptureInstPrm->numOutput = 1;
pCaptureInstPrm->numChPerOutput = 1;


pCaptureOutPrm = &pCaptureInstPrm->outParams[0];
pCaptureOutPrm->dataFormat = SYSTEM_DF_YUV422I_YUYV;//SYSTEM_DF_YUV420SP_UV;
pCaptureOutPrm->scEnable = FALSE;
pCaptureOutPrm->outQueId = 0;
}

capturePrm.outQueParams[0].nextLink = nsfId;//ipcOutVpssId;

System_linkCreate(captureId, &capturePrm, sizeof(capturePrm));

NsfLink_CreateParams_Init(&nsfPrm);
nsfPrm.bypassNsf = FALSE;
nsfPrm.tilerEnable = FALSE;
nsfPrm.inQueParams.prevLinkId = captureId;
nsfPrm.inQueParams.prevLinkQueId = 0;
nsfPrm.numOutQue = 1;
nsfPrm.outQueParams[0].nextLink = ipcOutVpssId;


ipcOutVpssPrm.inQueParams.prevLinkId = nsfId;//captureId;
ipcOutVpssPrm.inQueParams.prevLinkQueId = 0;
ipcOutVpssPrm.numOutQue = 1;
ipcOutVpssPrm.numChPerOutQue[0] = 1;
ipcOutVpssPrm.outQueParams[0].nextLink = ipcInVideoId;
ipcOutVpssPrm.notifyNextLink = TRUE;
ipcOutVpssPrm.notifyPrevLink = FALSE;
ipcOutVpssPrm.noNotifyMode = FALSE;
ipcOutVpssPrm.numChPerOutQue[0] = 0;
ipcOutVpssPrm.equallyDivideChAcrossOutQues = FALSE;

ipcInVideoPrm.inQueParams.prevLinkId = ipcOutVpssId;
ipcInVideoPrm.inQueParams.prevLinkQueId = 0;
ipcInVideoPrm.numOutQue = 1;
ipcInVideoPrm.numChPerOutQue[0] = 1;
ipcInVideoPrm.outQueParams[0].nextLink = encId;
ipcInVideoPrm.notifyNextLink = TRUE;
ipcInVideoPrm.notifyPrevLink = FALSE;
ipcInVideoPrm.noNotifyMode = FALSE;
ipcInVideoPrm.numChPerOutQue[0] = 0;
ipcInVideoPrm.equallyDivideChAcrossOutQues = FALSE;

for (i=0; i<1; i++) {
encPrm.chCreateParams[i].format = chainsCfg->chCfg[i].encFormat;
encPrm.chCreateParams[i].profile = chainsCfg->chCfg[i].encProfile;
encPrm.chCreateParams[i].dataLayout = IVIDEO_FIELD_SEPARATED;
encPrm.chCreateParams[i].fieldMergeEncodeEnable = FALSE;
encPrm.chCreateParams[i].enableAnalyticinfo = FALSE;
encPrm.chCreateParams[i].enableWaterMarking = FALSE;
encPrm.chCreateParams[i].encodingPreset = XDM_USER_DEFINED;
encPrm.chCreateParams[i].rateControlPreset = IVIDEO_USER_DEFINED;
encPrm.chCreateParams[i].enableHighSpeed = FALSE;
encPrm.chCreateParams[i].defaultDynamicParams.interFrameInterval = 1;
encPrm.chCreateParams[i].defaultDynamicParams.intraFrameInterval = chainsCfg->chCfg[i].intraFrameInterval;
encPrm.chCreateParams[i].defaultDynamicParams.inputFrameRate = chainsCfg->chCfg[i].inFrameRate;
encPrm.chCreateParams[i].defaultDynamicParams.targetFrameRate = chainsCfg->chCfg[i].encFrameRate;
encPrm.chCreateParams[i].defaultDynamicParams.targetBitRate = chainsCfg->chCfg[i].bitRate;
encPrm.chCreateParams[i].defaultDynamicParams.mvAccuracy = IVIDENC2_MOTIONVECTOR_QUARTERPEL;
encPrm.chCreateParams[i].defaultDynamicParams.rcAlg = chainsCfg->chCfg[i].rateCtrl;
encPrm.chCreateParams[i].defaultDynamicParams.qpMin = 0;
encPrm.chCreateParams[i].defaultDynamicParams.qpMax = 51;
encPrm.chCreateParams[i].defaultDynamicParams.qpInit = -1;
encPrm.chCreateParams[i].defaultDynamicParams.vbrDuration = 8;
encPrm.chCreateParams[i].defaultDynamicParams.vbrSensitivity = 0;
}
encPrm.inQueParams.prevLinkId = ipcInVideoId;
encPrm.inQueParams.prevLinkQueId= 0;
encPrm.outQueParams.nextLink = ipcBitsOutVideoId;
encPrm.numBufPerCh[0] = 0;

ipcBitsOutVideoPrm.baseCreateParams.inQueParams.prevLinkId = encId;
ipcBitsOutVideoPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
ipcBitsOutVideoPrm.baseCreateParams.numOutQue = 1;
ipcBitsOutVideoPrm.baseCreateParams.numChPerOutQue[0] = 1;
ipcBitsOutVideoPrm.baseCreateParams.outQueParams[0].nextLink = ipcBitsInHostId;
ipcBitsOutVideoPrm.baseCreateParams.notifyNextLink = FALSE;
ipcBitsOutVideoPrm.baseCreateParams.notifyPrevLink = FALSE;
ipcBitsOutVideoPrm.baseCreateParams.noNotifyMode = TRUE;
Chains_ipcBitsInitCreateParams_BitsOutRTOS(&ipcBitsOutVideoPrm,FALSE);

ipcBitsInHostPrm.baseCreateParams.inQueParams.prevLinkId = ipcBitsOutVideoId;
ipcBitsInHostPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
ipcBitsInHostPrm.baseCreateParams.numOutQue = 1;
ipcBitsInHostPrm.baseCreateParams.numChPerOutQue[0] = 1;
ipcBitsInHostPrm.baseCreateParams.notifyNextLink = FALSE;
ipcBitsInHostPrm.baseCreateParams.notifyPrevLink = FALSE;
ipcBitsInHostPrm.baseCreateParams.noNotifyMode = TRUE;
Chains_ipcBitsInitCreateParams_BitsInHLOS(&ipcBitsInHostPrm);

  程序崩溃后错误为:

[m3video] Unhandled Exception:
[m3video] Exception occurred in ThreadType_SWI
[m3video] handle: 0x91902078.
[m3video] stack base: 0x32681880.
[m3video] stack size: 0x4000.
[m3video] R0 = 0x0000c0c0 R8 = 0x9180dcf8
[m3video] R1 = 0x0000c1be R9 = 0x9180dcf0
[m3video] R2 = 0x9184c0be R10 = 0x9180dcf4
[m3video] R3 = 0x00000001 R11 = 0x9180df68
[m3video] R4 = 0x91902078 R12 = 0x9180d884
[m3video] R5 = 0x9180d88c SP(R13) = 0x326857a8
[m3video] R6 = 0x91901afc LR(R14) = 0x9183ea27
[m3video] R7 = 0x00000000 PC(R15) = 0x9184c0be
[m3video] PSR = 0x60000000
[m3video] ICSR = 0x00400803
[m3video] MMFSR = 0x00
[m3video] BFSR = 0x00
[m3video] UFSR = 0x0002
[m3video] HFSR = 0x40000000
[m3video] DFSR = 0x00000000
[m3video] MMAR = 0xe000ed34
[m3video] BFAR = 0xe000ed38
[m3video] AFSR = 0x00000000
[m3video] Terminating Execution...