On 2/23/22 08:46, Rémi Bernon wrote:
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51931 Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52391 Signed-off-by: Rémi Bernon <rbernon(a)codeweavers.com> --- dlls/winegstreamer/wg_transform.c | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+)
What's the motivation for doing this? (And why not, say, use a queue element instead? Not that this is particularly complex, to be fair.)
diff --git a/dlls/winegstreamer/wg_transform.c b/dlls/winegstreamer/wg_transform.c index a4a4d886865..ed4f95afde3 100644 --- a/dlls/winegstreamer/wg_transform.c +++ b/dlls/winegstreamer/wg_transform.c @@ -39,23 +39,44 @@
#include "unix_private.h"
+#include "wine/list.h" + GST_DEBUG_CATEGORY_EXTERN(wine); #define GST_CAT_DEFAULT wine
+struct sample_entry +{ + struct list entry; + GstSample *sample; +}; + struct wg_transform { GstElement *container; GstPad *my_src, *my_sink; GstPad *their_sink, *their_src; GstSegment segment; + pthread_mutex_t mutex; + struct list samples; };
static GstFlowReturn transform_sink_chain_cb(GstPad *pad, GstObject *parent, GstBuffer *buffer) { struct wg_transform *transform = gst_pad_get_element_private(pad); + struct sample_entry *entry;
GST_INFO("transform %p, buffer %p.", transform, buffer);
+ if (!(entry = calloc(1, sizeof(*entry)))) + GST_ERROR("Failed to allocate sample entry"); + else + { + pthread_mutex_lock(&transform->mutex); + entry->sample = gst_sample_new(buffer, NULL, NULL, NULL); + list_add_tail(&transform->samples, &entry->entry); + pthread_mutex_unlock(&transform->mutex);
Why create a GstSample?
+ } + gst_buffer_unref(buffer);
return GST_FLOW_OK;