wine-staging/patches/mfplat-reverts/0005-Revert-winegstreamer-Properly-clean-up-from-failure-.patch
Alistair Leslie-Hughes fc40539f6d Re-enable mfplat-streaming-support
We had reverted the current upstream winegreamer commits to allow
mfplat-streaming-support to be used within staging.  Hopefully the
patchset in question will be upstream shortly.
2021-09-19 13:13:18 +10:00

141 lines
4.5 KiB
Diff

From e648d762c2609321822334a9a8db8a2f5905b51d Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Sun, 19 Sep 2021 13:08:04 +1000
Subject: [PATCH 5/6] Revert "winegstreamer: Properly clean up from failure in
wg_parser_connect()."
This reverts commit 721b1eb2ebe5c3eaab8ac3fb1e4f4648cbee5b4d.
---
dlls/winegstreamer/wg_parser.c | 76 ++++++++++------------------------
1 file changed, 23 insertions(+), 53 deletions(-)
diff --git a/dlls/winegstreamer/wg_parser.c b/dlls/winegstreamer/wg_parser.c
index 119cbffbd88..bf5a51aeaf4 100644
--- a/dlls/winegstreamer/wg_parser.c
+++ b/dlls/winegstreamer/wg_parser.c
@@ -1034,30 +1034,6 @@ static struct wg_parser_stream *create_stream(struct wg_parser *parser)
return stream;
}
-static void free_stream(struct wg_parser_stream *stream)
-{
- if (stream->their_src)
- {
- if (stream->post_sink)
- {
- gst_pad_unlink(stream->their_src, stream->post_sink);
- gst_pad_unlink(stream->post_src, stream->my_sink);
- gst_object_unref(stream->post_src);
- gst_object_unref(stream->post_sink);
- stream->post_src = stream->post_sink = NULL;
- }
- else
- gst_pad_unlink(stream->their_src, stream->my_sink);
- gst_object_unref(stream->their_src);
- }
- gst_object_unref(stream->my_sink);
-
- pthread_cond_destroy(&stream->event_cond);
- pthread_cond_destroy(&stream->event_empty_cond);
-
- free(stream);
-}
-
static void pad_added_cb(GstElement *element, GstPad *pad, gpointer user)
{
struct wg_parser *parser = user;
@@ -1544,14 +1520,14 @@ static HRESULT CDECL wg_parser_connect(struct wg_parser *parser, uint64_t file_s
parser->error = false;
if (!parser->init_gst(parser))
- goto out;
+ return E_FAIL;
gst_element_set_state(parser->container, GST_STATE_PAUSED);
ret = gst_element_get_state(parser->container, NULL, NULL, -1);
if (ret == GST_STATE_CHANGE_FAILURE)
{
GST_ERROR("Failed to play stream.\n");
- goto out;
+ return E_FAIL;
}
pthread_mutex_lock(&parser->mutex);
@@ -1561,7 +1537,7 @@ static HRESULT CDECL wg_parser_connect(struct wg_parser *parser, uint64_t file_s
if (parser->error)
{
pthread_mutex_unlock(&parser->mutex);
- goto out;
+ return E_FAIL;
}
for (i = 0; i < parser->stream_count; ++i)
@@ -1601,7 +1577,7 @@ static HRESULT CDECL wg_parser_connect(struct wg_parser *parser, uint64_t file_s
if (parser->error)
{
pthread_mutex_unlock(&parser->mutex);
- goto out;
+ return E_FAIL;
}
if (gst_pad_query_duration(stream->their_src, GST_FORMAT_TIME, &duration))
{
@@ -1638,36 +1614,30 @@ static HRESULT CDECL wg_parser_connect(struct wg_parser *parser, uint64_t file_s
parser->next_offset = 0;
return S_OK;
+}
-out:
- if (parser->container)
- gst_element_set_state(parser->container, GST_STATE_NULL);
- if (parser->their_sink)
- {
- gst_pad_unlink(parser->my_src, parser->their_sink);
- gst_object_unref(parser->their_sink);
- parser->my_src = parser->their_sink = NULL;
- }
-
- for (i = 0; i < parser->stream_count; ++i)
- free_stream(parser->streams[i]);
- parser->stream_count = 0;
- free(parser->streams);
- parser->streams = NULL;
-
- if (parser->container)
+static void free_stream(struct wg_parser_stream *stream)
+{
+ if (stream->their_src)
{
- gst_element_set_bus(parser->container, NULL);
- gst_object_unref(parser->container);
- parser->container = NULL;
+ if (stream->post_sink)
+ {
+ gst_pad_unlink(stream->their_src, stream->post_sink);
+ gst_pad_unlink(stream->post_src, stream->my_sink);
+ gst_object_unref(stream->post_src);
+ gst_object_unref(stream->post_sink);
+ stream->post_src = stream->post_sink = NULL;
+ }
+ else
+ gst_pad_unlink(stream->their_src, stream->my_sink);
+ gst_object_unref(stream->their_src);
}
+ gst_object_unref(stream->my_sink);
- pthread_mutex_lock(&parser->mutex);
- parser->sink_connected = false;
- pthread_mutex_unlock(&parser->mutex);
- pthread_cond_signal(&parser->read_cond);
+ pthread_cond_destroy(&stream->event_cond);
+ pthread_cond_destroy(&stream->event_empty_cond);
- return E_FAIL;
+ free(stream);
}
static void CDECL wg_parser_disconnect(struct wg_parser *parser)
--
2.33.0