ges-source: Ensure that we output stream with segments in time

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-editing-services/-/merge_requests/198>
This commit is contained in:
Thibault Saunier 2020-07-25 13:14:56 -04:00
parent 8c622b18f6
commit c834ce5bc4

View file

@ -61,6 +61,8 @@ autoplug_select_cb (GstElement * bin, GstPad * pad, GstCaps * caps,
{ {
GstElement *nlesrc; GstElement *nlesrc;
GstCaps *downstream_caps; GstCaps *downstream_caps;
GstQuery *segment_query = NULL;
GstFormat segment_format;
GstAutoplugSelectResult res = GST_AUTOPLUG_SELECT_TRY; GstAutoplugSelectResult res = GST_AUTOPLUG_SELECT_TRY;
gchar *stream_id = gst_pad_get_stream_id (pad); gchar *stream_id = gst_pad_get_stream_id (pad);
const gchar *wanted_id = const gchar *wanted_id =
@ -79,13 +81,30 @@ autoplug_select_cb (GstElement * bin, GstPad * pad, GstCaps * caps,
goto done; goto done;
} }
segment_query = gst_query_new_segment (GST_FORMAT_TIME);
if (!gst_pad_query (pad, segment_query)) {
GST_DEBUG_OBJECT (pad, "Could not query segment");
goto done;
}
gst_query_parse_segment (segment_query, NULL, &segment_format, NULL, NULL);
if (segment_format != GST_FORMAT_TIME) {
GST_DEBUG_OBJECT (pad,
"Segment not in %s != time for %" GST_PTR_FORMAT
"... continue plugin elements", gst_format_get_name (segment_format),
caps);
goto done;
}
nlesrc = ges_track_element_get_nleobject (self->element); nlesrc = ges_track_element_get_nleobject (self->element);
downstream_caps = gst_pad_peer_query_caps (nlesrc->srcpads->data, NULL); downstream_caps = gst_pad_peer_query_caps (nlesrc->srcpads->data, NULL);
if (downstream_caps && gst_caps_can_intersect (downstream_caps, caps)) { if (downstream_caps && gst_caps_can_intersect (downstream_caps, caps)) {
if (wanted) { if (wanted) {
res = GST_AUTOPLUG_SELECT_EXPOSE; res = GST_AUTOPLUG_SELECT_EXPOSE;
GST_DEBUG_OBJECT (self, "Exposing %" GST_PTR_FORMAT " with stream id: %s", GST_INFO_OBJECT (self, "Exposing %" GST_PTR_FORMAT " with stream id: %s",
pad, stream_id); caps, stream_id);
} else { } else {
res = GST_AUTOPLUG_SELECT_SKIP; res = GST_AUTOPLUG_SELECT_SKIP;
GST_DEBUG_OBJECT (self->element, "Totally skipping %s", stream_id); GST_DEBUG_OBJECT (self->element, "Totally skipping %s", stream_id);
@ -95,6 +114,8 @@ autoplug_select_cb (GstElement * bin, GstPad * pad, GstCaps * caps,
done: done:
g_free (stream_id); g_free (stream_id);
gst_clear_query (&segment_query);
return res; return res;
} }