mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-24 01:00:37 +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;
|
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue