[PATCH v2 3/5] winegstreamer: Add a bin container element to wg_transform.
Rémi Bernon
rbernon at codeweavers.com
Tue Feb 22 02:36:09 CST 2022
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 at codeweavers.com>
---
dlls/winegstreamer/wg_transform.c | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/dlls/winegstreamer/wg_transform.c b/dlls/winegstreamer/wg_transform.c
index 81badd0be67..ca4a5de9fa7 100644
--- a/dlls/winegstreamer/wg_transform.c
+++ b/dlls/winegstreamer/wg_transform.c
@@ -44,6 +44,7 @@ GST_DEBUG_CATEGORY_EXTERN(wine);
struct wg_transform
{
+ GstElement *container;
GstPad *my_src, *my_sink;
};
@@ -62,6 +63,8 @@ NTSTATUS wg_transform_destroy(void *args)
{
struct wg_transform *transform = args;
+ gst_element_set_state(transform->container, GST_STATE_NULL);
+ g_object_unref(transform->container);
g_object_unref(transform->my_sink);
g_object_unref(transform->my_src);
free(transform);
@@ -84,6 +87,8 @@ NTSTATUS wg_transform_create(void *args)
if (!(transform = calloc(1, sizeof(*transform))))
goto done;
+ if (!(transform->container = gst_bin_new("wg_transform")))
+ goto done;
if (!(src_caps = wg_format_to_caps(&input_format)))
goto done;
@@ -107,6 +112,10 @@ NTSTATUS wg_transform_create(void *args)
gst_pad_set_element_private(transform->my_sink, transform);
gst_pad_set_chain_function(transform->my_sink, transform_sink_chain_cb);
+ gst_element_set_state(transform->container, GST_STATE_PAUSED);
+ if (!gst_element_get_state(transform->container, NULL, NULL, -1))
+ goto done;
+
status = STATUS_SUCCESS;
done:
@@ -120,6 +129,11 @@ done:
if (status)
{
GST_ERROR("Failed to create winegstreamer transform.");
+ if (transform->container)
+ {
+ gst_element_set_state(transform->container, GST_STATE_NULL);
+ g_object_unref(transform->container);
+ }
if (transform->my_sink)
g_object_unref(transform->my_sink);
if (transform->my_src)
--
2.34.1
More information about the wine-devel
mailing list