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 bool isOpened() const CV_OVERRIDE { return isOpen; }
|
||||||
virtual int getCaptureDomain() CV_OVERRIDE { return CV_CAP_MSMF; }
|
virtual int getCaptureDomain() CV_OVERRIDE { return CV_CAP_MSMF; }
|
||||||
protected:
|
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 setTime(double time, bool rough);
|
||||||
bool configureHW(bool enable);
|
bool configureHW(bool enable);
|
||||||
|
|
||||||
@ -766,7 +766,7 @@ bool CvCapture_MSMF::configureHW(bool enable)
|
|||||||
#endif
|
#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;
|
FormatStorage formats;
|
||||||
formats.read(videoFileSource.Get());
|
formats.read(videoFileSource.Get());
|
||||||
@ -774,7 +774,7 @@ bool CvCapture_MSMF::configureOutput(MediaType newType, cv::uint32_t outFormat,
|
|||||||
dwStreamIndex = bestMatch.first.stream;
|
dwStreamIndex = bestMatch.first.stream;
|
||||||
nativeFormat = bestMatch.second;
|
nativeFormat = bestMatch.second;
|
||||||
MediaType newFormat = nativeFormat;
|
MediaType newFormat = nativeFormat;
|
||||||
if (convertToFormat)
|
if (convertFormat)
|
||||||
{
|
{
|
||||||
switch (outFormat)
|
switch (outFormat)
|
||||||
{
|
{
|
||||||
@ -834,7 +834,7 @@ bool CvCapture_MSMF::open(int index)
|
|||||||
camid = index;
|
camid = index;
|
||||||
readCallback = cb;
|
readCallback = cb;
|
||||||
duration = 0;
|
duration = 0;
|
||||||
if (configureOutput(MediaType::createDefault(), outputFormat, convertFormat))
|
if (configureOutput(MediaType::createDefault(), outputFormat))
|
||||||
{
|
{
|
||||||
frameStep = captureFormat.getFrameStep();
|
frameStep = captureFormat.getFrameStep();
|
||||||
}
|
}
|
||||||
@ -855,7 +855,7 @@ bool CvCapture_MSMF::open(const cv::String& _filename)
|
|||||||
{
|
{
|
||||||
isOpen = true;
|
isOpen = true;
|
||||||
sampleTime = 0;
|
sampleTime = 0;
|
||||||
if (configureOutput(MediaType(), outputFormat, convertFormat))
|
if (configureOutput(MediaType(), outputFormat))
|
||||||
{
|
{
|
||||||
frameStep = captureFormat.getFrameStep();
|
frameStep = captureFormat.getFrameStep();
|
||||||
filename = _filename;
|
filename = _filename;
|
||||||
@ -1298,42 +1298,43 @@ bool CvCapture_MSMF::setProperty( int property_id, double value )
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
case CV_CAP_PROP_FORMAT:
|
case CV_CAP_PROP_FORMAT:
|
||||||
return configureOutput(newFormat, (int)cvRound(value), convertFormat);
|
return configureOutput(newFormat, (int)cvRound(value));
|
||||||
case CV_CAP_PROP_CONVERT_RGB:
|
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:
|
case CV_CAP_PROP_SAR_NUM:
|
||||||
if (value > 0)
|
if (value > 0)
|
||||||
{
|
{
|
||||||
newFormat.aspectRatioNum = (UINT32)cvRound(value);
|
newFormat.aspectRatioNum = (UINT32)cvRound(value);
|
||||||
return configureOutput(newFormat, outputFormat, convertFormat);
|
return configureOutput(newFormat, outputFormat);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case CV_CAP_PROP_SAR_DEN:
|
case CV_CAP_PROP_SAR_DEN:
|
||||||
if (value > 0)
|
if (value > 0)
|
||||||
{
|
{
|
||||||
newFormat.aspectRatioDenom = (UINT32)cvRound(value);
|
newFormat.aspectRatioDenom = (UINT32)cvRound(value);
|
||||||
return configureOutput(newFormat, outputFormat, convertFormat);
|
return configureOutput(newFormat, outputFormat);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case CV_CAP_PROP_FRAME_WIDTH:
|
case CV_CAP_PROP_FRAME_WIDTH:
|
||||||
if (value >= 0)
|
if (value >= 0)
|
||||||
{
|
{
|
||||||
newFormat.width = (UINT32)cvRound(value);
|
newFormat.width = (UINT32)cvRound(value);
|
||||||
return configureOutput(newFormat, outputFormat, convertFormat);
|
return configureOutput(newFormat, outputFormat);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case CV_CAP_PROP_FRAME_HEIGHT:
|
case CV_CAP_PROP_FRAME_HEIGHT:
|
||||||
if (value >= 0)
|
if (value >= 0)
|
||||||
{
|
{
|
||||||
newFormat.height = (UINT32)cvRound(value);
|
newFormat.height = (UINT32)cvRound(value);
|
||||||
return configureOutput(newFormat, outputFormat, convertFormat);
|
return configureOutput(newFormat, outputFormat);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case CV_CAP_PROP_FPS:
|
case CV_CAP_PROP_FPS:
|
||||||
if (value >= 0)
|
if (value >= 0)
|
||||||
{
|
{
|
||||||
newFormat.setFramerate(value);
|
newFormat.setFramerate(value);
|
||||||
return configureOutput(newFormat, outputFormat, convertFormat);
|
return configureOutput(newFormat, outputFormat);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case CV_CAP_PROP_FOURCC:
|
case CV_CAP_PROP_FOURCC:
|
||||||
|
Loading…
Reference in New Issue
Block a user