diff --git a/modules/videoio/src/cap_ffmpeg_impl.hpp b/modules/videoio/src/cap_ffmpeg_impl.hpp index 17d02df95a..3dcd4e81d5 100644 --- a/modules/videoio/src/cap_ffmpeg_impl.hpp +++ b/modules/videoio/src/cap_ffmpeg_impl.hpp @@ -428,11 +428,15 @@ inline const char* _opencv_avcodec_get_name(CV_CODEC_ID id) } -static -inline int _opencv_ffmpeg_interrupt_callback(void *ptr) +static int _opencv_ffmpeg_interrupt_callback(void *ptr) { AVInterruptCallbackMetadata* metadata = (AVInterruptCallbackMetadata*)ptr; - CV_Assert(metadata); + + if(!metadata) + { + CV_LOG_WARNING(NULL, "Stream timeout without metadata passed"); + return 0; + } if (metadata->timeout_after_ms == 0) { @@ -442,9 +446,15 @@ inline int _opencv_ffmpeg_interrupt_callback(void *ptr) timespec now; get_monotonic_time(&now); - metadata->timeout = get_monotonic_time_diff_ms(metadata->value, now) > metadata->timeout_after_ms; + double timeout = get_monotonic_time_diff_ms(metadata->value, now); + metadata->timeout = timeout > metadata->timeout_after_ms; + if (metadata->timeout) + { + CV_LOG_WARNING(NULL, cv::format("Stream timeout triggered after %lf ms", timeout)); + return -1; + } - return metadata->timeout ? -1 : 0; + return 0; } #endif