@@ -58,6 +58,10 @@ PARAM_TEST_CASE(Scaling, cv::cuda::DeviceInfo, std::string, Size2f, Rect2f, Rect
58
58
{
59
59
};
60
60
61
+ struct DisplayResolution : testing::TestWithParam<cv::cuda::DeviceInfo>
62
+ {
63
+ };
64
+
61
65
PARAM_TEST_CASE (Video, cv::cuda::DeviceInfo, std::string)
62
66
{
63
67
};
@@ -228,6 +232,37 @@ CUDA_TEST_P(Scaling, Reader)
228
232
ASSERT_LT (mae, 2.75 );
229
233
}
230
234
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
+
231
266
CUDA_TEST_P (Video, Reader)
232
267
{
233
268
cv::cuda::setDevice (GET_PARAM (0 ).deviceID ());
@@ -696,6 +731,8 @@ INSTANTIATE_TEST_CASE_P(CUDA_Codec, CheckSet, testing::Combine(
696
731
INSTANTIATE_TEST_CASE_P(CUDA_Codec, Scaling, testing::Combine(
697
732
ALL_DEVICES, testing::Values(VIDEO_SRC_SCALING), testing::Values(TARGET_SZ), testing::Values(SRC_ROI), testing::Values(TARGET_ROI)));
698
733
734
+ INSTANTIATE_TEST_CASE_P (CUDA_Codec, DisplayResolution, ALL_DEVICES);
735
+
699
736
#define VIDEO_SRC_R " highgui/video/big_buck_bunny.mp4" , " cv/video/768x576.avi" , " cv/video/1920x1080.avi" , " highgui/video/big_buck_bunny.avi" , \
700
737
" highgui/video/big_buck_bunny.h264" , " highgui/video/big_buck_bunny.h265" , " highgui/video/big_buck_bunny.mpg" , \
701
738
" highgui/video/sample_322x242_15frames.yuv420p.libvpx-vp9.mp4" , " highgui/video/sample_322x242_15frames.yuv420p.libaom-av1.mp4" , \
0 commit comments