@@ -58,6 +58,10 @@ PARAM_TEST_CASE(Scaling, cv::cuda::DeviceInfo, std::string, Size2f, Rect2f, Rect
5858{
5959};
6060
61+ struct DisplayResolution : testing::TestWithParam<cv::cuda::DeviceInfo>
62+ {
63+ };
64+
6165PARAM_TEST_CASE (Video, cv::cuda::DeviceInfo, std::string)
6266{
6367};
@@ -228,6 +232,37 @@ CUDA_TEST_P(Scaling, Reader)
228232 ASSERT_LT (mae, 2.75 );
229233}
230234
235+ CUDA_TEST_P (DisplayResolution, Reader)
236+ {
237+ cv::cuda::setDevice (GetParam ().deviceID ());
238+ std::string inputFile = std::string (cvtest::TS::ptr ()->get_data_path ()) + " ../cv/video/1920x1080.avi" ;
239+ const Rect displayArea (0 , 0 , 1920 , 1080 );
240+ GpuMat frame;
241+
242+ {
243+ // verify the output frame is the diplay size (1920x1080) and not the coded size (1920x1088)
244+ cv::Ptr<cv::cudacodec::VideoReader> reader = cv::cudacodec::createVideoReader (inputFile);
245+ reader->set (cudacodec::ColorFormat::GRAY);
246+ ASSERT_TRUE (reader->nextFrame (frame));
247+ const cudacodec::FormatInfo format = reader->format ();
248+ ASSERT_TRUE (format.displayArea == displayArea);
249+ ASSERT_TRUE (frame.size () == displayArea.size () && frame.size () == format.targetSz );
250+ }
251+
252+ {
253+ // extra check to verify display frame has not been post-processed and is just a cropped version of the coded sized frame
254+ cudacodec::VideoReaderInitParams params;
255+ params.srcRoi = Rect (0 , 0 , 1920 , 1088 );
256+ cv::Ptr<cv::cudacodec::VideoReader> readerCodedSz = cv::cudacodec::createVideoReader (inputFile, {}, params);
257+ readerCodedSz->set (cudacodec::ColorFormat::GRAY);
258+ GpuMat frameCodedSz;
259+ ASSERT_TRUE (readerCodedSz->nextFrame (frameCodedSz));
260+ const cudacodec::FormatInfo formatCodedSz = readerCodedSz->format ();
261+ const double err = cv::cuda::norm (frame, frameCodedSz (displayArea), NORM_INF);
262+ ASSERT_TRUE (err == 0 );
263+ }
264+ }
265+
231266CUDA_TEST_P (Video, Reader)
232267{
233268 cv::cuda::setDevice (GET_PARAM (0 ).deviceID ());
@@ -696,6 +731,8 @@ INSTANTIATE_TEST_CASE_P(CUDA_Codec, CheckSet, testing::Combine(
696731INSTANTIATE_TEST_CASE_P(CUDA_Codec, Scaling, testing::Combine(
697732 ALL_DEVICES, testing::Values(VIDEO_SRC_SCALING), testing::Values(TARGET_SZ), testing::Values(SRC_ROI), testing::Values(TARGET_ROI)));
698733
734+ INSTANTIATE_TEST_CASE_P (CUDA_Codec, DisplayResolution, ALL_DEVICES);
735+
699736#define VIDEO_SRC_R " highgui/video/big_buck_bunny.mp4" , " cv/video/768x576.avi" , " cv/video/1920x1080.avi" , " highgui/video/big_buck_bunny.avi" , \
700737 " highgui/video/big_buck_bunny.h264" , " highgui/video/big_buck_bunny.h265" , " highgui/video/big_buck_bunny.mpg" , \
701738 " highgui/video/sample_322x242_15frames.yuv420p.libvpx-vp9.mp4" , " highgui/video/sample_322x242_15frames.yuv420p.libaom-av1.mp4" , \
0 commit comments