大家好,
我使用DM388开发平台,希望完成以下功能,实现5MP像素图像采集,JPEG编码,1080P LCD图像显示,sensor是IMX172。
我进行了以下尝试:
第一个尝试:在MultiCh_createTriStreamFullFtr()基础上修改
//在502行,出入以下代码
//设置sensor 输出分辨率为5MP
pCameraInstPrm->sensorOutWidth = 2560;
pCameraInstPrm->sensorOutHeight = 1920;
pCameraInstPrm->standard = SYSTEM_STD_5MP_2560_1920;
//在550行,插入以下代码,
//设置第一路输出图像分辨率为5MP
pCameraOutPrm->scOutWidth = 2560;
pCameraOutPrm->scOutHeight = 1920;
第二个尝试,在MultiCh_createStreamCaptureDisplay()中
希望第一路CAMERALINK输出5MP图像,然后放入编码LINK,
第二路CAMERALINK输出1080P图像,放入LCD接口
但是在displaylink初始化阶段就fail了。
也在lowpower的usercase下进行过尝试(full 模式下运行lowpower 的usercase),也没有成功。
我对TI的解决方案不了解,请大家给一些建议,或者一些参考资料,谢谢啦。
Chris Meng:
你好
请问你第二路cameralink输出1080p是如何配置的?display link fail有具体打印什么错误么?
需要实现输出,必须使用full feature,low power 下hdvpss没有打开,没有显示。
Hu Yan:
回复 Chris Meng:
您好,Chris Meng,
非常感谢您的回复!
我是在full模式下启动的, Vsys_create()中启动自定义的usercase。
cameraPrm两路输出
第一路 2560*1920 —>dupLink 1 —>ipcOutVpss —>ipcInVideo —->encLink—>ipcBitsOut —->ipcBitsInHostPrm0
第二路1920*1080—–>dupLink2 —>sclrLinnk (为了以后接低分辨率的屏幕)—->displayLink
系统运行时,启动一个线程,隔一段时间采用ret = GetAVData(AV_OP_GET_MJPEG_SERIAL, -1, &av_data )抓取jpeg图片。
但是抓取到的图片都是1080P的,而不是5MP的。
我怀疑是encLink的初始配置有误,请您指导解决问题的思路或者提供一些参考资料,不胜感激。
encLink的初始配置,我参考的是full模式下的usercase,配置如下
/* Video Encoder Link params */ MULTICH_INIT_STRUCT(EncLink_CreateParams, encPrm); { EncLink_ChCreateParams *pLinkChPrm; EncLink_ChDynamicParams *pLinkDynPrm; VENC_CHN_DYNAMIC_PARAM_S *pDynPrm; VENC_CHN_PARAMS_S *pChPrm; for (i = 0; i < VENC_PRIMARY_CHANNELS; i++) { pLinkChPrm = &encPrm.chCreateParams[i]; pLinkDynPrm = &pLinkChPrm->defaultDynamicParams; pChPrm = &gVencModuleContext.vencConfig.encChannelParams[i]; pDynPrm = &pChPrm->dynamicParam; printf("YanHu:codec_combo == %d\n",gUI_mcfw_config.demoCfg.codec_combo); switch(gUI_mcfw_config.demoCfg.codec_combo) { case 0: pLinkChPrm->format = IVIDEO_H264HP; break; //"SINGLE_H264" case 1: pLinkChPrm->format = IVIDEO_MPEG4SP; break; //"SINGLE_MPEG4" case 2: pLinkChPrm->format = IVIDEO_MJPEG; break; //"SINGLE_JPEG" case 3: pLinkChPrm->format = (i==0)? IVIDEO_H264HP:IVIDEO_MJPEG; break; //"H264_JPEG" case 4: pLinkChPrm->format = (i==0)? IVIDEO_MPEG4SP:IVIDEO_MJPEG; break; //"MPEG4_JPEG" case 5: pLinkChPrm->format = (i==0)? IVIDEO_H264HP:IVIDEO_H264HP; break; //"DUAL_H264" case 6: pLinkChPrm->format = (i==0)? IVIDEO_MPEG4SP:IVIDEO_MPEG4SP; break; //"DUAL_MPEG4" case 7: pLinkChPrm->format = (i==0)? IVIDEO_H264HP:IVIDEO_MPEG4SP; break; //"H264_MPEG4" case 8: pLinkChPrm->format = (i==0)? IVIDEO_H264HP:IVIDEO_H264HP; break; //"TRIPLE_H264" case 9: pLinkChPrm->format = (i==0)? IVIDEO_MPEG4SP:IVIDEO_MPEG4SP; break; //"TRIPLE_MPEG4" default: pLinkChPrm->format = IVIDEO_H264HP; } pLinkChPrm->profile = gVencModuleContext.vencConfig.h264Profile[i]; pLinkChPrm->dataLayout = IVIDEO_PROGRESSIVE; pLinkChPrm->fieldMergeEncodeEnable = FALSE; pLinkChPrm->enableAnalyticinfo = pChPrm->enableAnalyticinfo; pLinkChPrm->maxBitRate = pChPrm->maxBitRate; pLinkChPrm->encodingPreset = pChPrm->encodingPreset; pLinkChPrm->rateControlPreset = IVIDEO_USER_DEFINED; //pChPrm->rcType; pLinkChPrm->enableHighSpeed = FALSE; pLinkChPrm->enableWaterMarking = pChPrm->enableWaterMarking; pLinkChPrm->StreamPreset = gUI_mcfw_config.StreamPreset[i]; 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; encPrm.numBufPerCh[i] = 4; gVencModuleContext.encFormat[i] = pLinkChPrm->format; } } encPrm.chCreateParams[0].defaultDynamicParams.inputFrameRate = 30; encPrm.vsEnable = gUI_mcfw_config.vsEnable; encPrm.isVaUseCase = 0; // for (i = VENC_PRIMARY_CHANNELS; i < (VENC_CHN_MAX – 1); i++)
for (i =0; i < (VENC_CHN_MAX – 1); i++)
强制设置三个编码通道都为JPEG编码 { encPrm.chCreateParams[i].format = IVIDEO_MJPEG; encPrm.chCreateParams[i].profile = 0; encPrm.chCreateParams[i].dataLayout = IVIDEO_PROGRESSIVE; encPrm.chCreateParams[i].fieldMergeEncodeEnable = FALSE; encPrm.chCreateParams[i].defaultDynamicParams.intraFrameInterval = 0; encPrm.chCreateParams[i].encodingPreset = 0; encPrm.chCreateParams[i].enableAnalyticinfo = 0; encPrm.chCreateParams[i].enableWaterMarking = 0; encPrm.chCreateParams[i].defaultDynamicParams.inputFrameRate = 30; encPrm.chCreateParams[i].rateControlPreset = 0; encPrm.chCreateParams[i].defaultDynamicParams.targetBitRate = 100 * 1000; encPrm.chCreateParams[i].defaultDynamicParams.interFrameInterval = 0; encPrm.chCreateParams[i].defaultDynamicParams.mvAccuracy = 0; gVencModuleContext.encFormat[i] = encPrm.chCreateParams[i].format; } encPrm.inQueParams.prevLinkId = ipcInVideoId; encPrm.inQueParams.prevLinkQueId = 0; encPrm.outQueParams.nextLink = gVencModuleContext.ipcBitsOutRTOSId;