Commit 4395c1b9 authored by Alexander Alekhin's avatar Alexander Alekhin

videoio: backport "VideoCapture(int index, int apiPreference)" interface

parent d9b8a9d9
......@@ -649,6 +649,18 @@ public:
*/
CV_WRAP VideoCapture(int index);
/** @overload
@brief Opens a camera for video capturing
@param index id of the video capturing device to open. To open default camera using default backend just pass 0.
(to backward compatibility usage of camera_id + domain_offset (CAP_*) is valid when apiPreference is CAP_ANY)
@param apiPreference preferred Capture API backends to use. Can be used to enforce a specific reader
implementation if multiple are available: e.g. cv::CAP_DSHOW or cv::CAP_MSMF or cv::CAP_V4L2.
@sa The list of supported API backends cv::VideoCaptureAPIs
*/
CV_WRAP VideoCapture(int index, int apiPreference);
/** @brief Default destructor
The method first calls VideoCapture::release to close the already opened file or camera.
......
......@@ -75,6 +75,12 @@ VideoCapture::VideoCapture(int index)
open(index);
}
VideoCapture::VideoCapture(int index, int apiPreference)
{
CV_TRACE_FUNCTION();
open(index, apiPreference);
}
VideoCapture::~VideoCapture()
{
CV_TRACE_FUNCTION();
......@@ -127,6 +133,17 @@ bool VideoCapture::open(int cameraNum, int apiPreference)
if (isOpened()) release();
if (apiPreference == CAP_ANY)
{
// interpret preferred interface (0 = autodetect)
int backendID = (cameraNum / 100) * 100;
if (backendID)
{
cameraNum %= 100;
apiPreference = backendID;
}
}
const std::vector<VideoBackendInfo> backends = cv::videoio_registry::getAvailableBackends_CaptureByIndex();
for (size_t i = 0; i < backends.size(); i++)
{
......@@ -156,14 +173,7 @@ bool VideoCapture::open(int index)
{
CV_TRACE_FUNCTION();
// interpret preferred interface (0 = autodetect)
int backendID = (index / 100) * 100;
if (backendID)
{
index %= 100;
}
return open(index, backendID);
return open(index, CAP_ANY);
}
bool VideoCapture::isOpened() const
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment