大家好,最近在做一些dm8168的视频采集驱动,
自己的设计板子,不是开发板的解码器,在需要配置VPORT的涉及很多HDVPSS的东西,
感觉很复杂,知道怎么用的进来聊几句啊!
Haijun Guo:
最好有一些具体的问题。不怕多,一个一个解决。
xavier:
回复 Haijun Guo:
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
Feng Dong:
回复 xavier:
关于问题1这里有历史的原因在里面,最早的时候AD的驱动都是在M3上执行的就是你现在在hdvpss驱动中看到的AD的驱动,这样架构的问题就是修改需要了解M3的代码,对于大家来说难度增加了.为了解决这个问题DVR RDK后续将AD的驱动移到A8,这样就可以不需要了解M3就可以进行开发了,对于capturelink可以直接定义相应的格式,保证与AD接口对等即可.
xavier:
回复 Feng Dong:
能不能介绍下hdvpss编译方便的东西,看不太懂,
到底生成了写什么东西,怎么放入firm文件中的使用的?
Haijun Guo:
回复 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模式,通过仿真器可以调试。
xavier:
回复 Haijun Guo:
haijun:你好
我想用ADV7181采集视频(输入XGA 60Hz 1024×768,输出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
Haijun Guo:
回复 xavier:
在HDVPSS_UserGuide.pdf中的UserGuideHdvpssCaptureDriver章节中,有张表格列出了VIP采集口所支持的输入输出格式,请参考文档,确认自己配置的格式是驱动支持的。
xavier:
回复 Haijun Guo:
我对着文档看过,选了几种支持的都不行!
Haijun Guo:
回复 xavier:
首先要确定video decoder的配置是正确的,还有硬件连接。
Xiao Feng Huang:
回复 xavier:
FVID2的全称是什么
TI中文支持网
