Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/winegstreamer/gstdemux.c | 99 ++++++++++++----------------------- 1 file changed, 33 insertions(+), 66 deletions(-)
diff --git a/dlls/winegstreamer/gstdemux.c b/dlls/winegstreamer/gstdemux.c index da53556eb0c..903305724a4 100644 --- a/dlls/winegstreamer/gstdemux.c +++ b/dlls/winegstreamer/gstdemux.c @@ -1452,8 +1452,29 @@ static GstBusSyncReply watch_bus(GstBus *bus, GstMessage *msg, gpointer data) return GST_BUS_DROP; }
+static LONGLONG query_duration(GstPad *pad) +{ + gint64 duration, byte_length; + + if (gst_pad_query_duration(pad, GST_FORMAT_TIME, &duration)) + return duration / 100; + + WARN("Failed to query time duration; trying to convert from byte length.\n"); + + /* To accurately get a duration for the stream, we want to only consider the + * length of that stream. Hence, query for the pad duration, instead of + * using the file duration. */ + if (gst_pad_query_duration(pad, GST_FORMAT_BYTES, &byte_length) + && gst_pad_query_convert(pad, GST_FORMAT_BYTES, byte_length, GST_FORMAT_TIME, &duration)) + return duration / 100; + + ERR("Failed to query duration.\n"); + return 0; +} + static HRESULT GST_Connect(struct parser *This, IPin *pConnectPin) { + unsigned int i; LONGLONG avail; GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE( "quartz_src", @@ -1483,28 +1504,19 @@ static HRESULT GST_Connect(struct parser *This, IPin *pConnectPin) if (!This->init_gst(This)) return E_FAIL;
- This->nextofs = This->nextpullofs = 0; - return S_OK; -} - -static LONGLONG query_duration(GstPad *pad) -{ - gint64 duration, byte_length; - - if (gst_pad_query_duration(pad, GST_FORMAT_TIME, &duration)) - return duration / 100; - - WARN("Failed to query time duration; trying to convert from byte length.\n"); + for (i = 0; i < This->source_count; ++i) + { + struct parser_source *pin = This->sources[i]; + const HANDLE events[2] = {pin->caps_event, This->error_event};
- /* To accurately get a duration for the stream, we want to only consider the - * length of that stream. Hence, query for the pad duration, instead of - * using the file duration. */ - if (gst_pad_query_duration(pad, GST_FORMAT_BYTES, &byte_length) - && gst_pad_query_convert(pad, GST_FORMAT_BYTES, byte_length, GST_FORMAT_TIME, &duration)) - return duration / 100; + pin->seek.llDuration = pin->seek.llStop = query_duration(pin->their_src); + pin->seek.llCurrent = 0; + if (WaitForMultipleObjects(2, events, FALSE, INFINITE)) + return E_FAIL; + }
- ERR("Failed to query duration.\n"); - return 0; + This->nextofs = This->nextpullofs = 0; + return S_OK; }
static inline struct parser_source *impl_from_IMediaSeeking(IMediaSeeking *iface) @@ -1714,7 +1726,6 @@ static const struct strmbase_sink_ops sink_ops = static BOOL decodebin_parser_init_gst(struct parser *filter) { GstElement *element = gst_element_factory_make("decodebin", NULL); - unsigned int i; HANDLE events[2]; int ret;
@@ -1754,18 +1765,6 @@ static BOOL decodebin_parser_init_gst(struct parser *filter) if (WaitForMultipleObjects(2, events, FALSE, INFINITE)) return FALSE;
- for (i = 0; i < filter->source_count; ++i) - { - struct parser_source *pin = filter->sources[i]; - - pin->seek.llDuration = pin->seek.llStop = query_duration(pin->their_src); - pin->seek.llCurrent = 0; - events[0] = pin->caps_event; - events[1] = filter->error_event; - if (WaitForMultipleObjects(2, events, FALSE, INFINITE)) - return FALSE; - } - return TRUE; }
@@ -2506,7 +2505,6 @@ static BOOL wave_parser_init_gst(struct parser *filter) static const WCHAR source_name[] = {'o','u','t','p','u','t',0}; struct parser_source *pin; GstElement *element; - HANDLE events[2]; int ret;
if (!(element = gst_element_factory_make("wavparse", NULL))) @@ -2544,14 +2542,6 @@ static BOOL wave_parser_init_gst(struct parser *filter) return FALSE; }
- pin->seek.llDuration = pin->seek.llStop = query_duration(pin->their_src); - pin->seek.llCurrent = 0; - - events[0] = pin->caps_event; - events[1] = filter->error_event; - if (WaitForMultipleObjects(2, events, FALSE, INFINITE)) - return FALSE; - return TRUE; }
@@ -2621,7 +2611,6 @@ static const struct strmbase_sink_ops avi_splitter_sink_ops = static BOOL avi_splitter_init_gst(struct parser *filter) { GstElement *element = gst_element_factory_make("avidemux", NULL); - unsigned int i; HANDLE events[2]; int ret;
@@ -2660,18 +2649,6 @@ static BOOL avi_splitter_init_gst(struct parser *filter) if (WaitForMultipleObjects(2, events, FALSE, INFINITE)) return FALSE;
- for (i = 0; i < filter->source_count; ++i) - { - struct parser_source *pin = filter->sources[i]; - - pin->seek.llDuration = pin->seek.llStop = query_duration(pin->their_src); - pin->seek.llCurrent = 0; - events[0] = pin->caps_event; - events[1] = filter->error_event; - if (WaitForMultipleObjects(2, events, FALSE, INFINITE)) - return FALSE; - } - return TRUE; }
@@ -2791,17 +2768,7 @@ static BOOL mpeg_splitter_init_gst(struct parser *filter) events[1] = filter->error_event; events[2] = pin->eos_event; res = WaitForMultipleObjects(3, events, FALSE, INFINITE); - if (res == 1) - return FALSE; - - pin->seek.llDuration = pin->seek.llStop = query_duration(pin->their_src); - pin->seek.llCurrent = 0; - - events[0] = pin->caps_event; - if (WaitForMultipleObjects(2, events, FALSE, INFINITE)) - return FALSE; - - return TRUE; + return (res != 1); }
static HRESULT mpeg_splitter_source_query_accept(struct parser_source *pin, const AM_MEDIA_TYPE *mt)
Instead of the segment event.
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/winegstreamer/gst_private.h | 1 + dlls/winegstreamer/gstdemux.c | 49 ++++++++++++++------------------ 2 files changed, 23 insertions(+), 27 deletions(-)
diff --git a/dlls/winegstreamer/gst_private.h b/dlls/winegstreamer/gst_private.h index 9cd3c8adff5..b6942e5ae77 100644 --- a/dlls/winegstreamer/gst_private.h +++ b/dlls/winegstreamer/gst_private.h @@ -23,6 +23,7 @@
#include <stdarg.h> #include <stdbool.h> +#include <stdint.h> #include <stdio.h> #include <gst/gst.h> #include <gst/video/video.h> diff --git a/dlls/winegstreamer/gstdemux.c b/dlls/winegstreamer/gstdemux.c index 903305724a4..d79622094f6 100644 --- a/dlls/winegstreamer/gstdemux.c +++ b/dlls/winegstreamer/gstdemux.c @@ -94,7 +94,11 @@ struct parser_event union { GstBuffer *buffer; - GstEvent *segment; + struct + { + uint64_t position, stop; + double rate; + } segment; } u; };
@@ -709,14 +713,23 @@ static gboolean event_sink(GstPad *pad, GstObject *parent, GstEvent *event) if (pin->pin.pin.peer) { struct parser_event stream_event; + const GstSegment *segment;
- stream_event.type = PARSER_EVENT_SEGMENT; - stream_event.u.segment = event; - if (queue_stream_event(pin, &stream_event) == GST_FLOW_OK) + gst_event_parse_segment(event, &segment); + + if (segment->format != GST_FORMAT_TIME) { - /* Transfer our reference to the event to the thread. */ - return TRUE; + FIXME("Unhandled format "%s".\n", gst_format_get_name(segment->format)); + break; } + + gst_segment_copy_into(segment, pin->segment); + + stream_event.type = PARSER_EVENT_SEGMENT; + stream_event.u.segment.position = segment->position / 100; + stream_event.u.segment.stop = segment->stop / 100; + stream_event.u.segment.rate = segment->rate * segment->applied_rate; + queue_stream_event(pin, &stream_event); } break;
@@ -744,15 +757,12 @@ static gboolean event_sink(GstPad *pad, GstObject *parent, GstEvent *event) { case PARSER_EVENT_NONE: case PARSER_EVENT_EOS: + case PARSER_EVENT_SEGMENT: break;
case PARSER_EVENT_BUFFER: gst_buffer_unref(pin->event.u.buffer); break; - - case PARSER_EVENT_SEGMENT: - gst_event_unref(pin->event.u.segment); - break; } pin->event.type = PARSER_EVENT_NONE;
@@ -1057,24 +1067,9 @@ static DWORD CALLBACK stream_thread(void *arg) break;
case PARSER_EVENT_SEGMENT: - { - const GstSegment *segment; - - gst_event_parse_segment(event.u.segment, &segment); - - if (segment->format != GST_FORMAT_TIME) - { - FIXME("Unhandled format "%s".\n", gst_format_get_name(segment->format)); - break; - } - - gst_segment_copy_into(segment, pin->segment); - - IPin_NewSegment(pin->pin.pin.peer, segment->position / 100, - segment->stop / 100, segment->rate * segment->applied_rate); - gst_event_unref(event.u.segment); + IPin_NewSegment(pin->pin.pin.peer, event.u.segment.position, + event.u.segment.stop, event.u.segment.rate); break; - }
case PARSER_EVENT_NONE: assert(0);
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/winegstreamer/gstdemux.c | 120 ++++++++++++++++++++++------------ 1 file changed, 79 insertions(+), 41 deletions(-)
diff --git a/dlls/winegstreamer/gstdemux.c b/dlls/winegstreamer/gstdemux.c index d79622094f6..bab9804bdbd 100644 --- a/dlls/winegstreamer/gstdemux.c +++ b/dlls/winegstreamer/gstdemux.c @@ -71,7 +71,10 @@ struct parser GstPad *my_src, *their_sink; GstBus *bus; guint64 start, nextofs, nextpullofs, stop; - HANDLE no_more_pads_event, duration_event, error_event; + + pthread_mutex_t mutex; + pthread_cond_t init_cond; + bool no_more_pads, has_duration, error;
HANDLE push_thread;
@@ -109,14 +112,13 @@ struct parser_source
GstPad *their_src, *post_sink, *post_src, *my_sink; GstElement *flip; - HANDLE caps_event, eos_event; GstSegment *segment; GstCaps *caps; SourceSeeking seek;
CRITICAL_SECTION flushing_cs; CONDITION_VARIABLE event_cv, event_empty_cv; - bool flushing; + bool flushing, eos; struct parser_event event; HANDLE thread; }; @@ -742,7 +744,12 @@ static gboolean event_sink(GstPad *pad, GstObject *parent, GstEvent *event) queue_stream_event(pin, &stream_event); } else - SetEvent(pin->eos_event); + { + pthread_mutex_lock(&filter->mutex); + pin->eos = true; + pthread_mutex_unlock(&filter->mutex); + pthread_cond_signal(&filter->init_cond); + } break;
case GST_EVENT_FLUSH_START: @@ -785,8 +792,10 @@ static gboolean event_sink(GstPad *pad, GstObject *parent, GstEvent *event) GstCaps *caps;
gst_event_parse_caps(event, &caps); + pthread_mutex_lock(&filter->mutex); gst_caps_replace(&pin->caps, caps); - SetEvent(pin->caps_event); + pthread_mutex_unlock(&filter->mutex); + pthread_cond_signal(&filter->init_cond); break; }
@@ -1390,7 +1399,11 @@ static void no_more_pads(GstElement *decodebin, gpointer user) { struct parser *filter = user; TRACE("filter %p.\n", filter); - SetEvent(filter->no_more_pads_event); + + pthread_mutex_lock(&filter->mutex); + filter->no_more_pads = true; + pthread_mutex_unlock(&filter->mutex); + pthread_cond_signal(&filter->init_cond); }
static GstAutoplugSelectResult autoplug_blacklist(GstElement *bin, GstPad *pad, GstCaps *caps, GstElementFactory *fact, gpointer user) @@ -1428,8 +1441,12 @@ static GstBusSyncReply watch_bus(GstBus *bus, GstMessage *msg, gpointer data) ERR("%s\n", dbg_info); g_error_free(err); g_free(dbg_info); - SetEvent(filter->error_event); + pthread_mutex_lock(&filter->mutex); + filter->error = true; + pthread_mutex_unlock(&filter->mutex); + pthread_cond_signal(&filter->init_cond); break; + case GST_MESSAGE_WARNING: gst_message_parse_warning(msg, &err, &dbg_info); WARN("%s: %s\n", GST_OBJECT_NAME(msg->src), err->message); @@ -1437,9 +1454,14 @@ static GstBusSyncReply watch_bus(GstBus *bus, GstMessage *msg, gpointer data) g_error_free(err); g_free(dbg_info); break; + case GST_MESSAGE_DURATION_CHANGED: - SetEvent(filter->duration_event); + pthread_mutex_lock(&filter->mutex); + filter->has_duration = true; + pthread_mutex_unlock(&filter->mutex); + pthread_cond_signal(&filter->init_cond); break; + default: break; } @@ -1499,17 +1521,25 @@ static HRESULT GST_Connect(struct parser *This, IPin *pConnectPin) if (!This->init_gst(This)) return E_FAIL;
+ pthread_mutex_lock(&This->mutex); + for (i = 0; i < This->source_count; ++i) { struct parser_source *pin = This->sources[i]; - const HANDLE events[2] = {pin->caps_event, This->error_event};
pin->seek.llDuration = pin->seek.llStop = query_duration(pin->their_src); pin->seek.llCurrent = 0; - if (WaitForMultipleObjects(2, events, FALSE, INFINITE)) + while (!pin->caps && !This->error) + pthread_cond_wait(&This->init_cond, &This->mutex); + if (This->error) + { + pthread_mutex_unlock(&This->mutex); return E_FAIL; + } }
+ pthread_mutex_unlock(&This->mutex); + This->nextofs = This->nextpullofs = 0; return S_OK; } @@ -1545,10 +1575,6 @@ static void parser_destroy(struct strmbase_filter *iface) struct parser *filter = impl_from_strmbase_filter(iface); HRESULT hr;
- CloseHandle(filter->no_more_pads_event); - CloseHandle(filter->duration_event); - CloseHandle(filter->error_event); - /* Don't need to clean up output pins, disconnecting input pin will do that */ if (filter->sink.pin.peer) { @@ -1568,6 +1594,9 @@ static void parser_destroy(struct strmbase_filter *iface) gst_object_unref(filter->bus); }
+ pthread_cond_destroy(&filter->init_cond); + pthread_mutex_destroy(&filter->mutex); + filter->cs.DebugInfo->Spare[0] = 0; DeleteCriticalSection(&filter->cs); strmbase_sink_cleanup(&filter->sink); @@ -1721,7 +1750,6 @@ static const struct strmbase_sink_ops sink_ops = static BOOL decodebin_parser_init_gst(struct parser *filter) { GstElement *element = gst_element_factory_make("decodebin", NULL); - HANDLE events[2]; int ret;
if (!element) @@ -1739,7 +1767,10 @@ static BOOL decodebin_parser_init_gst(struct parser *filter) g_signal_connect(element, "no-more-pads", G_CALLBACK(no_more_pads_wrapper), filter);
filter->their_sink = gst_element_get_static_pad(element, "sink"); - ResetEvent(filter->no_more_pads_event); + + pthread_mutex_lock(&filter->mutex); + filter->no_more_pads = filter->error = false; + pthread_mutex_unlock(&filter->mutex);
if ((ret = gst_pad_link(filter->my_src, filter->their_sink)) < 0) { @@ -1755,11 +1786,15 @@ static BOOL decodebin_parser_init_gst(struct parser *filter) return FALSE; }
- events[0] = filter->no_more_pads_event; - events[1] = filter->error_event; - if (WaitForMultipleObjects(2, events, FALSE, INFINITE)) + pthread_mutex_lock(&filter->mutex); + while (!filter->no_more_pads && !filter->error) + pthread_cond_wait(&filter->init_cond, &filter->mutex); + if (filter->error) + { + pthread_mutex_unlock(&filter->mutex); return FALSE; - + } + pthread_mutex_unlock(&filter->mutex); return TRUE; }
@@ -1855,7 +1890,8 @@ static BOOL parser_init_gstreamer(void)
static void parser_init_common(struct parser *object) { - object->error_event = CreateEventW(NULL, TRUE, FALSE, NULL); + pthread_mutex_init(&object->mutex, NULL); + pthread_cond_init(&object->init_cond, NULL); InitializeCriticalSection(&object->cs); object->cs.DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__ ": parser.cs"); object->flushing = true; @@ -1878,7 +1914,6 @@ HRESULT decodebin_parser_create(IUnknown *outer, IUnknown **out) strmbase_filter_init(&object->filter, outer, &CLSID_decodebin_parser, &filter_ops); strmbase_sink_init(&object->sink, &object->filter, wcsInputPinName, &sink_ops, NULL);
- object->no_more_pads_event = CreateEventW(NULL, FALSE, FALSE, NULL); object->init_gst = decodebin_parser_init_gst; object->source_query_accept = decodebin_parser_source_query_accept; object->source_get_media_type = decodebin_parser_source_get_media_type; @@ -2291,8 +2326,6 @@ static void free_source_pin(struct parser_source *pin) gst_object_unref(pin->their_src); } gst_object_unref(pin->my_sink); - CloseHandle(pin->caps_event); - CloseHandle(pin->eos_event); gst_segment_free(pin->segment);
pin->flushing_cs.DebugInfo->Spare[0] = 0; @@ -2326,8 +2359,6 @@ static struct parser_source *create_pin(struct parser *filter, const WCHAR *name return NULL;
strmbase_source_init(&pin->pin, &filter->filter, name, &source_ops); - pin->caps_event = CreateEventW(NULL, FALSE, FALSE, NULL); - pin->eos_event = CreateEventW(NULL, FALSE, FALSE, NULL); pin->segment = gst_segment_new(); gst_segment_init(pin->segment, GST_FORMAT_TIME); pin->IQualityControl_iface.lpVtbl = &GSTOutPin_QualityControl_Vtbl; @@ -2606,7 +2637,6 @@ static const struct strmbase_sink_ops avi_splitter_sink_ops = static BOOL avi_splitter_init_gst(struct parser *filter) { GstElement *element = gst_element_factory_make("avidemux", NULL); - HANDLE events[2]; int ret;
if (!element) @@ -2623,7 +2653,10 @@ static BOOL avi_splitter_init_gst(struct parser *filter) g_signal_connect(element, "no-more-pads", G_CALLBACK(no_more_pads_wrapper), filter);
filter->their_sink = gst_element_get_static_pad(element, "sink"); - ResetEvent(filter->no_more_pads_event); + + pthread_mutex_lock(&filter->mutex); + filter->no_more_pads = filter->error = false; + pthread_mutex_unlock(&filter->mutex);
if ((ret = gst_pad_link(filter->my_src, filter->their_sink)) < 0) { @@ -2639,11 +2672,15 @@ static BOOL avi_splitter_init_gst(struct parser *filter) return FALSE; }
- events[0] = filter->no_more_pads_event; - events[1] = filter->error_event; - if (WaitForMultipleObjects(2, events, FALSE, INFINITE)) + pthread_mutex_lock(&filter->mutex); + while (!filter->no_more_pads && !filter->error) + pthread_cond_wait(&filter->init_cond, &filter->mutex); + if (filter->error) + { + pthread_mutex_unlock(&filter->mutex); return FALSE; - + } + pthread_mutex_unlock(&filter->mutex); return TRUE; }
@@ -2686,7 +2723,6 @@ HRESULT avi_splitter_create(IUnknown *outer, IUnknown **out)
strmbase_filter_init(&object->filter, outer, &CLSID_AviSplitter, &filter_ops); strmbase_sink_init(&object->sink, &object->filter, sink_name, &avi_splitter_sink_ops, NULL); - object->no_more_pads_event = CreateEventW(NULL, FALSE, FALSE, NULL); object->init_gst = avi_splitter_init_gst; object->source_query_accept = avi_splitter_source_query_accept; object->source_get_media_type = avi_splitter_source_get_media_type; @@ -2721,8 +2757,6 @@ static BOOL mpeg_splitter_init_gst(struct parser *filter) static const WCHAR source_name[] = {'A','u','d','i','o',0}; struct parser_source *pin; GstElement *element; - HANDLE events[3]; - DWORD res; int ret;
if (!(element = gst_element_factory_make("mpegaudioparse", NULL))) @@ -2759,11 +2793,16 @@ static BOOL mpeg_splitter_init_gst(struct parser *filter) return FALSE; }
- events[0] = filter->duration_event; - events[1] = filter->error_event; - events[2] = pin->eos_event; - res = WaitForMultipleObjects(3, events, FALSE, INFINITE); - return (res != 1); + pthread_mutex_lock(&filter->mutex); + while (!filter->has_duration && !filter->error && !pin->eos) + pthread_cond_wait(&filter->init_cond, &filter->mutex); + if (filter->error) + { + pthread_mutex_unlock(&filter->mutex); + return FALSE; + } + pthread_mutex_unlock(&filter->mutex); + return TRUE; }
static HRESULT mpeg_splitter_source_query_accept(struct parser_source *pin, const AM_MEDIA_TYPE *mt) @@ -2830,7 +2869,6 @@ HRESULT mpeg_splitter_create(IUnknown *outer, IUnknown **out) strmbase_sink_init(&object->sink, &object->filter, sink_name, &mpeg_splitter_sink_ops, NULL); object->IAMStreamSelect_iface.lpVtbl = &stream_select_vtbl;
- object->duration_event = CreateEventW(NULL, FALSE, FALSE, NULL); object->init_gst = mpeg_splitter_init_gst; object->source_query_accept = mpeg_splitter_source_query_accept; object->source_get_media_type = mpeg_splitter_source_get_media_type;
They depend on a valid TEB and can't be called from non-Wine threads.
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/winegstreamer/gstdemux.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/dlls/winegstreamer/gstdemux.c b/dlls/winegstreamer/gstdemux.c index bab9804bdbd..4653536afcc 100644 --- a/dlls/winegstreamer/gstdemux.c +++ b/dlls/winegstreamer/gstdemux.c @@ -1431,14 +1431,14 @@ static GstBusSyncReply watch_bus(GstBus *bus, GstMessage *msg, gpointer data) GError *err = NULL; gchar *dbg_info = NULL;
- TRACE("filter %p, message type %s.\n", filter, GST_MESSAGE_TYPE_NAME(msg)); + GST_DEBUG("filter %p, message type %s.", filter, GST_MESSAGE_TYPE_NAME(msg));
switch (msg->type) { case GST_MESSAGE_ERROR: gst_message_parse_error(msg, &err, &dbg_info); - ERR("%s: %s\n", GST_OBJECT_NAME(msg->src), err->message); - ERR("%s\n", dbg_info); + fprintf(stderr, "winegstreamer: error: %s: %s\n", GST_OBJECT_NAME(msg->src), err->message); + fprintf(stderr, "winegstreamer: error: %s: %s\n", GST_OBJECT_NAME(msg->src), dbg_info); g_error_free(err); g_free(dbg_info); pthread_mutex_lock(&filter->mutex); @@ -1449,8 +1449,8 @@ static GstBusSyncReply watch_bus(GstBus *bus, GstMessage *msg, gpointer data)
case GST_MESSAGE_WARNING: gst_message_parse_warning(msg, &err, &dbg_info); - WARN("%s: %s\n", GST_OBJECT_NAME(msg->src), err->message); - WARN("%s\n", dbg_info); + fprintf(stderr, "winegstreamer: warning: %s: %s\n", GST_OBJECT_NAME(msg->src), err->message); + fprintf(stderr, "winegstreamer: warning: %s: %s\n", GST_OBJECT_NAME(msg->src), dbg_info); g_error_free(err); g_free(dbg_info); break;
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/winegstreamer/gst_cbs.c | 13 ------------- dlls/winegstreamer/gst_cbs.h | 2 -- dlls/winegstreamer/gstdemux.c | 8 +------- 3 files changed, 1 insertion(+), 22 deletions(-)
diff --git a/dlls/winegstreamer/gst_cbs.c b/dlls/winegstreamer/gst_cbs.c index cb07cafb7bc..b9effe73a5b 100644 --- a/dlls/winegstreamer/gst_cbs.c +++ b/dlls/winegstreamer/gst_cbs.c @@ -136,19 +136,6 @@ static void call_cb(struct cb_data *cbdata) pthread_mutex_destroy(&cbdata->lock); }
-GstBusSyncReply watch_bus_wrapper(GstBus *bus, GstMessage *msg, gpointer user) -{ - struct cb_data cbdata = { WATCH_BUS }; - - cbdata.u.watch_bus_data.bus = bus; - cbdata.u.watch_bus_data.msg = msg; - cbdata.u.watch_bus_data.user = user; - - call_cb(&cbdata); - - return cbdata.u.watch_bus_data.ret; -} - void existing_new_pad_wrapper(GstElement *bin, GstPad *pad, gpointer user) { struct cb_data cbdata = { EXISTING_NEW_PAD }; diff --git a/dlls/winegstreamer/gst_cbs.h b/dlls/winegstreamer/gst_cbs.h index 9bb3572c5db..0e262c12db8 100644 --- a/dlls/winegstreamer/gst_cbs.h +++ b/dlls/winegstreamer/gst_cbs.h @@ -30,7 +30,6 @@ typedef enum { } GstAutoplugSelectResult;
enum CB_TYPE { - WATCH_BUS, EXISTING_NEW_PAD, QUERY_FUNCTION, ACTIVATE_MODE, @@ -133,7 +132,6 @@ void mark_wine_thread(void) DECLSPEC_HIDDEN; void perform_cb_gstdemux(struct cb_data *data) DECLSPEC_HIDDEN; void perform_cb_media_source(struct cb_data *data) DECLSPEC_HIDDEN;
-GstBusSyncReply watch_bus_wrapper(GstBus *bus, GstMessage *msg, gpointer user) DECLSPEC_HIDDEN; void existing_new_pad_wrapper(GstElement *bin, GstPad *pad, gpointer user) DECLSPEC_HIDDEN; gboolean query_function_wrapper(GstPad *pad, GstObject *parent, GstQuery *query) DECLSPEC_HIDDEN; gboolean activate_mode_wrapper(GstPad *pad, GstObject *parent, GstPadMode mode, gboolean activate) DECLSPEC_HIDDEN; diff --git a/dlls/winegstreamer/gstdemux.c b/dlls/winegstreamer/gstdemux.c index 4653536afcc..e85e54c2e34 100644 --- a/dlls/winegstreamer/gstdemux.c +++ b/dlls/winegstreamer/gstdemux.c @@ -1503,7 +1503,7 @@ static HRESULT GST_Connect(struct parser *This, IPin *pConnectPin)
if (!This->bus) { This->bus = gst_bus_new(); - gst_bus_set_sync_handler(This->bus, watch_bus_wrapper, This, NULL); + gst_bus_set_sync_handler(This->bus, watch_bus, This, NULL); }
This->container = gst_bin_new(NULL); @@ -2424,12 +2424,6 @@ void perform_cb_gstdemux(struct cb_data *cbdata) { switch(cbdata->type) { - case WATCH_BUS: - { - struct watch_bus_data *data = &cbdata->u.watch_bus_data; - cbdata->u.watch_bus_data.ret = watch_bus(data->bus, data->msg, data->user); - break; - } case EXISTING_NEW_PAD: { struct pad_added_data *data = &cbdata->u.pad_added_data;