mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-04-26 06:54:49 +00:00
outputselector: do the pad_alloc for the pad that is pending and have a fallback
We should do the pad_alloc for the pending pad if any, as we will switch to that pad on next _chain() call. Also do a fallback alloc, if there is no output yet to not fail state transitions in dynamic pipelines.
This commit is contained in:
parent
8d45bdf144
commit
89e574ce0d
1 changed files with 10 additions and 3 deletions
|
@ -196,7 +196,7 @@ gst_output_selector_set_property (GObject * object, guint prop_id,
|
||||||
|
|
||||||
next_pad = g_value_get_object (value);
|
next_pad = g_value_get_object (value);
|
||||||
|
|
||||||
GST_LOG_OBJECT (sel, "Activating pad %s:%s",
|
GST_INFO_OBJECT (sel, "Activating pad %s:%s",
|
||||||
GST_DEBUG_PAD_NAME (next_pad));
|
GST_DEBUG_PAD_NAME (next_pad));
|
||||||
|
|
||||||
GST_OBJECT_LOCK (object);
|
GST_OBJECT_LOCK (object);
|
||||||
|
@ -262,11 +262,11 @@ gst_output_selector_buffer_alloc (GstPad * pad, guint64 offset, guint size,
|
||||||
GstPad *allocpad;
|
GstPad *allocpad;
|
||||||
|
|
||||||
sel = GST_OUTPUT_SELECTOR (GST_PAD_PARENT (pad));
|
sel = GST_OUTPUT_SELECTOR (GST_PAD_PARENT (pad));
|
||||||
|
|
||||||
res = GST_FLOW_NOT_LINKED;
|
res = GST_FLOW_NOT_LINKED;
|
||||||
|
|
||||||
GST_OBJECT_LOCK (sel);
|
GST_OBJECT_LOCK (sel);
|
||||||
if ((allocpad = sel->active_srcpad)) {
|
allocpad = sel->pending_srcpad ? sel->pending_srcpad : sel->active_srcpad;
|
||||||
|
if (allocpad) {
|
||||||
/* if we had a previous pad we used for allocating a buffer, continue using
|
/* if we had a previous pad we used for allocating a buffer, continue using
|
||||||
* it. */
|
* it. */
|
||||||
GST_DEBUG_OBJECT (sel, "using pad %s:%s for alloc",
|
GST_DEBUG_OBJECT (sel, "using pad %s:%s for alloc",
|
||||||
|
@ -278,9 +278,16 @@ gst_output_selector_buffer_alloc (GstPad * pad, guint64 offset, guint size,
|
||||||
gst_object_unref (allocpad);
|
gst_object_unref (allocpad);
|
||||||
|
|
||||||
GST_OBJECT_LOCK (sel);
|
GST_OBJECT_LOCK (sel);
|
||||||
|
} else {
|
||||||
|
/* fallback case, allocate a buffer of our own, add pad caps. */
|
||||||
|
GST_DEBUG_OBJECT (pad, "fallback buffer alloc");
|
||||||
|
*buf = NULL;
|
||||||
|
res = GST_FLOW_OK;
|
||||||
}
|
}
|
||||||
GST_OBJECT_UNLOCK (sel);
|
GST_OBJECT_UNLOCK (sel);
|
||||||
|
|
||||||
|
GST_DEBUG_OBJECT (sel, "buffer alloc finished: %s", gst_flow_get_name (res));
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue