各位专家,小弟刚接触DM8168不久,对RDK平台的代码不太熟悉,有个问题请教一下,如果我在前端接入24位RGB信号,外部行场同步,我想直接从capture进,什么都不作,直接就通过display0显示,我参考multich_vcap_vdis.c这个demo来修改,但是试了很久都不行,所以我想问一下我的link应该怎么配置,哪些link是必须的?
我目前的配置是captureID->nsf0ID->dei0ID->mergeID->dupID->swMsId[0]->display0ID.这个有问题吗??
期待您们的回复,谢谢!
Haijun Guo:
数据通路你可以仍然使用vcap_vdis.c中的配置。
关键点在于,你需要配置capture link,使之接收RGB格式输入,输出YUV格式,因为capture后续link都是处理YUV数据的。
关于capture link的配置,请参阅HDVPSS_UserGuide.pdf
sheng xie:
回复 Haijun Guo:
非常感谢你的回答,关于你说的那个文档,我在RDK里面找了一下,没有发现,能否提供一份,万分感谢!
还有能否帮我看一下capture link的配置是否正确,下面是我的配置代码
CaptureLink_CreateParams_Init(&capturePrm);
capturePrm.numVipInst = 1;///2 * numSubChains; capturePrm.outQueParams[0].nextLink = gVcapModuleContext.nsfId[0];
capturePrm.tilerEnable = FALSE; capturePrm.enableSdCrop = FALSE;
for(vipInstId=0; vipInstId<capturePrm.numVipInst; vipInstId++) { pCaptureInstPrm = &capturePrm.vipInst[vipInstId]; pCaptureInstPrm->vipInstId = (SYSTEM_CAPTURE_INST_VIP0_PORTA+vipInstId)%SYSTEM_CAPTURE_INST_MAX; pCaptureInstPrm->videoDecoderId = 0;//; pCaptureInstPrm->inDataFormat =SYSTEM_DF_RGB24_888;//; pCaptureInstPrm->standard = SYSTEM_STD_1080P_60;//;//; 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; }//
最后一个问题,就是在做link的时候,一个数据流比如由capture到encode到display 到底需要经过哪几个link,像dup,select,megre这些是必要的link吗,有没有对link
介绍比较详细的文档? 谢谢!
Haijun Guo:
回复 sheng xie:
文档在:RDKxxxxxxx\ti_tools\hdvpss\dvr_rdk_hdvpss\docs\HDVPSS_UserGuide.pdf
你使用这个配置遇到的问题是什么?数据通路创建不成功?还是创建成功了,但是没有显示?
最好能提供一份完整的log。
有一点要注意的是,demo默认输入是隔行格式interlace,从你的代码看,输入是逐行,这时DEI模块可能会存在问题,因为它是要做de-interlace的。
link之间的搭建是有灵活性的,dup、select、merge都是根据需求来使用的,并不是必须的。
link的介绍,目前还是看各个link的头文件注释来学习。
sheng xie:
回复 Haijun Guo:
非常感谢您的回答!我的确实是逐行输入,并且前端是1161,直接硬件拉死了,不需要配置,直接出RGB24位数据.并且我将DEI配置为不做de-interlace.如下:
deiPrm[i].inQueParams.prevLinkId = gVcapModuleContext.nsfId[0]; deiPrm[i].inQueParams.prevLinkQueId = 0; deiPrm[i].outQueParams[deiOutQue].nextLink = mergeId; //deiPrm[i].outQueParams[deiOutQue^1].nextLink = nullId; deiPrm[i].enableOut[deiOutQue] = TRUE; //deiPrm[i].enableOut[deiOutQue^1] = FALSE; deiPrm[i].tilerEnable[DEI_LINK_OUT_QUE_VIP_SC] = FALSE;
deiPrm[i].comprEnable = FALSE; deiPrm[i].setVipScYuv422Format = FALSE;//FALSE; deiPrm[i].enableDeiForceBypass = TRUE;
完整log见附件,期待您的回复,谢谢!
sheng xie:
回复 sheng xie:
另外,创建的时候没有错误,就是没有显示!
sheng xie:
回复 Haijun Guo:
非常感谢你的回复,现在已经能出图像了,但是图像闪来闪去,这个估计可能是我link 中间某个设置不对吧,估计还得排查一下,另外我还想问一下,我能不能不经过nsf和dei这两个link,然后merge和dup我也不想使用,能去掉吗>?我试了一下,貌似在创建display的时候会抱错!
Haijun Guo:
回复 sheng xie:
可以不经过nsf和dei的,merge和dup也是根据你的需求可选的。
创建display的时候报错,应该是有些配置还不对,你可以先尝试一个HDMI display,把问题简化。
sheng xie:
回复 Haijun Guo:
还得请你帮下忙,还出不来图像,开始闪烁的图像都没有了,目前我的配置是capture->megre->dup->sw->display0,整个路径创建没有错误.我在capture的Vpass 的代码里加入了打印,显示确实有数据,见附件最后的[m3vpss ] receive capture data,所以不知道数据为什么没显示? 谢谢
Haijun Guo:
回复 sheng xie:
log上看不出,你可以试着去掉merge 和dup。