[PATCH v4 4/5] winegstreamer: Release requested samples if they are too small.

Rémi Bernon wine at gitlab.winehq.org
Thu Jun 30 03:04:29 CDT 2022


From: Rémi Bernon <rbernon at codeweavers.com>

Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
---
 dlls/winegstreamer/wg_allocator.c | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/dlls/winegstreamer/wg_allocator.c b/dlls/winegstreamer/wg_allocator.c
index 53ea5d08c8e..46343db8aae 100644
--- a/dlls/winegstreamer/wg_allocator.c
+++ b/dlls/winegstreamer/wg_allocator.c
@@ -80,9 +80,6 @@ static struct wg_sample *default_request_sample(gsize size, void *context)
         return NULL;
     allocator->next_sample = NULL;
 
-    if (sample->max_size < size)
-        return NULL;
-
     return sample;
 }
 
@@ -165,6 +162,7 @@ static GstMemory *wg_allocator_alloc(GstAllocator *gst_allocator, gsize size,
         GstAllocationParams *params)
 {
     WgAllocator *allocator = (WgAllocator *)gst_allocator;
+    struct wg_sample *sample;
     WgMemory *memory;
 
     GST_LOG("allocator %p, size %#zx, params %p", allocator, size, params);
@@ -177,7 +175,12 @@ static GstMemory *wg_allocator_alloc(GstAllocator *gst_allocator, gsize size,
 
     GST_OBJECT_LOCK(allocator);
 
-    memory->sample = allocator->request_sample(size, allocator->request_sample_context);
+    sample = allocator->request_sample(size, allocator->request_sample_context);
+    if (sample->max_size < size)
+        InterlockedDecrement(&sample->refcount);
+    else
+        memory->sample = sample;
+
     list_add_tail(&allocator->memory_list, &memory->entry);
 
     GST_OBJECT_UNLOCK(allocator);
-- 
GitLab


https://gitlab.winehq.org/wine/wine/-/merge_requests/302



More information about the wine-devel mailing list