Merge pull request #3196 from cudawarped:expose_cudacodec_format_to_python

pull/3202/head
Alexander Alekhin 3 years ago
commit 508c8db05e
  1. 35
      modules/cudacodec/include/opencv2/cudacodec.hpp
  2. 6
      modules/cudacodec/misc/python/test/test_cudacodec.py

@ -290,22 +290,25 @@ enum DeinterlaceMode
/** @brief Struct providing information about video file format. :
*/
struct FormatInfo
struct CV_EXPORTS_W_SIMPLE FormatInfo
{
Codec codec;
ChromaFormat chromaFormat;
int nBitDepthMinus8 = -1;
int ulWidth = 0;//!< Coded sequence width in pixels.
int ulHeight = 0;//!< Coded sequence height in pixels.
int width = 0;//!< Width of the decoded frame returned by nextFrame(frame).
int height = 0;//!< Height of the decoded frame returned by nextFrame(frame).
int ulMaxWidth = 0;
int ulMaxHeight = 0;
Rect displayArea;//!< ROI inside the decoded frame returned by nextFrame(frame), containing the useable video frame.
bool valid = false;
double fps = 0;
int ulNumDecodeSurfaces = 0;//!< Maximum number of internal decode surfaces.
DeinterlaceMode deinterlaceMode;
CV_WRAP FormatInfo() : nBitDepthMinus8(-1), ulWidth(0), ulHeight(0), width(0), height(0), ulMaxWidth(0), ulMaxHeight(0), valid(false),
fps(0), ulNumDecodeSurfaces(0) {};
CV_PROP_RW Codec codec;
CV_PROP_RW ChromaFormat chromaFormat;
CV_PROP_RW int nBitDepthMinus8;
CV_PROP_RW int ulWidth;//!< Coded sequence width in pixels.
CV_PROP_RW int ulHeight;//!< Coded sequence height in pixels.
CV_PROP_RW int width;//!< Width of the decoded frame returned by nextFrame(frame).
CV_PROP_RW int height;//!< Height of the decoded frame returned by nextFrame(frame).
int ulMaxWidth;
int ulMaxHeight;
CV_PROP_RW Rect displayArea;//!< ROI inside the decoded frame returned by nextFrame(frame), containing the useable video frame.
CV_PROP_RW bool valid;
CV_PROP_RW double fps;
CV_PROP_RW int ulNumDecodeSurfaces;//!< Maximum number of internal decode surfaces.
CV_PROP_RW DeinterlaceMode deinterlaceMode;
};
/** @brief cv::cudacodec::VideoReader generic properties identifier.
@ -342,7 +345,7 @@ public:
/** @brief Returns information about video file format.
*/
virtual FormatInfo format() const = 0;
CV_WRAP virtual FormatInfo format() const = 0;
/** @brief Grabs the next frame from the video source.

@ -19,11 +19,17 @@ class cudacodec_test(NewOpenCVTests):
vid_path = os.environ['OPENCV_TEST_DATA_PATH'] + '/cv/video/1920x1080.avi'
try:
reader = cv.cudacodec.createVideoReader(vid_path)
format_info = reader.format()
ret, gpu_mat = reader.nextFrame()
self.assertTrue(ret)
self.assertTrue('GpuMat' in str(type(gpu_mat)), msg=type(gpu_mat))
#TODO: print(cv.utils.dumpInputArray(gpu_mat)) # - no support for GpuMat
if(not format_info.valid):
format_info = reader.format()
sz = gpu_mat.size()
self.assertTrue(sz[0] == format_info.width and sz[1] == format_info.height)
# not checking output, therefore sepearate tests for different signatures is unecessary
ret, _gpu_mat2 = reader.nextFrame(gpu_mat)
#TODO: self.assertTrue(gpu_mat == gpu_mat2)

Loading…
Cancel
Save