工具与软件:
您好、TI:
我们的产品连接4个摄像头和1个显示器。
视频流水线如下所示。
camera1 +camera2 + Camera3 + Camera4 --> CSI --> GPU --> DSS --> Display
四个摄像头图像将通过 GPU 合并为一个图像并输入到 DSS。
我们知道 DSS 具有帧冻结检测功能。
但 当一个摄像头图像流发生帧冻结时、我们无法检测到 DSS 的帧冻结问题。
那么,如何检测摄像机视频流上的帧冻结?
此致
Chunfu
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.
工具与软件:
您好、TI:
我们的产品连接4个摄像头和1个显示器。
视频流水线如下所示。
camera1 +camera2 + Camera3 + Camera4 --> CSI --> GPU --> DSS --> Display
四个摄像头图像将通过 GPU 合并为一个图像并输入到 DSS。
我们知道 DSS 具有帧冻结检测功能。
但 当一个摄像头图像流发生帧冻结时、我们无法检测到 DSS 的帧冻结问题。
那么,如何检测摄像机视频流上的帧冻结?
此致
Chunfu
尊敬的 Chunfu:
您应该能够通过对 CSIRX 驱动程序的 DMA 回调进行计时来检测 CSI 帧冻结情况。 例如、您可以在此行添加一些代码来获取调用 DMA 回调的时间: https://git.ti.com/cgit/ti-linux-kernel/ti-linux-kernel/tree/drivers/media/platform/ti/j721e-csi2rx/j721e-csi2rx.c?h=ti-linux-6.6.y#n747。
pthread_mutex_lock(&freeze_detect_timer_mutex);
last_dma_callback_time = time(NULL);
pthread_mutex_unlock(&freeze_detect_timer_mutex);
然后、在您的应用代码中、定期检查自上次 CSIRX DMA 回调经过的时间量:
current_time = time(NULL);
pthread_mutex_lock(&freeze_detect_timer_mutex);
time_elapsed = difftime(current_time, last_dma_callback_time)
pthread_mutex_unlock(&freeze_detect_timer_mutex);
/* periodically check lapsed time since last DMA callback:
* CSIRX_DMA_CALLBACK_TIMEOUT can be several frame durations, e.g. 16.66msec * 5
* for 5 frames at 60fps
*/
if(it is time to check DMA call back timeout) {
if( time_elapsed > CSIRX_DMA_CALLBACK_TIMEOUT) {
// CSI DMA call back time out, streaming likely frozen, take action
}
}
此致、
建中