Merge pull request #26601 from dai-xin:4.x

VideoCapture open camera slow
This commit is contained in:
Alexander Smorkalov 2025-01-22 20:48:29 +03:00 committed by GitHub
commit 4a4031dc48
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 15 additions and 5 deletions

View File

@ -3360,7 +3360,7 @@ namespace cv
{ {
videoInput VideoCapture_DShow::g_VI; videoInput VideoCapture_DShow::g_VI;
VideoCapture_DShow::VideoCapture_DShow(int index) VideoCapture_DShow::VideoCapture_DShow(int index, const VideoCaptureParameters& params)
: m_index(-1) : m_index(-1)
, m_width(-1) , m_width(-1)
, m_height(-1) , m_height(-1)
@ -3370,6 +3370,16 @@ VideoCapture_DShow::VideoCapture_DShow(int index)
, m_convertRGBSet(true) , m_convertRGBSet(true)
{ {
CoInitialize(0); CoInitialize(0);
if (!params.empty()) {
int tmpW = params.get<int>(CV_CAP_PROP_FRAME_WIDTH, -1);
int tmpH = params.get<int>(CV_CAP_PROP_FRAME_HEIGHT, -1);
int tmpFOURCC = params.get<int>(CV_CAP_PROP_FOURCC, -1);
if (tmpW != -1 && tmpH != -1) {
g_VI.setupDeviceFourcc(index, tmpW, tmpH, tmpFOURCC);
}
}
open(index); open(index);
} }
VideoCapture_DShow::~VideoCapture_DShow() VideoCapture_DShow::~VideoCapture_DShow()
@ -3675,9 +3685,9 @@ void VideoCapture_DShow::close()
m_convertRGBSet = true; m_convertRGBSet = true;
} }
Ptr<IVideoCapture> create_DShow_capture(int index) Ptr<IVideoCapture> create_DShow_capture(int index, const VideoCaptureParameters& params)
{ {
return makePtr<VideoCapture_DShow>(index); return makePtr<VideoCapture_DShow>(index, params);
} }

View File

@ -21,7 +21,7 @@ namespace cv
class VideoCapture_DShow : public IVideoCapture class VideoCapture_DShow : public IVideoCapture
{ {
public: public:
VideoCapture_DShow(int index); VideoCapture_DShow(int index, const VideoCaptureParameters& params);
virtual ~VideoCapture_DShow(); virtual ~VideoCapture_DShow();
virtual double getProperty(int propIdx) const CV_OVERRIDE; virtual double getProperty(int propIdx) const CV_OVERRIDE;

View File

@ -358,7 +358,7 @@ Ptr<IVideoWriter> cvCreateVideoWriter_MSMF(const std::string& filename, int four
double fps, const Size& frameSize, double fps, const Size& frameSize,
const VideoWriterParameters& params); const VideoWriterParameters& params);
Ptr<IVideoCapture> create_DShow_capture(int index); Ptr<IVideoCapture> create_DShow_capture(int index, const VideoCaptureParameters& params);
Ptr<IVideoCapture> create_V4L_capture_cam(int index); Ptr<IVideoCapture> create_V4L_capture_cam(int index);
Ptr<IVideoCapture> create_V4L_capture_file(const std::string &filename); Ptr<IVideoCapture> create_V4L_capture_file(const std::string &filename);