From 13ea906985a7e0f3190cdff97f1f1322bd0184ef Mon Sep 17 00:00:00 2001 From: Zebediah Figura Date: Sat, 23 Jan 2021 12:43:45 -0600 Subject: [PATCH] winegstreamer: Factor out get_stream_event(). Signed-off-by: Zebediah Figura Signed-off-by: Alexandre Julliard --- dlls/winegstreamer/gstdemux.c | 46 ++++++++++++++++++++--------------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/dlls/winegstreamer/gstdemux.c b/dlls/winegstreamer/gstdemux.c index d16a8d28dd4..ea1268ef0dd 100644 --- a/dlls/winegstreamer/gstdemux.c +++ b/dlls/winegstreamer/gstdemux.c @@ -1023,6 +1023,31 @@ static void send_buffer(struct parser_source *pin, GstBuffer *buf) gst_buffer_unref(buf); } +static bool get_stream_event(struct parser_source *pin, struct parser_event *event) +{ + struct parser *filter = impl_from_strmbase_filter(pin->pin.pin.filter); + + pthread_mutex_lock(&filter->mutex); + + while (!filter->flushing && pin->event.type == PARSER_EVENT_NONE) + pthread_cond_wait(&pin->event_cond, &filter->mutex); + + if (filter->flushing) + { + pthread_mutex_unlock(&filter->mutex); + TRACE("Filter is flushing.\n"); + return false; + } + + *event = pin->event; + pin->event.type = PARSER_EVENT_NONE; + + pthread_mutex_unlock(&filter->mutex); + pthread_cond_signal(&pin->event_empty_cond); + + return true; +} + static DWORD CALLBACK stream_thread(void *arg) { struct parser_source *pin = arg; @@ -1035,32 +1060,13 @@ static DWORD CALLBACK stream_thread(void *arg) struct parser_event event; EnterCriticalSection(&pin->flushing_cs); - pthread_mutex_lock(&filter->mutex); - while (!filter->flushing && pin->event.type == PARSER_EVENT_NONE) - pthread_cond_wait(&pin->event_cond, &filter->mutex); - - if (filter->flushing) + if (!get_stream_event(pin, &event)) { - pthread_mutex_unlock(&filter->mutex); - LeaveCriticalSection(&pin->flushing_cs); - TRACE("Filter is flushing.\n"); - continue; - } - - if (!pin->event.type) - { - pthread_mutex_unlock(&filter->mutex); LeaveCriticalSection(&pin->flushing_cs); continue; } - event = pin->event; - pin->event.type = PARSER_EVENT_NONE; - pthread_cond_signal(&pin->event_empty_cond); - - pthread_mutex_unlock(&filter->mutex); - TRACE("Got event of type %#x.\n", event.type); switch (event.type)