From 21a8d9569d8de225509225193e9c02e622ff2702 Mon Sep 17 00:00:00 2001 From: Maksim Shabunin Date: Thu, 5 Nov 2020 13:11:31 +0300 Subject: [PATCH] videoio: added frameSize to MFX capture --- modules/videoio/src/cap_mfx_reader.cpp | 20 +++++++++++++++++--- modules/videoio/src/cap_mfx_reader.hpp | 1 + modules/videoio/test/test_mfx.cpp | 2 ++ 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/modules/videoio/src/cap_mfx_reader.cpp b/modules/videoio/src/cap_mfx_reader.cpp index 7df2cf56af..2f85bbe02a 100644 --- a/modules/videoio/src/cap_mfx_reader.cpp +++ b/modules/videoio/src/cap_mfx_reader.cpp @@ -111,6 +111,7 @@ VideoCapture_IntelMFX::VideoCapture_IntelMFX(const cv::String &filename) return; } + frameSize = Size(params.mfx.FrameInfo.CropW, params.mfx.FrameInfo.CropH); good = true; } @@ -126,10 +127,23 @@ VideoCapture_IntelMFX::~VideoCapture_IntelMFX() cleanup(deviceHandler); } -double VideoCapture_IntelMFX::getProperty(int) const +double VideoCapture_IntelMFX::getProperty(int prop) const { - MSG(cerr << "MFX: getProperty() is not implemented" << endl); - return 0; + if (!good) + { + MSG(cerr << "MFX: can not call getProperty(), backend has not been initialized" << endl); + return 0; + } + switch (prop) + { + case CAP_PROP_FRAME_WIDTH: + return frameSize.width; + case CAP_PROP_FRAME_HEIGHT: + return frameSize.height; + default: + MSG(cerr << "MFX: unsupported property" << endl); + return 0; + } } bool VideoCapture_IntelMFX::setProperty(int, double) diff --git a/modules/videoio/src/cap_mfx_reader.hpp b/modules/videoio/src/cap_mfx_reader.hpp index cad5297b8a..bd3673864c 100644 --- a/modules/videoio/src/cap_mfx_reader.hpp +++ b/modules/videoio/src/cap_mfx_reader.hpp @@ -34,6 +34,7 @@ private: MFXVideoDECODE *decoder; SurfacePool *pool; void *outSurface; + cv::Size frameSize; bool good; }; diff --git a/modules/videoio/test/test_mfx.cpp b/modules/videoio/test/test_mfx.cpp index f739cbda17..6613383fde 100644 --- a/modules/videoio/test/test_mfx.cpp +++ b/modules/videoio/test/test_mfx.cpp @@ -111,6 +111,8 @@ TEST_P(Videoio_MFX, read_write_raw) VideoCapture cap; cap.open(filename, CAP_INTEL_MFX); ASSERT_TRUE(cap.isOpened()); + EXPECT_EQ(FRAME_SIZE.width, cap.get(CAP_PROP_FRAME_WIDTH)); + EXPECT_EQ(FRAME_SIZE.height, cap.get(CAP_PROP_FRAME_HEIGHT)); for (int i = 0; i < FRAME_COUNT; ++i) { ASSERT_TRUE(cap.read(frame));