diff --git a/modules/videoio/test/test_video_io.cpp b/modules/videoio/test/test_video_io.cpp index 6661b13c5a..c73a292d0b 100644 --- a/modules/videoio/test/test_video_io.cpp +++ b/modules/videoio/test/test_video_io.cpp @@ -215,8 +215,28 @@ public: throw SkipTestException(cv::String("Backend ") + cv::videoio_registry::getBackendName(apiPref) + cv::String(" can't open the video: ") + video_file); + int frame_count = (int)cap.get(CAP_PROP_FRAME_COUNT); + + // HACK: Video consists of 125 frames, but cv::VideoCapture with FFmpeg reports only 122 frames for mpg video. + // mpg file reports 5.08 sec * 24 fps => property returns 122 frames,but actual number of frames returned is 125 + // HACK: CAP_PROP_FRAME_COUNT is not supported for vmw + MSMF. Just force check for all 125 frames + if (ext == "mpg") + EXPECT_GT(frame_count, 121); + else if ((ext == "wmv") && (apiPref == CAP_MSMF)) + frame_count = 125; + else + EXPECT_EQ(frame_count, 125); Mat img; - for(int i = 0; i < 10; i++) + +#ifdef _WIN32 // handle old FFmpeg wrapper on Windows till rebuild + frame_count = 10; +#else + // HACK: FFmpeg reports picture_pts = AV_NOPTS_VALUE_ for the last frame for AVI container by some reason + if ((ext == "avi") && (apiPref == CAP_FFMPEG)) + frame_count--; +#endif + + for (int i = 0; i < frame_count; i++) { double timestamp = 0; ASSERT_NO_THROW(cap >> img);