mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-14 13:21:28 +00:00
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:
parent
8c622b18f6
commit
c834ce5bc4
1 changed files with 23 additions and 2 deletions
|
@ -61,6 +61,8 @@ autoplug_select_cb (GstElement * bin, GstPad * pad, GstCaps * caps,
|
|||
{
|
||||
GstElement *nlesrc;
|
||||
GstCaps *downstream_caps;
|
||||
GstQuery *segment_query = NULL;
|
||||
GstFormat segment_format;
|
||||
GstAutoplugSelectResult res = GST_AUTOPLUG_SELECT_TRY;
|
||||
gchar *stream_id = gst_pad_get_stream_id (pad);
|
||||
const gchar *wanted_id =
|
||||
|
@ -79,13 +81,30 @@ autoplug_select_cb (GstElement * bin, GstPad * pad, GstCaps * caps,
|
|||
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);
|
||||
downstream_caps = gst_pad_peer_query_caps (nlesrc->srcpads->data, NULL);
|
||||
if (downstream_caps && gst_caps_can_intersect (downstream_caps, caps)) {
|
||||
if (wanted) {
|
||||
res = GST_AUTOPLUG_SELECT_EXPOSE;
|
||||
GST_DEBUG_OBJECT (self, "Exposing %" GST_PTR_FORMAT " with stream id: %s",
|
||||
pad, stream_id);
|
||||
GST_INFO_OBJECT (self, "Exposing %" GST_PTR_FORMAT " with stream id: %s",
|
||||
caps, stream_id);
|
||||
} else {
|
||||
res = GST_AUTOPLUG_SELECT_SKIP;
|
||||
GST_DEBUG_OBJECT (self->element, "Totally skipping %s", stream_id);
|
||||
|
@ -95,6 +114,8 @@ autoplug_select_cb (GstElement * bin, GstPad * pad, GstCaps * caps,
|
|||
|
||||
done:
|
||||
g_free (stream_id);
|
||||
gst_clear_query (&segment_query);
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue