|
|
|
@ -231,6 +231,34 @@ public: |
|
|
|
|
else |
|
|
|
|
std::cout << "Frames counter is not available. Actual frames: " << count_actual << ". SKIP check." << std::endl; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void doTimestampTest() |
|
|
|
|
{ |
|
|
|
|
if (!isBackendAvailable(apiPref, cv::videoio_registry::getStreamBackends())) |
|
|
|
|
throw SkipTestException(cv::String("Backend is not available/disabled: ") + cv::videoio_registry::getBackendName(apiPref)); |
|
|
|
|
|
|
|
|
|
if ((apiPref == CAP_MSMF) || ((apiPref == CAP_FFMPEG) && ((ext == "h264") || (ext == "h265")))) |
|
|
|
|
throw SkipTestException(cv::String("Backend ") + cv::videoio_registry::getBackendName(apiPref) + |
|
|
|
|
cv::String(" does not support CAP_PROP_POS_MSEC option")); |
|
|
|
|
|
|
|
|
|
VideoCapture cap; |
|
|
|
|
EXPECT_NO_THROW(cap.open(video_file, apiPref)); |
|
|
|
|
if (!cap.isOpened()) |
|
|
|
|
throw SkipTestException(cv::String("Backend ") + cv::videoio_registry::getBackendName(apiPref) + |
|
|
|
|
cv::String(" can't open the video: ") + video_file); |
|
|
|
|
|
|
|
|
|
Mat img; |
|
|
|
|
for(int i = 0; i < 10; i++) |
|
|
|
|
{ |
|
|
|
|
double timestamp = 0; |
|
|
|
|
ASSERT_NO_THROW(cap >> img); |
|
|
|
|
EXPECT_NO_THROW(timestamp = cap.get(CAP_PROP_POS_MSEC)); |
|
|
|
|
const double frame_period = 1000.f/bunny_param.getFps(); |
|
|
|
|
// NOTE: eps == frame_period, because videoCapture returns frame begining timestamp or frame end
|
|
|
|
|
// timestamp depending on codec and back-end. So the first frame has timestamp 0 or frame_period.
|
|
|
|
|
EXPECT_NEAR(timestamp, i*frame_period, frame_period); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
//==================================================================================================
|
|
|
|
@ -367,6 +395,8 @@ TEST_P(Videoio_Bunny, read_position) { doTest(); } |
|
|
|
|
|
|
|
|
|
TEST_P(Videoio_Bunny, frame_count) { doFrameCountTest(); } |
|
|
|
|
|
|
|
|
|
TEST_P(Videoio_Bunny, frame_timestamp) { doTimestampTest(); } |
|
|
|
|
|
|
|
|
|
INSTANTIATE_TEST_CASE_P(videoio, Videoio_Bunny, |
|
|
|
|
testing::Combine( |
|
|
|
|
testing::ValuesIn(bunny_params), |
|
|
|
|