videoaggregator: Don't crash when setting pad properties after the aggregator was finalized
The application might still have a strong reference to a pad and change properties, which should work without crashing. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/649>
This commit is contained in:
parent
380dffb0d0
commit
637bbac622
@ -123,17 +123,24 @@ gst_video_aggregator_pad_set_property (GObject * object, guint prop_id,
|
|||||||
const GValue * value, GParamSpec * pspec)
|
const GValue * value, GParamSpec * pspec)
|
||||||
{
|
{
|
||||||
GstVideoAggregatorPad *pad = GST_VIDEO_AGGREGATOR_PAD (object);
|
GstVideoAggregatorPad *pad = GST_VIDEO_AGGREGATOR_PAD (object);
|
||||||
GstVideoAggregator *vagg =
|
|
||||||
GST_VIDEO_AGGREGATOR (gst_pad_get_parent (GST_PAD (pad)));
|
|
||||||
|
|
||||||
switch (prop_id) {
|
switch (prop_id) {
|
||||||
case PROP_PAD_ZORDER:
|
case PROP_PAD_ZORDER:{
|
||||||
|
GstVideoAggregator *vagg =
|
||||||
|
GST_VIDEO_AGGREGATOR (gst_pad_get_parent (GST_PAD (pad)));
|
||||||
|
if (vagg) {
|
||||||
GST_OBJECT_LOCK (vagg);
|
GST_OBJECT_LOCK (vagg);
|
||||||
pad->priv->zorder = g_value_get_uint (value);
|
pad->priv->zorder = g_value_get_uint (value);
|
||||||
GST_ELEMENT (vagg)->sinkpads = g_list_sort (GST_ELEMENT (vagg)->sinkpads,
|
GST_ELEMENT (vagg)->sinkpads =
|
||||||
|
g_list_sort (GST_ELEMENT (vagg)->sinkpads,
|
||||||
(GCompareFunc) pad_zorder_compare);
|
(GCompareFunc) pad_zorder_compare);
|
||||||
GST_OBJECT_UNLOCK (vagg);
|
GST_OBJECT_UNLOCK (vagg);
|
||||||
|
gst_object_unref (vagg);
|
||||||
|
} else {
|
||||||
|
pad->priv->zorder = g_value_get_uint (value);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
case PROP_PAD_REPEAT_AFTER_EOS:
|
case PROP_PAD_REPEAT_AFTER_EOS:
|
||||||
pad->priv->repeat_after_eos = g_value_get_boolean (value);
|
pad->priv->repeat_after_eos = g_value_get_boolean (value);
|
||||||
break;
|
break;
|
||||||
@ -144,8 +151,6 @@ gst_video_aggregator_pad_set_property (GObject * object, guint prop_id,
|
|||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
gst_object_unref (vagg);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static GstFlowReturn
|
static GstFlowReturn
|
||||||
|
Loading…
x
Reference in New Issue
Block a user