From: Rémi Bernon rbernon@codeweavers.com
--- dlls/mfplat/mediatype.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/dlls/mfplat/mediatype.c b/dlls/mfplat/mediatype.c index b550649022f..f90510b9054 100644 --- a/dlls/mfplat/mediatype.c +++ b/dlls/mfplat/mediatype.c @@ -3247,9 +3247,10 @@ static UINT32 media_type_get_uint32(IMFMediaType *media_type, REFGUID guid) */ HRESULT WINAPI MFCreateMFVideoFormatFromMFMediaType(IMFMediaType *media_type, MFVIDEOFORMAT **video_format, UINT32 *size) { - UINT32 palette_size = 0, user_data_size = 0; + UINT32 format_stride, palette_size = 0, user_data_size = 0; MFVIDEOFORMAT *format; INT32 stride; + BOOL is_yuv; GUID guid;
TRACE("%p, %p, %p.\n", media_type, video_format, size); @@ -3304,8 +3305,11 @@ HRESULT WINAPI MFCreateMFVideoFormatFromMFMediaType(IMFMediaType *media_type, MF IMFMediaType_GetBlob(media_type, &MF_MT_PAN_SCAN_APERTURE, (UINT8 *)&format->videoInfo.PanScanAperture, sizeof(format->videoInfo.PanScanAperture), NULL); } - stride = media_type_get_uint32(media_type, &MF_MT_DEFAULT_STRIDE); - if (stride < 0) + + stride = format_stride = mf_format_get_stride(&format->guidFormat, format->videoInfo.dwWidth, &is_yuv); + if (FAILED(IMFMediaType_GetUINT32(media_type, &MF_MT_DEFAULT_STRIDE, (UINT32 *)&stride)) && !is_yuv) + stride = -format_stride; + if (stride < 0 && !is_yuv) format->videoInfo.VideoFlags |= MFVideoFlag_BottomUpLinearRep;
format->compressedInfo.AvgBitrate = media_type_get_uint32(media_type, &MF_MT_AVG_BITRATE);