mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-09-26 14:00:29 +00:00
adaptivedemux2: Refactor output slot creation
Set as much information as possible on the slot (including the associated track) *before* the associated source pad is added to the element. We need this so that incoming event/queries can be replied to if they are received when adding the pad Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6690>
This commit is contained in:
parent
deddcbdc66
commit
6b43e4e19f
1 changed files with 9 additions and 9 deletions
|
@ -740,13 +740,13 @@ gst_adaptive_demux_output_slot_free (GstAdaptiveDemux * demux,
|
||||||
|
|
||||||
static OutputSlot *
|
static OutputSlot *
|
||||||
gst_adaptive_demux_output_slot_new (GstAdaptiveDemux * demux,
|
gst_adaptive_demux_output_slot_new (GstAdaptiveDemux * demux,
|
||||||
GstStreamType streamtype)
|
GstAdaptiveDemuxTrack * track)
|
||||||
{
|
{
|
||||||
OutputSlot *slot;
|
OutputSlot *slot;
|
||||||
GstPadTemplate *tmpl;
|
GstPadTemplate *tmpl;
|
||||||
gchar *name;
|
gchar *name;
|
||||||
|
|
||||||
switch (streamtype) {
|
switch (track->type) {
|
||||||
case GST_STREAM_TYPE_AUDIO:
|
case GST_STREAM_TYPE_AUDIO:
|
||||||
name = g_strdup_printf ("audio_%02u", demux->priv->n_audio_streams++);
|
name = g_strdup_printf ("audio_%02u", demux->priv->n_audio_streams++);
|
||||||
tmpl =
|
tmpl =
|
||||||
|
@ -770,7 +770,8 @@ gst_adaptive_demux_output_slot_new (GstAdaptiveDemux * demux,
|
||||||
}
|
}
|
||||||
|
|
||||||
slot = g_new0 (OutputSlot, 1);
|
slot = g_new0 (OutputSlot, 1);
|
||||||
slot->type = streamtype;
|
slot->type = track->type;
|
||||||
|
slot->track = gst_adaptive_demux_track_ref (track);
|
||||||
slot->pushed_timed_data = FALSE;
|
slot->pushed_timed_data = FALSE;
|
||||||
|
|
||||||
/* Create and activate new pads */
|
/* Create and activate new pads */
|
||||||
|
@ -778,10 +779,6 @@ gst_adaptive_demux_output_slot_new (GstAdaptiveDemux * demux,
|
||||||
g_free (name);
|
g_free (name);
|
||||||
gst_object_unref (tmpl);
|
gst_object_unref (tmpl);
|
||||||
|
|
||||||
gst_element_add_pad (GST_ELEMENT_CAST (demux), slot->pad);
|
|
||||||
gst_flow_combiner_add_pad (demux->priv->flowcombiner, slot->pad);
|
|
||||||
gst_pad_set_active (slot->pad, TRUE);
|
|
||||||
|
|
||||||
gst_pad_set_query_function (slot->pad,
|
gst_pad_set_query_function (slot->pad,
|
||||||
GST_DEBUG_FUNCPTR (gst_adaptive_demux_src_query));
|
GST_DEBUG_FUNCPTR (gst_adaptive_demux_src_query));
|
||||||
gst_pad_set_event_function (slot->pad,
|
gst_pad_set_event_function (slot->pad,
|
||||||
|
@ -789,6 +786,10 @@ gst_adaptive_demux_output_slot_new (GstAdaptiveDemux * demux,
|
||||||
|
|
||||||
gst_pad_set_element_private (slot->pad, slot);
|
gst_pad_set_element_private (slot->pad, slot);
|
||||||
|
|
||||||
|
gst_element_add_pad (GST_ELEMENT_CAST (demux), slot->pad);
|
||||||
|
gst_flow_combiner_add_pad (demux->priv->flowcombiner, slot->pad);
|
||||||
|
gst_pad_set_active (slot->pad, TRUE);
|
||||||
|
|
||||||
GST_INFO_OBJECT (demux, "Created output slot %s:%s",
|
GST_INFO_OBJECT (demux, "Created output slot %s:%s",
|
||||||
GST_DEBUG_PAD_NAME (slot->pad));
|
GST_DEBUG_PAD_NAME (slot->pad));
|
||||||
return slot;
|
return slot;
|
||||||
|
@ -3171,13 +3172,12 @@ check_and_handle_selection_update_locked (GstAdaptiveDemux * demux)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
/* 2. There is no compatible replacement slot, create a new one */
|
/* 2. There is no compatible replacement slot, create a new one */
|
||||||
slot = gst_adaptive_demux_output_slot_new (demux, track->type);
|
slot = gst_adaptive_demux_output_slot_new (demux, track);
|
||||||
GST_DEBUG_OBJECT (demux, "Created slot for track '%s'", track->id);
|
GST_DEBUG_OBJECT (demux, "Created slot for track '%s'", track->id);
|
||||||
demux->priv->outputs = g_list_append (demux->priv->outputs, slot);
|
demux->priv->outputs = g_list_append (demux->priv->outputs, slot);
|
||||||
|
|
||||||
track->update_next_segment = TRUE;
|
track->update_next_segment = TRUE;
|
||||||
|
|
||||||
slot->track = gst_adaptive_demux_track_ref (track);
|
|
||||||
track->active = TRUE;
|
track->active = TRUE;
|
||||||
gst_adaptive_demux_send_initial_events (demux, slot);
|
gst_adaptive_demux_send_initial_events (demux, slot);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue