From 9973081f707a7b27633a7fcd57319d8b27aa1b9e Mon Sep 17 00:00:00 2001 From: Nikolay Sivov Date: Mon, 19 Apr 2021 16:03:07 +0300 Subject: [PATCH] evr/presenter: Set sample size attributes when configuring mixer output. Signed-off-by: Nikolay Sivov Signed-off-by: Alexandre Julliard --- dlls/evr/presenter.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/dlls/evr/presenter.c b/dlls/evr/presenter.c index 42c4c81d9d3..c86dccc7b44 100644 --- a/dlls/evr/presenter.c +++ b/dlls/evr/presenter.c @@ -312,6 +312,9 @@ static HRESULT video_presenter_set_media_type(struct video_presenter *presenter, static HRESULT video_presenter_configure_output_type(struct video_presenter *presenter, const MFVideoArea *aperture, IMFMediaType *media_type) { + unsigned int size; + GUID subtype; + LONG stride; HRESULT hr; hr = IMFMediaType_SetUINT64(media_type, &MF_MT_FRAME_SIZE, (UINT64)aperture->Area.cx << 32 | aperture->Area.cy); @@ -320,6 +323,20 @@ static HRESULT video_presenter_configure_output_type(struct video_presenter *pre if (SUCCEEDED(hr)) hr = IMFMediaType_SetBlob(media_type, &MF_MT_MINIMUM_DISPLAY_APERTURE, (UINT8 *)aperture, sizeof(*aperture)); + if (SUCCEEDED(hr)) + hr = IMFMediaType_GetGUID(media_type, &MF_MT_SUBTYPE, &subtype); + + if (SUCCEEDED(hr)) + { + hr = MFGetStrideForBitmapInfoHeader(subtype.Data1, aperture->Area.cx, &stride); + if (SUCCEEDED(hr)) + hr = MFGetPlaneSize(subtype.Data1, aperture->Area.cx, aperture->Area.cy, &size); + if (SUCCEEDED(hr)) + hr = IMFMediaType_SetUINT32(media_type, &MF_MT_DEFAULT_STRIDE, stride); + if (SUCCEEDED(hr)) + hr = IMFMediaType_SetUINT32(media_type, &MF_MT_SAMPLE_SIZE, stride); + } + return hr; }