venc问题

Viewed 99

我启用了同一个摄像头的3个vicap通道和3个venc通道
他们一一进行了系统绑定
CSI2 -- vicap0 -- venc0 h264编码 网络推流使用
CSI2 -- vicap1 -- venc1 h264编码 本地录像使用
CSI2 -- vicap2 -- venc2 jpg编码 本地拍照使用

现在的问题是

由于拍照需要保持实时响应 用户按键一按下就需要立即捕捉图像 所以在开机后就需要立即调用kd_mpi_vicap_start_stream和kd_mpi_venc_start_chn来让图像捕捉和编码一直保持运行

但我发现当我不去将所有venc的缓冲区数据都读走 那么venc和vicap会一直阻塞住! 直到venc的所有缓冲区的数据都被取走才会产生新数据!

这个有什么办法解决么? 就是说 不管我应用层读不读缓冲区 都可以让他一直自动的产生新数据

1 Answers

你好。
当缓冲区满时,将停止填充新数据。以下是两种优化的解决方案:

  1. 启动一个独立线程,实时读取编码后的数据,提取所需内容并丢弃无用数据,以确保缓冲区始终保持最新状态。
  2. 在抓拍图像时,动态绑定 VI 到 VENC;抓拍完成后,及时解除绑定。

是不是vi可以一直运行并且不会被阻塞 只有绑定了venc才会进行阻塞?

到底什么情况下才会被阻塞啊? 系统绑定? 还是通道是否启用? 阻塞的条件是什么啊?

是的,阻塞的只是venc的缓冲区。