From 8d232a63ad64dff30e6586304b42620e703d353d Mon Sep 17 00:00:00 2001 From: lionkun <871518554@qq.com> Date: Wed, 24 Mar 2021 16:34:22 +0800 Subject: [PATCH 1/6] fix the perf tests of OpenCV.js so that it can run on Node.js successfully --- modules/js/perf/base.js | 9 +++++++++ modules/js/perf/perf_helpfunc.js | 9 ++++++++- modules/js/perf/perf_imgproc/perf_blur.js | 5 ++++- modules/js/perf/perf_imgproc/perf_cvtcolor.js | 8 ++++++-- modules/js/perf/perf_imgproc/perf_dilate.js | 5 ++++- modules/js/perf/perf_imgproc/perf_erode.js | 5 ++++- modules/js/perf/perf_imgproc/perf_filter2D.js | 5 ++++- modules/js/perf/perf_imgproc/perf_gaussianBlur.js | 5 ++++- modules/js/perf/perf_imgproc/perf_medianBlur.js | 5 ++++- modules/js/perf/perf_imgproc/perf_pyrDown.js | 5 ++++- modules/js/perf/perf_imgproc/perf_remap.js | 5 ++++- modules/js/perf/perf_imgproc/perf_resize.js | 6 +++++- modules/js/perf/perf_imgproc/perf_scharr.js | 5 ++++- modules/js/perf/perf_imgproc/perf_sobel.js | 5 ++++- modules/js/perf/perf_imgproc/perf_threshold.js | 5 ++++- modules/js/perf/perf_imgproc/perf_warpAffine.js | 7 ++++++- modules/js/perf/perf_imgproc/perf_warpPerspective.js | 7 ++++++- 17 files changed, 84 insertions(+), 17 deletions(-) diff --git a/modules/js/perf/base.js b/modules/js/perf/base.js index 3948f21254..f44b8e7f20 100644 --- a/modules/js/perf/base.js +++ b/modules/js/perf/base.js @@ -1,5 +1,10 @@ if (typeof window === 'undefined') { var cv = require("../opencv"); + if (cv instanceof Promise) { + loadOpenCV(); + } else { + cv.onRuntimeInitialized = perf; + } } let gCvSize; @@ -24,6 +29,10 @@ function getCvSize() { return gCvSize; } +async function loadOpenCV() { + cv = await cv; +} + if (typeof window === 'undefined') { exports.getCvSize = getCvSize; } \ No newline at end of file diff --git a/modules/js/perf/perf_helpfunc.js b/modules/js/perf/perf_helpfunc.js index e42f4ad807..c2ad7f2e0f 100644 --- a/modules/js/perf/perf_helpfunc.js +++ b/modules/js/perf/perf_helpfunc.js @@ -1,3 +1,10 @@ +const isNodeJs = (typeof window) === 'undefined'? true : false; + +if(isNodeJs) { + var Base = require("./base"); + global.getCvSize = Base.getCvSize; +} + var fillGradient = function(cv, img, delta=5) { let ch = img.channels(); console.assert(!img.empty() && img.depth() == cv.CV_8U && ch <= 4); @@ -56,8 +63,8 @@ var smoothBorder = function(cv, img, color, delta=5) { var cvtStr2cvSize = function(strSize) { let size; - let cvSize = getCvSize(); + switch(strSize) { case "127,61": size = cvSize.szODD;break; case '320,240': size = cvSize.szQVGA;break; diff --git a/modules/js/perf/perf_imgproc/perf_blur.js b/modules/js/perf/perf_imgproc/perf_blur.js index 59712fb478..66c5f240e7 100644 --- a/modules/js/perf/perf_imgproc/perf_blur.js +++ b/modules/js/perf/perf_imgproc/perf_blur.js @@ -17,7 +17,10 @@ function perf() { if (isNodeJs) { global.cv = cv; global.combine = HelpFunc.combine; - global.cvtStr2cvSize = HelpFunc.cvtStr2cvSize; + global.log = HelpFunc.log; + global.decodeParams2Case = HelpFunc.decodeParams2Case; + global.setBenchmarkSuite = HelpFunc.setBenchmarkSuite; + global.addKernelCase = HelpFunc.addKernelCase; global.cvSize = Base.getCvSize(); } else { enableButton(); diff --git a/modules/js/perf/perf_imgproc/perf_cvtcolor.js b/modules/js/perf/perf_imgproc/perf_cvtcolor.js index b5007985cc..fbae5d1bca 100644 --- a/modules/js/perf/perf_imgproc/perf_cvtcolor.js +++ b/modules/js/perf/perf_imgproc/perf_cvtcolor.js @@ -17,7 +17,11 @@ function perf() { if (isNodeJs) { global.cv = cv; global.combine = HelpFunc.combine; - global.cvtStr2cvSize = HelpFunc.cvtStr2cvSize; + global.constructMode = HelpFunc.constructMode; + global.log = HelpFunc.log; + global.decodeParams2Case = HelpFunc.decodeParams2Case; + global.setBenchmarkSuite = HelpFunc.setBenchmarkSuite; + global.addKernelCase = HelpFunc.addKernelCase; global.cvSize = Base.getCvSize(); } else { enableButton(); @@ -25,7 +29,7 @@ function perf() { } let totalCaseNum, currentCaseId; - //extra color conversions supported implicitly + // extra color conversions supported implicitly { cv.CX_BGRA2HLS = cv.COLOR_COLORCVT_MAX + cv.COLOR_BGR2HLS, cv.CX_BGRA2HLS_FULL = cv.COLOR_COLORCVT_MAX + cv.COLOR_BGR2HLS_FULL, diff --git a/modules/js/perf/perf_imgproc/perf_dilate.js b/modules/js/perf/perf_imgproc/perf_dilate.js index c4e14c7be2..5b6cd01682 100644 --- a/modules/js/perf/perf_imgproc/perf_dilate.js +++ b/modules/js/perf/perf_imgproc/perf_dilate.js @@ -17,7 +17,10 @@ function perf() { if (isNodeJs) { global.cv = cv; global.combine = HelpFunc.combine; - global.cvtStr2cvSize = HelpFunc.cvtStr2cvSize; + global.log = HelpFunc.log; + global.decodeParams2Case = HelpFunc.decodeParams2Case; + global.setBenchmarkSuite = HelpFunc.setBenchmarkSuite; + global.addKernelCase = HelpFunc.addKernelCase; global.cvSize = Base.getCvSize(); } else { enableButton(); diff --git a/modules/js/perf/perf_imgproc/perf_erode.js b/modules/js/perf/perf_imgproc/perf_erode.js index 95aba6fa21..8915ead40f 100644 --- a/modules/js/perf/perf_imgproc/perf_erode.js +++ b/modules/js/perf/perf_imgproc/perf_erode.js @@ -17,7 +17,10 @@ function perf() { if (isNodeJs) { global.cv = cv; global.combine = HelpFunc.combine; - global.cvtStr2cvSize = HelpFunc.cvtStr2cvSize; + global.log = HelpFunc.log; + global.decodeParams2Case = HelpFunc.decodeParams2Case; + global.setBenchmarkSuite = HelpFunc.setBenchmarkSuite; + global.addKernelCase = HelpFunc.addKernelCase; global.cvSize = Base.getCvSize(); } else { enableButton(); diff --git a/modules/js/perf/perf_imgproc/perf_filter2D.js b/modules/js/perf/perf_imgproc/perf_filter2D.js index d92dc2b55a..4602befcbd 100644 --- a/modules/js/perf/perf_imgproc/perf_filter2D.js +++ b/modules/js/perf/perf_imgproc/perf_filter2D.js @@ -17,7 +17,10 @@ function perf() { if (isNodeJs) { global.cv = cv; global.combine = HelpFunc.combine; - global.cvtStr2cvSize = HelpFunc.cvtStr2cvSize; + global.log = HelpFunc.log; + global.decodeParams2Case = HelpFunc.decodeParams2Case; + global.setBenchmarkSuite = HelpFunc.setBenchmarkSuite; + global.addKernelCase = HelpFunc.addKernelCase; global.cvSize = Base.getCvSize(); } else { enableButton(); diff --git a/modules/js/perf/perf_imgproc/perf_gaussianBlur.js b/modules/js/perf/perf_imgproc/perf_gaussianBlur.js index 33c5401a7e..b59aa83b84 100644 --- a/modules/js/perf/perf_imgproc/perf_gaussianBlur.js +++ b/modules/js/perf/perf_imgproc/perf_gaussianBlur.js @@ -17,7 +17,10 @@ function perf() { if (isNodeJs) { global.cv = cv; global.combine = HelpFunc.combine; - global.cvtStr2cvSize = HelpFunc.cvtStr2cvSize; + global.log = HelpFunc.log; + global.decodeParams2Case = HelpFunc.decodeParams2Case; + global.setBenchmarkSuite = HelpFunc.setBenchmarkSuite; + global.addKernelCase = HelpFunc.addKernelCase; global.cvSize = Base.getCvSize(); } else { enableButton(); diff --git a/modules/js/perf/perf_imgproc/perf_medianBlur.js b/modules/js/perf/perf_imgproc/perf_medianBlur.js index 69b7ba3ead..333bc8424c 100644 --- a/modules/js/perf/perf_imgproc/perf_medianBlur.js +++ b/modules/js/perf/perf_imgproc/perf_medianBlur.js @@ -17,7 +17,10 @@ function perf() { if (isNodeJs) { global.cv = cv; global.combine = HelpFunc.combine; - global.cvtStr2cvSize = HelpFunc.cvtStr2cvSize; + global.log = HelpFunc.log; + global.decodeParams2Case = HelpFunc.decodeParams2Case; + global.setBenchmarkSuite = HelpFunc.setBenchmarkSuite; + global.addKernelCase = HelpFunc.addKernelCase; global.cvSize = Base.getCvSize(); } else { enableButton(); diff --git a/modules/js/perf/perf_imgproc/perf_pyrDown.js b/modules/js/perf/perf_imgproc/perf_pyrDown.js index a98b109ade..957ac7684d 100644 --- a/modules/js/perf/perf_imgproc/perf_pyrDown.js +++ b/modules/js/perf/perf_imgproc/perf_pyrDown.js @@ -17,7 +17,10 @@ function perf() { if (isNodeJs) { global.cv = cv; global.combine = HelpFunc.combine; - global.cvtStr2cvSize = HelpFunc.cvtStr2cvSize; + global.log = HelpFunc.log; + global.decodeParams2Case = HelpFunc.decodeParams2Case; + global.setBenchmarkSuite = HelpFunc.setBenchmarkSuite; + global.addKernelCase = HelpFunc.addKernelCase; global.cvSize = Base.getCvSize(); } else { enableButton(); diff --git a/modules/js/perf/perf_imgproc/perf_remap.js b/modules/js/perf/perf_imgproc/perf_remap.js index fe2e5d7541..1aa69ecef7 100644 --- a/modules/js/perf/perf_imgproc/perf_remap.js +++ b/modules/js/perf/perf_imgproc/perf_remap.js @@ -17,7 +17,10 @@ function perf() { if (isNodeJs) { global.cv = cv; global.combine = HelpFunc.combine; - global.cvtStr2cvSize = HelpFunc.cvtStr2cvSize; + global.log = HelpFunc.log; + global.decodeParams2Case = HelpFunc.decodeParams2Case; + global.setBenchmarkSuite = HelpFunc.setBenchmarkSuite; + global.addKernelCase = HelpFunc.addKernelCase; global.cvSize = Base.getCvSize(); } else { enableButton(); diff --git a/modules/js/perf/perf_imgproc/perf_resize.js b/modules/js/perf/perf_imgproc/perf_resize.js index 3eef30f0e3..5262d22489 100644 --- a/modules/js/perf/perf_imgproc/perf_resize.js +++ b/modules/js/perf/perf_imgproc/perf_resize.js @@ -17,7 +17,11 @@ function perf() { if (isNodeJs) { global.cv = cv; global.combine = HelpFunc.combine; - global.cvtStr2cvSize = HelpFunc.cvtStr2cvSize; + global.fillGradient = HelpFunc.fillGradient; + global.log = HelpFunc.log; + global.decodeParams2Case = HelpFunc.decodeParams2Case; + global.setBenchmarkSuite = HelpFunc.setBenchmarkSuite; + global.addKernelCase = HelpFunc.addKernelCase; global.cvSize = Base.getCvSize(); } else { enableButton(); diff --git a/modules/js/perf/perf_imgproc/perf_scharr.js b/modules/js/perf/perf_imgproc/perf_scharr.js index a76a93078c..4726e76312 100644 --- a/modules/js/perf/perf_imgproc/perf_scharr.js +++ b/modules/js/perf/perf_imgproc/perf_scharr.js @@ -17,7 +17,10 @@ function perf() { if (isNodeJs) { global.cv = cv; global.combine = HelpFunc.combine; - global.cvtStr2cvSize = HelpFunc.cvtStr2cvSize; + global.log = HelpFunc.log; + global.decodeParams2Case = HelpFunc.decodeParams2Case; + global.setBenchmarkSuite = HelpFunc.setBenchmarkSuite; + global.addKernelCase = HelpFunc.addKernelCase; global.cvSize = Base.getCvSize(); } else { enableButton(); diff --git a/modules/js/perf/perf_imgproc/perf_sobel.js b/modules/js/perf/perf_imgproc/perf_sobel.js index b7064e852a..ddc09bb8f6 100644 --- a/modules/js/perf/perf_imgproc/perf_sobel.js +++ b/modules/js/perf/perf_imgproc/perf_sobel.js @@ -17,7 +17,10 @@ function perf() { if (isNodeJs) { global.cv = cv; global.combine = HelpFunc.combine; - global.cvtStr2cvSize = HelpFunc.cvtStr2cvSize; + global.log = HelpFunc.log; + global.decodeParams2Case = HelpFunc.decodeParams2Case; + global.setBenchmarkSuite = HelpFunc.setBenchmarkSuite; + global.addKernelCase = HelpFunc.addKernelCase; global.cvSize = Base.getCvSize(); } else { enableButton(); diff --git a/modules/js/perf/perf_imgproc/perf_threshold.js b/modules/js/perf/perf_imgproc/perf_threshold.js index 381ddaeade..629628748d 100644 --- a/modules/js/perf/perf_imgproc/perf_threshold.js +++ b/modules/js/perf/perf_imgproc/perf_threshold.js @@ -17,7 +17,10 @@ function perf() { if (isNodeJs) { global.cv = cv; global.combine = HelpFunc.combine; - global.cvtStr2cvSize = HelpFunc.cvtStr2cvSize; + global.log = HelpFunc.log; + global.decodeParams2Case = HelpFunc.decodeParams2Case; + global.setBenchmarkSuite = HelpFunc.setBenchmarkSuite; + global.addKernelCase = HelpFunc.addKernelCase; global.cvSize = Base.getCvSize(); } else { enableButton(); diff --git a/modules/js/perf/perf_imgproc/perf_warpAffine.js b/modules/js/perf/perf_imgproc/perf_warpAffine.js index c63cd60e61..dc3cf67af4 100644 --- a/modules/js/perf/perf_imgproc/perf_warpAffine.js +++ b/modules/js/perf/perf_imgproc/perf_warpAffine.js @@ -16,8 +16,13 @@ function perf() { console.log('opencv.js loaded'); if (isNodeJs) { global.cv = cv; + global.fillGradient = HelpFunc.fillGradient; + global.smoothBorder = HelpFunc.smoothBorder; global.combine = HelpFunc.combine; - global.cvtStr2cvSize = HelpFunc.cvtStr2cvSize; + global.log = HelpFunc.log; + global.decodeParams2Case = HelpFunc.decodeParams2Case; + global.setBenchmarkSuite = HelpFunc.setBenchmarkSuite; + global.addKernelCase = HelpFunc.addKernelCase global.cvSize = Base.getCvSize(); } else { enableButton(); diff --git a/modules/js/perf/perf_imgproc/perf_warpPerspective.js b/modules/js/perf/perf_imgproc/perf_warpPerspective.js index dcde2fb22c..252729e3f0 100644 --- a/modules/js/perf/perf_imgproc/perf_warpPerspective.js +++ b/modules/js/perf/perf_imgproc/perf_warpPerspective.js @@ -16,8 +16,13 @@ function perf() { console.log('opencv.js loaded'); if (isNodeJs) { global.cv = cv; + global.fillGradient = HelpFunc.fillGradient; + global.smoothBorder = HelpFunc.smoothBorder; global.combine = HelpFunc.combine; - global.cvtStr2cvSize = HelpFunc.cvtStr2cvSize; + global.log = HelpFunc.log; + global.decodeParams2Case = HelpFunc.decodeParams2Case; + global.setBenchmarkSuite = HelpFunc.setBenchmarkSuite; + global.addKernelCase = HelpFunc.addKernelCase global.cvSize = Base.getCvSize(); } else { enableButton(); From b26f5b946878c87931757f3765c9749eaf5e40a8 Mon Sep 17 00:00:00 2001 From: Alexander Alekhin Date: Thu, 1 Apr 2021 02:17:08 +0000 Subject: [PATCH 2/6] core: backward compatibility for vx_store/vx_store_aligned calls --- modules/core/include/opencv2/core/hal/intrin.hpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/modules/core/include/opencv2/core/hal/intrin.hpp b/modules/core/include/opencv2/core/hal/intrin.hpp index 13228380ce..16d5284e64 100644 --- a/modules/core/include/opencv2/core/hal/intrin.hpp +++ b/modules/core/include/opencv2/core/hal/intrin.hpp @@ -654,6 +654,20 @@ namespace CV__SIMD_NAMESPACE { /** @brief SIMD processing state cleanup call */ inline void vx_cleanup() { VXPREFIX(_cleanup)(); } + + +//! @cond IGNORED + + // backward compatibility + template static inline + void vx_store(_Tp* dst, const _Tvec& v) { return v_store(dst, v); } + // backward compatibility + template static inline + void vx_store_aligned(_Tp* dst, const _Tvec& v) { return v_store_aligned(dst, v); } + +//! @endcond + + //! @} #undef VXPREFIX } // namespace From e4b0251e9d1885e2f6665643a8dbc1346ce34327 Mon Sep 17 00:00:00 2001 From: Alexander Alekhin Date: Thu, 1 Apr 2021 02:26:59 +0000 Subject: [PATCH 3/6] cuda: fix inplace condition in cv::cuda::flip --- modules/cudaarithm/src/core.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/cudaarithm/src/core.cpp b/modules/cudaarithm/src/core.cpp index 368c2fcc41..223929881f 100644 --- a/modules/cudaarithm/src/core.cpp +++ b/modules/cudaarithm/src/core.cpp @@ -163,7 +163,7 @@ void cv::cuda::flip(InputArray _src, OutputArray _dst, int flipCode, Stream& str _dst.create(src.size(), src.type()); GpuMat dst = getOutputMat(_dst, src.size(), src.type(), stream); - bool isInplace = (src.data == dst.data) || (src.refcount == dst.refcount); + bool isInplace = (src.data == dst.data); bool isSizeOdd = (src.cols & 1) == 1 || (src.rows & 1) == 1; if (isInplace && isSizeOdd) CV_Error(Error::BadROISize, "In-place version of flip only accepts even width/height"); From 1b3e0b27af79ecf94dd3a4127ced83d85bd9c223 Mon Sep 17 00:00:00 2001 From: Alexander Alekhin Date: Thu, 1 Apr 2021 09:48:50 +0000 Subject: [PATCH 4/6] cmake: fix files order in Python bindings - with changes backport from 4.x --- modules/python/bindings/CMakeLists.txt | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/modules/python/bindings/CMakeLists.txt b/modules/python/bindings/CMakeLists.txt index 0505f1f03f..442107b135 100644 --- a/modules/python/bindings/CMakeLists.txt +++ b/modules/python/bindings/CMakeLists.txt @@ -26,9 +26,18 @@ foreach(m ${OPENCV_PYTHON_MODULES}) list(APPEND opencv_hdrs "${hdr}") endif() endforeach() + + # both wrapping and C++ implementation + file(GLOB hdr2 ${OPENCV_MODULE_${m}_LOCATION}/misc/python/python_*.hpp) + list(SORT hdr2) + list(APPEND opencv_hdrs ${hdr2}) + list(APPEND opencv_userdef_hdrs ${hdr2}) + file(GLOB hdr ${OPENCV_MODULE_${m}_LOCATION}/misc/python/shadow*.hpp) + list(SORT hdr) list(APPEND opencv_hdrs ${hdr}) file(GLOB userdef_hdrs ${OPENCV_MODULE_${m}_LOCATION}/misc/python/pyopencv*.hpp) + list(SORT userdef_hdrs) list(APPEND opencv_userdef_hdrs ${userdef_hdrs}) endforeach(m) From 4ae2c115207b6575e55f0d13b605757d24976167 Mon Sep 17 00:00:00 2001 From: Alexander Alekhin Date: Thu, 1 Apr 2021 09:22:12 +0000 Subject: [PATCH 5/6] videoio(build): eliminate inconsistent 'override' warnings --- modules/videoio/src/cap_avfoundation.mm | 22 +++++++++++---------- modules/videoio/src/cap_avfoundation_mac.mm | 22 +++++++++++---------- 2 files changed, 24 insertions(+), 20 deletions(-) diff --git a/modules/videoio/src/cap_avfoundation.mm b/modules/videoio/src/cap_avfoundation.mm index 1ff612e231..650bad2b25 100644 --- a/modules/videoio/src/cap_avfoundation.mm +++ b/modules/videoio/src/cap_avfoundation.mm @@ -90,13 +90,14 @@ class CvCaptureCAM : public CvCapture { public: CvCaptureCAM(int cameraNum = -1) ; ~CvCaptureCAM(); - virtual bool grabFrame(); - virtual IplImage* retrieveFrame(int); + bool grabFrame() CV_OVERRIDE; + IplImage* retrieveFrame(int) CV_OVERRIDE; + double getProperty(int property_id) const CV_OVERRIDE; + bool setProperty(int property_id, double value) CV_OVERRIDE; + int getCaptureDomain() /*const*/ CV_OVERRIDE { return cv::CAP_AVFOUNDATION; } + virtual IplImage* queryFrame(); - virtual double getProperty(int property_id) const; - virtual bool setProperty(int property_id, double value); virtual int didStart(); - int getCaptureDomain() /*const*/ CV_OVERRIDE { return cv::CAP_AVFOUNDATION; } private: AVCaptureSession *mCaptureSession; AVCaptureDeviceInput *mCaptureDeviceInput; @@ -132,12 +133,13 @@ class CvCaptureFile : public CvCapture { public: CvCaptureFile(const char* filename) ; ~CvCaptureFile(); - virtual bool grabFrame(); - virtual IplImage* retrieveFrame(int); - virtual double getProperty(int property_id) const; - virtual bool setProperty(int property_id, double value); - virtual int didStart(); + bool grabFrame() CV_OVERRIDE; + IplImage* retrieveFrame(int) CV_OVERRIDE; + double getProperty(int property_id) const CV_OVERRIDE; + bool setProperty(int property_id, double value) CV_OVERRIDE; int getCaptureDomain() /*const*/ CV_OVERRIDE { return cv::CAP_AVFOUNDATION; } + + virtual int didStart(); private: AVAsset *mAsset; AVAssetTrack *mAssetTrack; diff --git a/modules/videoio/src/cap_avfoundation_mac.mm b/modules/videoio/src/cap_avfoundation_mac.mm index 55872539ad..3049b4ba6e 100644 --- a/modules/videoio/src/cap_avfoundation_mac.mm +++ b/modules/videoio/src/cap_avfoundation_mac.mm @@ -94,13 +94,14 @@ class CvCaptureCAM : public CvCapture { public: CvCaptureCAM(int cameraNum = -1) ; ~CvCaptureCAM(); - virtual bool grabFrame(); - virtual IplImage* retrieveFrame(int); - virtual double getProperty(int property_id) const; - virtual bool setProperty(int property_id, double value); - virtual int didStart(); + bool grabFrame() CV_OVERRIDE; + IplImage* retrieveFrame(int) CV_OVERRIDE; + double getProperty(int property_id) const CV_OVERRIDE; + bool setProperty(int property_id, double value) CV_OVERRIDE; int getCaptureDomain() /*const*/ CV_OVERRIDE { return cv::CAP_AVFOUNDATION; } + virtual int didStart(); + private: AVCaptureSession *mCaptureSession; AVCaptureDeviceInput *mCaptureDeviceInput; @@ -136,13 +137,14 @@ class CvCaptureFile : public CvCapture { public: CvCaptureFile(const char* filename) ; ~CvCaptureFile(); - virtual bool grabFrame(); - virtual IplImage* retrieveFrame(int); - virtual double getProperty(int property_id) const; - virtual bool setProperty(int property_id, double value); - virtual int didStart(); + bool grabFrame() CV_OVERRIDE; + IplImage* retrieveFrame(int) CV_OVERRIDE; + double getProperty(int property_id) const CV_OVERRIDE; + bool setProperty(int property_id, double value) CV_OVERRIDE; int getCaptureDomain() /*const*/ CV_OVERRIDE { return cv::CAP_AVFOUNDATION; } + virtual int didStart(); + private: AVAsset *mAsset; AVAssetTrack *mAssetTrack; From d7cb2ea2100e3c4f63f563ce7a8855b236cac06e Mon Sep 17 00:00:00 2001 From: Alexander Alekhin Date: Thu, 1 Apr 2021 11:28:41 +0000 Subject: [PATCH 6/6] videoio(dshow): add NULL ptr check --- modules/videoio/src/cap_dshow.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/videoio/src/cap_dshow.cpp b/modules/videoio/src/cap_dshow.cpp index e29cf38341..cf653f61a7 100644 --- a/modules/videoio/src/cap_dshow.cpp +++ b/modules/videoio/src/cap_dshow.cpp @@ -2731,6 +2731,7 @@ int videoInput::start(int deviceID, videoDevice *VD){ } VIDEOINFOHEADER *pVih = reinterpret_cast(VD->pAmMediaType->pbFormat); + CV_Assert(pVih); int currentWidth = HEADER(pVih)->biWidth; int currentHeight = HEADER(pVih)->biHeight;