TI中文支持网
TI专业的中文技术问题搜集分享网站

8148DVRRDK视频采集问题

专家您好:   

     我设计了一个dvrrdk下的视频采集的例子,想把采集的数据直接保存在A8上,但遇到一些问题向您请教。我建了三个link,capturelink、vpss上的ipcframeoutlink和a8上的ipcframeinlink。通过a8上的ipcframeinlink读取数据时我应该先用Vsys_allocBuf申请内存块并把这些内存块用IpcFramesInLink_putEmptyVideoFrames放入系统内存中,还是不做上述操作直接用IpcFramesInLink_getFullVideoFrames和IpcFramesInLink_putEmptyVideoFrames来读取数据。我发现如做Vsys_allocBuf申请内存块操作,将它们用IpcFramesInLink_putEmptyVideoFrames函数放入系统内存时出现内存访问异常错误。如不做,在只做IpcFramesInLink_getFullVideoFrames和IpcFramesInLink_putEmptyVideoFrames时没问题,如要访问IpcFramesInLink_getFullVideoFrames 获得的内存缓冲区,则读取虚拟地址时会出错。另外,上面的操作我是在启动所有link后在一个无限循环中做的,而没有在回调函数中做,这样是否有问题。上述问题困扰我好几天了, 希望您不吝赐教!

Chris Meng:

Wang Lishi,

应该在采集侧申请buffer,然后通过ipcframeout把指针传递给ARM。

在ARM侧你提到了有转换地址的错误,能否告知一下你是如何转换地址的?

lishi wang上面的操作我是在启动所有link后在一个无限循环中做的,而没有在回调函数中做

不是很明白你的做法,建议参考现有use case的做法来做。

user4029446:

回复 Chris Meng:

谢谢您的答复。请问在采集侧申请buffer是不是不要在ARM端调用Vsys_allocBuf申请内存,而在VPSS端调用Vsys_allocBuf申请内存,那不是要改VPSS上的代码了吗?我记得这通常是不建议做的。对于第二个问题,我没有做什么转换地址操作,只是IpcFramesInLink_getFullVideoFrames后,在buflist结构里frame[i].addr[0][0]指向的缓冲区取数据,然后就错误了。

Chris Meng:

回复 user4029446:

lishi wang对于第二个问题,我没有做什么转换地址操作,只是IpcFramesInLink_getFullVideoFrames后,在buflist结构里frame[i].addr[0][0]指向的缓冲区取数据,然后就错误了。

在A8上要做实地址到虚拟地址的转换,Linux的user space访问的是虚拟地址。

Chris Meng:

回复 user4029446:

lishi wang请问在采集侧申请buffer是不是不要在ARM端调用Vsys_allocBuf申请内存,而在VPSS端调用Vsys_allocBuf申请内存,那不是要改VPSS上的代码了吗?

在captureLink_drv.c里面有申请buffer的代码,请参考以下CaptureLink_drvAllocAndQueueFrames里面的Utils_tilerFrameAlloc/Utils_memFrameAlloc函数。

赞(0)
未经允许不得转载:TI中文支持网 » 8148DVRRDK视频采集问题
分享到: 更多 (0)