Module: wine Branch: master Commit: 2546ad81158946c98d6fcf63e3f15d84909421d8 URL: https://source.winehq.org/git/wine.git/?a=commit;h=2546ad81158946c98d6fcf63e...
Author: Zebediah Figura z.figura12@gmail.com Date: Thu Jan 21 17:22:52 2021 -0600
winegstreamer: Store the segment parameters in the parser_event structure.
Instead of the segment event.
Signed-off-by: Zebediah Figura z.figura12@gmail.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
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);