This ensures the gstreamer pipeline is empty whilst we flush our queues.
Fixes an issue with the video freezing when seeking within Quantum Break.
From: Brendan McGrath bmcgrath@codeweavers.com
This ensures the gstreamer pipeline is empty whilst we flush our queues. --- dlls/winegstreamer/wg_transform.c | 8 ++++++++ 1 file changed, 8 insertions(+)
diff --git a/dlls/winegstreamer/wg_transform.c b/dlls/winegstreamer/wg_transform.c index 1d59f806a31..b8dc6d98b98 100644 --- a/dlls/winegstreamer/wg_transform.c +++ b/dlls/winegstreamer/wg_transform.c @@ -1228,16 +1228,24 @@ NTSTATUS wg_transform_flush(void *args) struct wg_transform *transform = get_transform(*(wg_transform_t *)args); GstBuffer *input_buffer; GstSample *sample; + GstEvent *event; NTSTATUS status;
GST_LOG("transform %p", transform);
+ /* this ensures no messages are travelling through the pipeline whilst we flush */ + event = gst_event_new_flush_start(); + gst_pad_push_event(transform->my_src, event); + while ((input_buffer = gst_atomic_queue_pop(transform->input_queue))) gst_buffer_unref(input_buffer);
if (transform->stepper) wg_stepper_flush(transform->stepper);
+ event = gst_event_new_flush_stop(true); + gst_pad_push_event(transform->my_src, event); + if ((status = wg_transform_drain(args))) return status;
This merge request was approved by Rémi Bernon.