@@ -363,6 +363,18 @@ HRESULT MFGrabber::init_device(QString deviceName, DeviceProperties props)
363363 _height = props.height ;
364364 _frameByteSize = _width * _height * 3 ;
365365 _lineLength = _width * 3 ;
366+ // adjust flipMode for bottom-up images
367+ if (props.defstride < 0 )
368+ {
369+ if (_flipMode == FlipMode::NO_CHANGE)
370+ _flipMode = FlipMode::HORIZONTAL;
371+ else if (_flipMode == FlipMode::HORIZONTAL)
372+ _flipMode = FlipMode::NO_CHANGE;
373+ else if (_flipMode == FlipMode::VERTICAL)
374+ _flipMode = FlipMode::BOTH;
375+ else if (_flipMode == FlipMode::BOTH)
376+ _flipMode = FlipMode::VERTICAL;
377+ }
366378 }
367379
368380 // Cleanup
@@ -436,6 +448,14 @@ void MFGrabber::enumVideoCaptureDevices()
436448 properties.denominator = denominator;
437449 properties.pf = pixelformat;
438450 properties.guid = format;
451+
452+ HRESULT hr = pType->GetUINT32 (MF_MT_DEFAULT_STRIDE, (UINT32*)&properties.defstride );
453+ if (FAILED (hr))
454+ {
455+ hr = MFGetStrideForBitmapInfoHeader (format.Data1 , width, &properties.defstride );
456+ if (FAILED (hr))
457+ DebugIf (verbose, _log, " failed to get default stride" );
458+ }
439459 devicePropertyList.append (properties);
440460
441461 DebugIf (verbose, _log, " %s %d x %d @ %d fps (%s)" , QSTRING_CSTR (dev), properties.width , properties.height , properties.fps , QSTRING_CSTR (pixelFormatToString (properties.pf )));
@@ -797,7 +817,7 @@ QJsonArray MFGrabber::discover(const QJsonObject& params)
797817 resolution_default[" width" ] = 640 ;
798818 resolution_default[" height" ] = 480 ;
799819 resolution_default[" fps" ] = 25 ;
800- format_default[" format" ] = " bgr24 " ;
820+ format_default[" format" ] = " rgb24 " ;
801821 format_default[" resolution" ] = resolution_default;
802822 video_inputs_default[" inputIdx" ] = 0 ;
803823 video_inputs_default[" standards" ] = " PAL" ;
0 commit comments