mirror of
https://github.com/opencv/opencv.git
synced 2025-01-19 06:53:50 +08:00
videoio: fixed conversion in MSMF backend
This commit is contained in:
parent
396f43d674
commit
433c5199fd
@ -579,7 +579,7 @@ public:
|
||||
virtual bool isOpened() const CV_OVERRIDE { return isOpen; }
|
||||
virtual int getCaptureDomain() CV_OVERRIDE { return CV_CAP_MSMF; }
|
||||
protected:
|
||||
bool configureOutput(MediaType newType, cv::uint32_t outFormat, bool convertToFormat);
|
||||
bool configureOutput(MediaType newType, cv::uint32_t outFormat);
|
||||
bool setTime(double time, bool rough);
|
||||
bool configureHW(bool enable);
|
||||
|
||||
@ -766,7 +766,7 @@ bool CvCapture_MSMF::configureHW(bool enable)
|
||||
#endif
|
||||
}
|
||||
|
||||
bool CvCapture_MSMF::configureOutput(MediaType newType, cv::uint32_t outFormat, bool convertToFormat)
|
||||
bool CvCapture_MSMF::configureOutput(MediaType newType, cv::uint32_t outFormat)
|
||||
{
|
||||
FormatStorage formats;
|
||||
formats.read(videoFileSource.Get());
|
||||
@ -774,7 +774,7 @@ bool CvCapture_MSMF::configureOutput(MediaType newType, cv::uint32_t outFormat,
|
||||
dwStreamIndex = bestMatch.first.stream;
|
||||
nativeFormat = bestMatch.second;
|
||||
MediaType newFormat = nativeFormat;
|
||||
if (convertToFormat)
|
||||
if (convertFormat)
|
||||
{
|
||||
switch (outFormat)
|
||||
{
|
||||
@ -834,7 +834,7 @@ bool CvCapture_MSMF::open(int index)
|
||||
camid = index;
|
||||
readCallback = cb;
|
||||
duration = 0;
|
||||
if (configureOutput(MediaType::createDefault(), outputFormat, convertFormat))
|
||||
if (configureOutput(MediaType::createDefault(), outputFormat))
|
||||
{
|
||||
frameStep = captureFormat.getFrameStep();
|
||||
}
|
||||
@ -855,7 +855,7 @@ bool CvCapture_MSMF::open(const cv::String& _filename)
|
||||
{
|
||||
isOpen = true;
|
||||
sampleTime = 0;
|
||||
if (configureOutput(MediaType(), outputFormat, convertFormat))
|
||||
if (configureOutput(MediaType(), outputFormat))
|
||||
{
|
||||
frameStep = captureFormat.getFrameStep();
|
||||
filename = _filename;
|
||||
@ -1298,42 +1298,43 @@ bool CvCapture_MSMF::setProperty( int property_id, double value )
|
||||
return false;
|
||||
}
|
||||
case CV_CAP_PROP_FORMAT:
|
||||
return configureOutput(newFormat, (int)cvRound(value), convertFormat);
|
||||
return configureOutput(newFormat, (int)cvRound(value));
|
||||
case CV_CAP_PROP_CONVERT_RGB:
|
||||
return configureOutput(newFormat, outputFormat, value != 0);
|
||||
convertFormat = (value != 0);
|
||||
return configureOutput(newFormat, outputFormat);
|
||||
case CV_CAP_PROP_SAR_NUM:
|
||||
if (value > 0)
|
||||
{
|
||||
newFormat.aspectRatioNum = (UINT32)cvRound(value);
|
||||
return configureOutput(newFormat, outputFormat, convertFormat);
|
||||
return configureOutput(newFormat, outputFormat);
|
||||
}
|
||||
break;
|
||||
case CV_CAP_PROP_SAR_DEN:
|
||||
if (value > 0)
|
||||
{
|
||||
newFormat.aspectRatioDenom = (UINT32)cvRound(value);
|
||||
return configureOutput(newFormat, outputFormat, convertFormat);
|
||||
return configureOutput(newFormat, outputFormat);
|
||||
}
|
||||
break;
|
||||
case CV_CAP_PROP_FRAME_WIDTH:
|
||||
if (value >= 0)
|
||||
{
|
||||
newFormat.width = (UINT32)cvRound(value);
|
||||
return configureOutput(newFormat, outputFormat, convertFormat);
|
||||
return configureOutput(newFormat, outputFormat);
|
||||
}
|
||||
break;
|
||||
case CV_CAP_PROP_FRAME_HEIGHT:
|
||||
if (value >= 0)
|
||||
{
|
||||
newFormat.height = (UINT32)cvRound(value);
|
||||
return configureOutput(newFormat, outputFormat, convertFormat);
|
||||
return configureOutput(newFormat, outputFormat);
|
||||
}
|
||||
break;
|
||||
case CV_CAP_PROP_FPS:
|
||||
if (value >= 0)
|
||||
{
|
||||
newFormat.setFramerate(value);
|
||||
return configureOutput(newFormat, outputFormat, convertFormat);
|
||||
return configureOutput(newFormat, outputFormat);
|
||||
}
|
||||
break;
|
||||
case CV_CAP_PROP_FOURCC:
|
||||
|
Loading…
Reference in New Issue
Block a user