各位专家好,
我们用DM385实现如下框图的功能:
通过FPGA从3路视频中选择2路,(如果是TVP5146,就填充到BT.1120)分别输出到DM385的VP0,VP1。
我们有几个疑问想咨询下:
我们软件版本是IPNC3.5,用了ipnc_mcfw/demos/mcfw_api_demose/multich_use
1.现有的demo构架默认是按ISS接口接入camera的做法,如果要改成HDVPSS接口,如何进行配置呢?
2.现有的MCFW构架能否实现我们的功能呢?
3.如果现有的MCFW构架不能实现,只能用Link api提供的接口api,那么Link api里面是否实现了1024*768和720*576的视频输入呢?
非常感谢!
Chris Meng:
你好,
DM385有一个camera接口,两个VIP口,可以直接三路信号,为什们还需要FPGA呢?
使用VIP口,请参考capture link。但IPNC RDK里面没有使用capture link的例子。
jin li3:
回复 Chris Meng:
您好,
如果我们修改成capture link,有可参考的代码或文档吗?
我们看到在system_m3vpss.c里面有vps platform的初始化部分,从log看tvp7002的驱动挂载不成功,用的是I2C0,在A8里面是可以的。
能给些意见或建议吗?现阶段很困惑。非常感谢!
Ternence_Hsu:
回复 jin li3:
1、关于capture link 的参考
在ipnc rdk 中已经给 capture link中实现的接口都是可以用的,具体需要根据你的采集来进行配置;
link的设计,如果你有dvrrdk的源码是最好了,可以直接参考设计,如果没有,可以在 ipnc_3.8/Source/ti_tools/hdvpss_01_00_01_37/packages/ti/psp/examples/common/vps/chains/src中,参考下面的usecase的配置,和其他link的配置模式基本类似的;
2、你的tvp7002不是接入fpga了吗,你是把i2c的驱动接口给了达芬奇板子吗?
jin li3:
回复 Ternence_Hsu:
您好,
我们再看看能不能找到IPNC3.8的版本,在目前3.5版本中,我们做了如下尝试,试图将camera link修改成captute link。
1.在现有的demo:ti_mcfw_ipnc_main.c中,Vcam的地方修改成Vcap,主要是初始化,start,stop几个函数。
2.修改ti_vcap.c文件,按照我们的配置进行初始化参数修改。
在这个过程中发现ti_vcap.c是按照tvp5158做的,我们准备修改成tvp7002,tvp5146,adv7611。
在ipnc_mcfw/mcfw/src_linux/devices/ 下面有tvp5158的驱动,这里有几个疑问,发现这种采集芯片的驱动在3处地方存在:
1.我们应该需要按照类似的方法在ipnc_mcfw/mcfw/src_linux/devices/ 实现tvp7002,tvp5146,adv7611的驱动吧?
2.在linux内核里面已经实现了tvp7002,tvp5146,adv7611驱动,也能跑起来,FPGA可以采集到视频信号。
3.在hdvpss_01_00_01_37/packages/ti/psp/devices/ 目录下也有tvp5158等视频采集芯片的驱动。
很迷惑这3个地方驱动的关系,为什么要重复实现?
我们的tvp7002,tvp5146,adv7611的I2C接口接在达芬奇板子上了,用的I2C0。M3-VPSS和A8的I2C是对应的吗,如果A8上我们用I2C0,M3-VPSS也是I2C0吗?
非常感谢不厌其烦的为我们解答疑惑,非常感谢!
Ternence_Hsu:
回复 jin li3:
1、这个三个地方的驱动都实现了,你可以选择一个就可以,像ezsdk是通过内核来加载驱动,在DVRRDK中,可以通过A8来加载驱动,也可以通过M3来加载驱动;
针对你自己的平台,自己选择,方便实现对外围信息的控制就可以;
2、I2C0是在M3上还是在M3-VPSS上,可以自己配置的;
jin li3:
回复 Ternence_Hsu:
您好,
经过这几天的摸索,修改了一个capturelink的usecase,在之前的demo里面修改成了capture link方式,发现获取不到视频数据,但是FPGA确实有数据输入。发现
ipnc_mcfw\mcfw\src_bios6\links_m3vpss\capture\captureLink_drv.c里面的函数:
Int32 CaptureLink_drvPrintRtStatus(CaptureLink_Obj * pObj, UInt32 frameCount, UInt32 elaspedTime)
{ UInt32 fps = (frameCount * 100) / (elaspedTime / 10);
Vps_rprintf (" %d: CAPTURE: Fields = %d (fps = %d), Total Resets = %d (Avg %d ms per reset)\r\n", Utils_getCurTimeInMsec(), frameCount, fps, pObj->resetCount, pObj->resetTotalTime / pObj->resetCount);
return 0;}
打印log如下:
[m3vpss ] 21699: CAPTURE: Fields = 0 (fps = 0), Total Resets = 0 (Avg 0 ms per reset)
我们的usecase暂时只配置了VP0,我们的原理是TVP7002输出数据经过FPGA到VP0,流程如下:
CAPUTER(VPSSM3)—->FRAMES OUT(VPSSM3)—->FRAMES IN(VIDEOM3)—->ENC(VIDEOM3)—->BITS OUT(VIDEOM3)—->BITS IN(A8)
具体代码请看附件singlech_encode.c。
现在不知道问题出在哪里,麻烦帮忙看看,万分感谢!
Ternence_Hsu:
回复 jin li3:
你的FPGA输出给dm8168的视频信号是内同步输出还是离散同步输出的,这个你有在
ipnc_mcfw\mcfw\src_bios6\links_m3vpss\capture\captureLink_drv.c
中进行配置吗?
Ternence_Hsu:
回复 jin li3:
你的FPGA输出给dm8168的视频信号是内同步输出还是离散同步输出的,这个你有在
ipnc_mcfw\mcfw\src_bios6\links_m3vpss\capture\captureLink_drv.c
中进行配置吗?
Ternence_Hsu:
回复 Ternence_Hsu:
可以参考:
/*** \brief Video capture operation mode */ typedef enum {VPS_CAPT_VIDEO_CAPTURE_MODE_SINGLE_CH_NON_MUX_EMBEDDED_SYNC = 0,/**< Single Channel non multiplexed mode */VPS_CAPT_VIDEO_CAPTURE_MODE_MULTI_CH_LINE_MUX_EMBEDDED_SYNC,/**< Multi-channel line-multiplexed mode */VPS_CAPT_VIDEO_CAPTURE_MODE_MULTI_CH_PIXEL_MUX_EMBEDDED_SYNC,/**< Multi-channel pixel muxed */VPS_CAPT_VIDEO_CAPTURE_MODE_SINGLE_CH_NON_MUX_DISCRETE_SYNC_HSYNC_VBLK,/**< Single Channel non multiplexed discrete sync mode with HSYNC andVBLK as control signals. */VPS_CAPT_VIDEO_CAPTURE_MODE_SINGLE_CH_NON_MUX_DISCRETE_SYNC_HSYNC_VSYNC,/**< Single Channel non multiplexed discrete sync mode with HSYNC andVSYNC as control signals. */VPS_CAPT_VIDEO_CAPTURE_MODE_SINGLE_CH_NON_MUX_DISCRETE_SYNC_ACTVID_VBLK,/**< Single Channel non multiplexed discrete sync mode with ACTVID andVBLK as control signals. */VPS_CAPT_VIDEO_CAPTURE_MODE_SINGLE_CH_NON_MUX_DISCRETE_SYNC_ACTVID_VSYNC,/**< Single Channel non multiplexed discrete sync mode with ACTVID andVBLK as control signals. */VPS_CAPT_VIDEO_CAPTURE_MODE_MULTI_CH_LINE_MUX_SPLIT_LINE_EMBEDDED_SYNC,/**< Multi-channel line-multiplexed mode - split line mode */VPS_CAPT_VIDEO_CAPTURE_MODE_MAX/**< Maximum modes */ } Vps_CaptVideoCaptureMode;
jin li3:
回复 Ternence_Hsu:
您好,
我们在usecase设置的inDataFormat = YUV422P.
在captureLink_drv.c里函数CaptureLink_drvCreatInst会根据inDataFormat,设置videocapturemode=
VPS_CAPT_VIDEO_CAPTURE_MODE_SINGLE_CH_NON_MUX_EMBEDDED_SYNCvideoifmode=VPS_CAPT_VIDEO_IF_MODE_16BITFPGA输出到VP0硬件上确实是16位的。