mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-23 14:36:24 +00:00
rawparse: fix event order
Delay forwarding the segment event until we pushed caps. Send STREAM_START in pull mode.
This commit is contained in:
parent
2b94641a42
commit
b15177645b
2 changed files with 29 additions and 1 deletions
|
@ -301,6 +301,12 @@ gst_raw_parse_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
|
|||
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 @@ gst_raw_parse_loop (GstElement * element)
|
|||
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 @@ gst_raw_parse_sink_activatemode (GstPad * sinkpad, GstObject * parent,
|
|||
}
|
||||
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_raw_parse_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
|
|||
|
||||
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:
|
||||
|
|
|
@ -69,6 +69,7 @@ struct _GstRawParse
|
|||
GstEvent *start_segment;
|
||||
|
||||
gboolean negotiated;
|
||||
gboolean push_stream_start;
|
||||
};
|
||||
|
||||
struct _GstRawParseClass
|
||||
|
|
Loading…
Reference in a new issue