auparse: Fix sticky event misordering warning

Make sure that src pad has caps before sending segment event.

https://bugzilla.gnome.org/show_bug.cgi?id=766359
This commit is contained in:
Patricia Muscalu 2016-05-12 14:43:43 +02:00 committed by Sebastian Dröge
parent 204a86af97
commit fe4dc610e6
2 changed files with 17 additions and 7 deletions

View file

@ -419,7 +419,6 @@ gst_au_parse_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
gint64 timestamp;
gint64 duration;
gint64 offset;
GstSegment segment;
auparse = GST_AU_PARSE (parent);
@ -441,8 +440,11 @@ gst_au_parse_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
if (ret != GST_FLOW_OK)
goto out;
gst_segment_init (&segment, GST_FORMAT_TIME);
gst_pad_push_event (auparse->srcpad, gst_event_new_segment (&segment));
if (auparse->need_segment) {
gst_pad_push_event (auparse->srcpad,
gst_event_new_segment (&auparse->segment));
auparse->need_segment = FALSE;
}
}
avail = gst_adapter_available (auparse->adapter);
@ -688,7 +690,6 @@ gst_au_parse_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
{
gint64 start, stop, offset = 0;
GstSegment segment;
GstEvent *new_event = NULL;
/* some debug output */
gst_event_copy_segment (event, &segment);
@ -720,9 +721,17 @@ gst_au_parse_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
gst_segment_init (&segment, GST_FORMAT_TIME);
segment.start = segment.time = start;
segment.stop = stop;
new_event = gst_event_new_segment (&segment);
ret = gst_pad_push_event (auparse->srcpad, new_event);
gst_segment_copy_into (&segment, &auparse->segment);
if (!gst_pad_has_current_caps (auparse->srcpad)) {
auparse->need_segment = TRUE;
ret = TRUE;
} else {
auparse->need_segment = FALSE;
ret = gst_pad_push_event (auparse->srcpad,
gst_event_new_segment (&segment));
}
auparse->buffer_offset = offset;

View file

@ -53,7 +53,8 @@ struct _GstAuParse {
GstAdapter *adapter;
/* GstSegment segment; */
GstSegment segment;
gboolean need_segment;
gint64 offset; /* where sample data starts */
gint64 buffer_offset;