diff --git a/modules/videoio/src/cap_dshow.cpp b/modules/videoio/src/cap_dshow.cpp index d46bb08a0d..c383e478de 100644 --- a/modules/videoio/src/cap_dshow.cpp +++ b/modules/videoio/src/cap_dshow.cpp @@ -3360,7 +3360,7 @@ namespace cv { videoInput VideoCapture_DShow::g_VI; -VideoCapture_DShow::VideoCapture_DShow(int index) +VideoCapture_DShow::VideoCapture_DShow(int index, const VideoCaptureParameters& params) : m_index(-1) , m_width(-1) , m_height(-1) @@ -3370,6 +3370,16 @@ VideoCapture_DShow::VideoCapture_DShow(int index) , m_convertRGBSet(true) { CoInitialize(0); + + if (!params.empty()) { + int tmpW = params.get(CV_CAP_PROP_FRAME_WIDTH, -1); + int tmpH = params.get(CV_CAP_PROP_FRAME_HEIGHT, -1); + int tmpFOURCC = params.get(CV_CAP_PROP_FOURCC, -1); + if (tmpW != -1 && tmpH != -1) { + g_VI.setupDeviceFourcc(index, tmpW, tmpH, tmpFOURCC); + } + } + open(index); } VideoCapture_DShow::~VideoCapture_DShow() @@ -3675,9 +3685,9 @@ void VideoCapture_DShow::close() m_convertRGBSet = true; } -Ptr create_DShow_capture(int index) +Ptr create_DShow_capture(int index, const VideoCaptureParameters& params) { - return makePtr(index); + return makePtr(index, params); } diff --git a/modules/videoio/src/cap_dshow.hpp b/modules/videoio/src/cap_dshow.hpp index 9a3b9da3bd..732ba81d8d 100644 --- a/modules/videoio/src/cap_dshow.hpp +++ b/modules/videoio/src/cap_dshow.hpp @@ -21,7 +21,7 @@ namespace cv class VideoCapture_DShow : public IVideoCapture { public: - VideoCapture_DShow(int index); + VideoCapture_DShow(int index, const VideoCaptureParameters& params); virtual ~VideoCapture_DShow(); virtual double getProperty(int propIdx) const CV_OVERRIDE; diff --git a/modules/videoio/src/cap_interface.hpp b/modules/videoio/src/cap_interface.hpp index 65427e2ab0..a1924f5682 100644 --- a/modules/videoio/src/cap_interface.hpp +++ b/modules/videoio/src/cap_interface.hpp @@ -358,7 +358,7 @@ Ptr cvCreateVideoWriter_MSMF(const std::string& filename, int four double fps, const Size& frameSize, const VideoWriterParameters& params); -Ptr create_DShow_capture(int index); +Ptr create_DShow_capture(int index, const VideoCaptureParameters& params); Ptr create_V4L_capture_cam(int index); Ptr create_V4L_capture_file(const std::string &filename);