rawparse: fix event order
Delay forwarding the segment event until we pushed caps.
Send STREAM_START in pull mode.
diff --git a/gst/rawparse/gstrawparse.c b/gst/rawparse/gstrawparse.c
index 38e85e8..afefd4a 100644
--- a/gst/rawparse/gstrawparse.c
+++ b/gst/rawparse/gstrawparse.c
@@ -301,6 +301,12 @@
if (!gst_raw_parse_set_src_caps (rp))
goto no_caps;
+ if (rp->start_segment) {
+ GST_DEBUG_OBJECT (rp, "sending start segment");
+ gst_pad_push_event (rp->srcpad, rp->start_segment);
+ rp->start_segment = NULL;
+ }
+
gst_adapter_push (rp->adapter, buffer);
if (rp_class->multiple_frames_per_buffer) {
@@ -339,6 +345,22 @@
GstBuffer *buffer;
gint size;
+ if (G_UNLIKELY (rp->push_stream_start)) {
+ gchar *stream_id;
+ GstEvent *event;
+
+ stream_id =
+ gst_pad_create_stream_id (rp->srcpad, GST_ELEMENT_CAST (rp), NULL);
+
+ event = gst_event_new_stream_start (stream_id);
+ gst_event_set_group_id (event, gst_util_group_id_next ());
+
+ GST_DEBUG_OBJECT (rp, "Pushing STREAM_START");
+ gst_pad_push_event (rp->srcpad, event);
+ rp->push_stream_start = FALSE;
+ g_free (stream_id);
+ }
+
if (!gst_raw_parse_set_src_caps (rp))
goto no_caps;
@@ -505,6 +527,8 @@
}
rp->segment.duration = duration;
+ rp->push_stream_start = TRUE;
+
result = gst_raw_parse_handle_seek_pull (rp, NULL);
rp->mode = mode;
} else {
@@ -693,7 +717,10 @@
gst_segment_copy_into (&segment, &rp->segment);
- ret = gst_pad_push_event (rp->srcpad, event);
+ if (rp->start_segment)
+ gst_event_unref (rp->start_segment);
+ rp->start_segment = event;
+ ret = TRUE;
break;
}
default:
diff --git a/gst/rawparse/gstrawparse.h b/gst/rawparse/gstrawparse.h
index 7d2b3a1..f62bb98 100644
--- a/gst/rawparse/gstrawparse.h
+++ b/gst/rawparse/gstrawparse.h
@@ -69,6 +69,7 @@
GstEvent *start_segment;
gboolean negotiated;
+ gboolean push_stream_start;
};
struct _GstRawParseClass