Skip to content

Commit

Permalink
winegstreamer: Store the segment parameters in the parser_event struc…
Browse files Browse the repository at this point in the history
…ture.

Instead of the segment event.

Signed-off-by: Zebediah Figura <[email protected]>
Signed-off-by: Alexandre Julliard <[email protected]>
  • Loading branch information
zfigura authored and julliard committed Jan 22, 2021
1 parent 911bc74 commit 2546ad8
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 27 deletions.
1 change: 1 addition & 0 deletions dlls/winegstreamer/gst_private.h
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand Down
49 changes: 22 additions & 27 deletions dlls/winegstreamer/gstdemux.c
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,11 @@ struct parser_event
union
{
GstBuffer *buffer;
GstEvent *segment;
struct
{
uint64_t position, stop;
double rate;
} segment;
} u;
};

Expand Down Expand Up @@ -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;

Expand Down Expand Up @@ -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;

Expand Down Expand Up @@ -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);
Expand Down

0 comments on commit 2546ad8

Please sign in to comment.