diff --git a/modules/cudacodec/src/ffmpeg_video_source.cpp b/modules/cudacodec/src/ffmpeg_video_source.cpp index 815e5c8ce..de0f349c4 100644 --- a/modules/cudacodec/src/ffmpeg_video_source.cpp +++ b/modules/cudacodec/src/ffmpeg_video_source.cpp @@ -192,6 +192,10 @@ void cv::cudacodec::detail::FFmpegVideoSource::updateFormat(const FormatInfo& vi bool cv::cudacodec::detail::FFmpegVideoSource::get(const int propertyId, double& propertyVal) const { + propertyVal = cap.get(propertyId); + if (propertyVal != 0.) + return true; + CV_Assert(videoCaptureParams.size() % 2 == 0); for (std::size_t i = 0; i < videoCaptureParams.size(); i += 2) { if (videoCaptureParams.at(i) == propertyId) { @@ -199,6 +203,7 @@ bool cv::cudacodec::detail::FFmpegVideoSource::get(const int propertyId, double& return true; } } + return false; } diff --git a/modules/cudacodec/test/test_video.cpp b/modules/cudacodec/test/test_video.cpp index 2f05c1ac3..a92512304 100644 --- a/modules/cudacodec/test/test_video.cpp +++ b/modules/cudacodec/test/test_video.cpp @@ -430,6 +430,19 @@ CUDA_TEST_P(CheckParams, Reader) } } +CUDA_TEST_P(CheckParams, CaptureProps) +{ + std::string inputFile = std::string(cvtest::TS::ptr()->get_data_path()) + "../highgui/video/big_buck_bunny.mp4"; + cv::Ptr reader = cv::cudacodec::createVideoReader(inputFile); + double width, height, fps; + ASSERT_TRUE(reader->get(cv::VideoCaptureProperties::CAP_PROP_FRAME_WIDTH, width)); + ASSERT_EQ(672, width); + ASSERT_TRUE(reader->get(cv::VideoCaptureProperties::CAP_PROP_FRAME_HEIGHT, height)); + ASSERT_EQ(384, height); + ASSERT_TRUE(reader->get(cv::VideoCaptureProperties::CAP_PROP_FPS, fps)); + ASSERT_EQ(24, fps); +} + CUDA_TEST_P(CheckDecodeSurfaces, Reader) { cv::cuda::setDevice(GET_PARAM(0).deviceID()); @@ -554,6 +567,7 @@ CUDA_TEST_P(TransCode, H264ToH265) } INSTANTIATE_TEST_CASE_P(CUDA_Codec, TransCode, ALL_DEVICES); + #endif #if defined(HAVE_NVCUVENC)