[PATCH 2/4] evr/presenter: Set sample size attributes when configuring mixer output.

Nikolay Sivov nsivov at codeweavers.com
Mon Apr 19 08:03:07 CDT 2021


Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
 dlls/evr/presenter.c | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/dlls/evr/presenter.c b/dlls/evr/presenter.c
index 29317fb87b4..1cf2ef1ad56 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;
 }
 
-- 
2.30.2




More information about the wine-devel mailing list