From: Alexander Alekhin Date: Tue, 18 Sep 2018 16:25:01 +0000 (+0000) Subject: videoio: CAP_PROP_BACKEND property interface X-Git-Tag: accepted/tizen/6.0/unified/20201030.111113~1^2~529^2~7^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d3eed2cf238b97049406c5bf1782d06a34804fba;p=platform%2Fupstream%2Fopencv.git videoio: CAP_PROP_BACKEND property interface --- diff --git a/modules/videoio/include/opencv2/videoio.hpp b/modules/videoio/include/opencv2/videoio.hpp index 92af74a..cfa2774 100644 --- a/modules/videoio/include/opencv2/videoio.hpp +++ b/modules/videoio/include/opencv2/videoio.hpp @@ -169,6 +169,7 @@ enum VideoCaptureProperties { CAP_PROP_AUTOFOCUS =39, CAP_PROP_SAR_NUM =40, //!< Sample aspect ratio: num/den (num) CAP_PROP_SAR_DEN =41, //!< Sample aspect ratio: num/den (den) + CAP_PROP_BACKEND =42, //!< current backend (enum VideoCaptureAPIs). Read-only property #ifndef CV_DOXYGEN CV__CAP_PROP_LATEST #endif diff --git a/modules/videoio/src/cap.cpp b/modules/videoio/src/cap.cpp index 6c1ad19..ff0bc6f 100644 --- a/modules/videoio/src/cap.cpp +++ b/modules/videoio/src/cap.cpp @@ -272,6 +272,8 @@ VideoCapture& VideoCapture::operator >> (UMat& image) bool VideoCapture::set(int propId, double value) { + CV_CheckNE(propId, (int)CAP_PROP_BACKEND, "Can set read-only property"); + if (!icap.empty()) return icap->setProperty(propId, value); return cvSetCaptureProperty(cap, propId, value) != 0; @@ -279,6 +281,17 @@ bool VideoCapture::set(int propId, double value) double VideoCapture::get(int propId) const { + if (propId == CAP_PROP_BACKEND) + { + int api = 0; + if (icap) + api = icap->isOpened() ? icap->getCaptureDomain() : 0; + else if (cap) + api = cap->getCaptureDomain(); + if (api <= 0) + return -1.0; + return (double)api; + } if (!icap.empty()) return icap->getProperty(propId); return cap ? cap->getProperty(propId) : 0; @@ -358,6 +371,8 @@ bool VideoWriter::isOpened() const bool VideoWriter::set(int propId, double value) { + CV_CheckNE(propId, (int)CAP_PROP_BACKEND, "Can set read-only property"); + if (!iwriter.empty()) return iwriter->setProperty(propId, value); return false; @@ -365,6 +380,17 @@ bool VideoWriter::set(int propId, double value) double VideoWriter::get(int propId) const { + if (propId == CAP_PROP_BACKEND) + { + int api = 0; + if (iwriter) + api = iwriter->getCaptureDomain(); + else if (writer) + api = writer->getCaptureDomain(); + if (api <= 0) + return -1.0; + return (double)api; + } if (!iwriter.empty()) return iwriter->getProperty(propId); return 0.;