Nikolay Sivov : mfplat/buffer: Fix byte width set for d3d9 surface buffers.

Alexandre Julliard julliard at winehq.org
Fri Nov 13 15:57:52 CST 2020


Module: wine
Branch: master
Commit: ed1dd4990e7318290cad7ea2810a4f30eef83188
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=ed1dd4990e7318290cad7ea2810a4f30eef83188

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Fri Nov 13 15:34:18 2020 +0300

mfplat/buffer: Fix byte width set for d3d9 surface buffers.

Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/mfplat/buffer.c | 17 +++++++++++++----
 1 file changed, 13 insertions(+), 4 deletions(-)

diff --git a/dlls/mfplat/buffer.c b/dlls/mfplat/buffer.c
index 3d1d2abdf88..b47d2a9ba16 100644
--- a/dlls/mfplat/buffer.c
+++ b/dlls/mfplat/buffer.c
@@ -941,6 +941,18 @@ static HRESULT create_d3d9_surface_buffer(IUnknown *surface, BOOL bottom_up, IMF
 {
     struct memory_buffer *object;
     D3DSURFACE_DESC desc;
+    unsigned int stride;
+    GUID subtype;
+    BOOL is_yuv;
+
+    IDirect3DSurface9_GetDesc((IDirect3DSurface9 *)surface, &desc);
+    TRACE("format %#x, %u x %u.\n", desc.Format, desc.Width, desc.Height);
+
+    memcpy(&subtype, &MFVideoFormat_Base, sizeof(subtype));
+    subtype.Data1 = desc.Format;
+
+    if (!(stride = mf_format_get_stride(&subtype, desc.Width, &is_yuv)))
+        return MF_E_INVALIDMEDIATYPE;
 
     object = heap_alloc_zero(sizeof(*object));
     if (!object)
@@ -954,11 +966,8 @@ static HRESULT create_d3d9_surface_buffer(IUnknown *surface, BOOL bottom_up, IMF
     object->d3d9_surface.surface = (IDirect3DSurface9 *)surface;
     IUnknown_AddRef(surface);
 
-    IDirect3DSurface9_GetDesc(object->d3d9_surface.surface, &desc);
-    TRACE("format %#x, %u x %u.\n", desc.Format, desc.Width, desc.Height);
-
     MFGetPlaneSize(desc.Format, desc.Width, desc.Height, &object->_2d.plane_size);
-    object->_2d.width = desc.Width;
+    object->_2d.width = stride;
     object->_2d.height = desc.Height;
     object->max_length = object->_2d.plane_size;
 




More information about the wine-cvs mailing list