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@codeweavers.com --- dlls/winegstreamer/wg_transform.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+)
diff --git a/dlls/winegstreamer/wg_transform.c b/dlls/winegstreamer/wg_transform.c index e4545774428..c52650b80d9 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,12 @@ NTSTATUS wg_transform_destroy(void *args) { struct wg_transform *transform = args;
+ if (transform->container) + gst_element_set_state(transform->container, GST_STATE_NULL); + + if (transform->container) + g_object_unref(transform->container); + if (transform->my_sink) g_object_unref(transform->my_sink); if (transform->my_src) @@ -80,6 +87,7 @@ NTSTATUS wg_transform_create(void *args) GstPadTemplate *template = NULL; struct wg_transform *transform; NTSTATUS status; + int ret;
if (!init_gstreamer()) return STATUS_UNSUCCESSFUL; @@ -94,6 +102,9 @@ NTSTATUS wg_transform_create(void *args) if (!(sink_caps = wg_format_to_caps(&output_format))) goto done;
+ if (!(transform->container = gst_bin_new("wg_transform"))) + goto done; + if (!(template = gst_pad_template_new("src", GST_PAD_SRC, GST_PAD_ALWAYS, src_caps))) goto done; if (!(transform->my_src = gst_pad_new_from_template(template, "src"))) @@ -111,6 +122,13 @@ 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);
+ status = STATUS_UNSUCCESSFUL; + + gst_element_set_state(transform->container, GST_STATE_PAUSED); + ret = gst_element_get_state(transform->container, NULL, NULL, -1); + if (ret == GST_STATE_CHANGE_FAILURE) + goto done; + status = STATUS_SUCCESS;
done: