From c134930dbed62453fa8ab5b4713db84bfc209de0 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Sebastian=20Dr=C3=B6ge?= Date: Thu, 3 Jul 2014 19:10:26 +0200 Subject: [PATCH] d3dvideosink: Always lock the D3D surfaces in write mode Locking them in readonly mode can give different stride to mapping in write mode, which then causes rendering to be broken. Happened on all (many?) NVIDIA GPUs. Thanks to voskater15@gmail.com for hinting at the problem. https://bugzilla.gnome.org/show_bug.cgi?id=712809 --- sys/d3dvideosink/d3dhelpers.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/sys/d3dvideosink/d3dhelpers.c b/sys/d3dvideosink/d3dhelpers.c index 386f607..6d22f38 100644 --- a/sys/d3dvideosink/d3dhelpers.c +++ b/sys/d3dvideosink/d3dhelpers.c @@ -365,7 +365,6 @@ gst_d3d_surface_memory_map (GstMemory * mem, gsize maxsize, GstMapFlags flags) { GstD3DSurfaceMemory *parent; gpointer ret = NULL; - gint d3d_flags = ((flags & GST_MAP_WRITE) == 0) ? D3DLOCK_READONLY : 0; /* find the real parent */ if ((parent = (GstD3DSurfaceMemory *) mem->parent) == NULL) @@ -374,7 +373,7 @@ gst_d3d_surface_memory_map (GstMemory * mem, gsize maxsize, GstMapFlags flags) g_mutex_lock (&parent->lock); if (!parent->map_count && IDirect3DSurface9_LockRect (parent->surface, &parent->lr, NULL, - d3d_flags) != D3D_OK) { + 0) != D3D_OK) { ret = NULL; goto done; } @@ -592,7 +591,7 @@ gst_d3dsurface_buffer_pool_alloc_buffer (GstBufferPool * bpool, goto fallback; } - IDirect3DSurface9_LockRect (surface, &lr, NULL, D3DLOCK_READONLY); + IDirect3DSurface9_LockRect (surface, &lr, NULL, 0); if (!lr.pBits) { GST_ERROR_OBJECT (sink, "Failed to lock D3D surface"); IDirect3DSurface9_Release (surface); -- 2.7.4