大家好,最近在做一些dm8168的视频采集驱动,
自己的设计板子,不是开发板的解码器,在需要配置VPORT的涉及很多HDVPSS的东西,
感觉很复杂,知道怎么用的进来聊几句啊!
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.
Haijun
你好:
关于hdvpss,有很多疑问,最近比较想了解的有
1)hdvpss貌似提供了一些接口API用来配置DM816x的寄存器,
但是又把各种板卡类型至于其中,甚至连视频解码芯片驱动都放在里边了,
感觉限制非常大,用户要怎么根据自己的板卡使用这些东西,如果是增加新的芯片驱动,
会涉及很多更改,遇到这种情况,用户该怎么开放呢?
2)hdvpss 编译出来的文件到底是什么东西,怎么在应用程序中怎么使用呢?
应为在Makefile没有看到,或许有,但是没有找到,makefile里确实有编译hdvpss的,但是应为不清楚
软件架构,不明白编译hdvpss有什么用?
3)看了下dvr_rdk\mcfw\src_bios6\links_m3vpss代码,好像也是使用hdvpss 接口(FVID2_)
是不是说这部分就是在hdvpss运行的驱动呢?
用户如果对Vport配置需要修改,只需要修改这部分代码,而无需去更改
ti_tools\hdvpss\hdvpss_01_00_01_37_patched\packages下的代码呢?
4)关于dvr_rdk\mcfw\src_bios6\links_m3vpss编译后出来的是什么文件呢,
最后也是通过fw_load.out加载么?
5)dvr_rdk_fw_m3vpss.xem3 是怎么生成的呢,里面大体实现了一些什么功能?
6)基于hdvpss 接口(FVID2_)编写的代码怎么调试呢?
best regards
xavier
关于问题1,Dong Feng已经解释了,下面是我对其他问题的理解:
2)hdvpss 编译出来的文件到底是什么东西,怎么在应用程序中怎么使用呢?
应为在Makefile没有看到,或许有,但是没有找到,makefile里确实有编译hdvpss的,但是应为不清楚
软件架构,不明白编译hdvpss有什么用?
[Haijun Guo] HDVPSS是视频处理子系统(Video Process Sub-System),针对芯片中集成的VPSS硬件协处理器,编译出来的是VPSS的驱动库,供RDK层调用其接口以实现视频数据在VPSS协处理器中的处理,比如采集、缩放
、显示。所以可以理解为RDK和硬件协处理器之间的驱动层。
3)看了下dvr_rdk\mcfw\src_bios6\links_m3vpss代码,好像也是使用hdvpss 接口(FVID2_)
是不是说这部分就是在hdvpss运行的驱动呢?
[Haijun Guo] 可以这么理解,调用了FVID2接口的部分就是在HDVPSS运行的。
用户如果对Vport配置需要修改,只需要修改这部分代码,而无需去更改
ti_tools\hdvpss\hdvpss_01_00_01_37_patched\packages下的代码呢?
[Haijun Guo] 不建议客户自己修改hdvpss目录下的任何文件,可以向TI技术支持提出你们具体的需求,大部分应该可以通过RDK配置实现。如果是HDVPSS驱动中还不支持的功能,TI会在后续版本中添加。
4)关于dvr_rdk\mcfw\src_bios6\links_m3vpss编译后出来的是什么文件呢,
最后也是通过fw_load.out加载么?
[Haijun Guo] 编译出来的是在HDVPSS媒体控制器(m3)中运行的firmware,是通过fw_load.out加载的,可以看load.sh脚本获得更详细信息。
5)dvr_rdk_fw_m3vpss.xem3 是怎么生成的呢,里面大体实现了一些什么功能?
[Haijun Guo] 里面主要包含了RDK中vpss link 层的代码以及HDVPSS驱动,在RDK中可以看到在links_m3vpss目录下的功能都是在这里实现的。
6)基于hdvpss 接口(FVID2_)编写的代码怎么调试呢?
[Haijun Guo] Rules.make里面把dvr_rdk_fw_m3vpss.xem3编译成debug模式,通过仿真器可以调试。
haijun:你好
我想用ADV7181采集视频(输入XGA 60Hz 1024x768,输出YUV422P,离散同步,8bit输入),
在CapLink_drv.c 里我改了 CaptureLink_drvCreateInst function,
.....
if (pInstPrm->videoDecoderId == FVID2_VPS_VID_DEC_TVP5158_DRV)
{
.......
}
else if(pInstPrm->videoDecoderId == FVID2_VPS_VID_DEC_ADV7181_DRV)
{
inScanFormat = FVID2_SF_PROGRESSIVE;
pInst->maxWidth = 1024;
pInst->maxHeight = 768;
inWidth = pInst->maxWidth;
inHeight = pInst->maxHeight;
pVipCreateArgs->videoCaptureMode =
VPS_CAPT_VIDEO_CAPTURE_MODE_SINGLE_CH_NON_MUX_DISCRETE_SYNC_ACTVID_VSYNC;
pVipCreateArgs->videoIfMode = VPS_CAPT_VIDEO_IF_MODE_8BIT;
pVipCreateArgs->numCh = 1;
}
但是最后好像除了r,g,b 颜色正确,其他都不对
我仔细看了下 Multich_vcap_vdis.c,下对ADV7181的配置
//adv 7181
vipInstId = 0;
pCaptureInstPrm = &capturePrm.vipInst[vipInstId];
pCaptureInstPrm->vipInstId = SYSTEM_CAPTURE_INST_VIP0_PORTA;
//pCaptureInstPrm->vipInstId = SYSTEM_CAPTURE_INST_VIP1_PORTA;
pCaptureInstPrm->videoDecoderId = SYSTEM_DEVICE_VID_DEC_ADV7181_DRV;
pCaptureInstPrm->inDataFormat = SYSTEM_DF_YUV422P;
pCaptureInstPrm->standard = SYSTEM_STD_XGA_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;
Vcap_configVideoDecoder(vidDecVideoModeArgs, 1);
貌似 pCaptureOutPrm->dataFormat = SYSTEM_DF_YUV422I_YUYV;不是很合适啊
但是改成其他任何的都会导致CaptureLink_drvCreateInst函数
pInst->captureVipHandle = FVID2_create(FVID2_VPS_CAPT_VIP_DRV,
pInst->instId,
pVipCreateArgs,
&pInst->createStatus, &pInst->cbPrm);
返回NULL,那该怎么配置呢?
best regards
xavier
在HDVPSS_UserGuide.pdf中的UserGuideHdvpssCaptureDriver章节中,有张表格列出了VIP采集口所支持的输入输出格式,请参考文档,确认自己配置的格式是驱动支持的。