mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-22 08:17:01 +00:00
decodebin2: Only use the object lock for protecting the subtitle elements
Using the decodebin lock will result in deadlocks if the subtitle encoding is accessed from a pad-added handler.
This commit is contained in:
parent
9be848d04f
commit
0dcc0857aa
1 changed files with 5 additions and 7 deletions
|
@ -857,18 +857,16 @@ gst_decode_bin_set_subs_encoding (GstDecodeBin * dbin, const gchar * encoding)
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (dbin, "Setting new encoding: %s", GST_STR_NULL (encoding));
|
GST_DEBUG_OBJECT (dbin, "Setting new encoding: %s", GST_STR_NULL (encoding));
|
||||||
|
|
||||||
DECODE_BIN_LOCK (dbin);
|
|
||||||
GST_OBJECT_LOCK (dbin);
|
GST_OBJECT_LOCK (dbin);
|
||||||
g_free (dbin->encoding);
|
g_free (dbin->encoding);
|
||||||
dbin->encoding = g_strdup (encoding);
|
dbin->encoding = g_strdup (encoding);
|
||||||
GST_OBJECT_UNLOCK (dbin);
|
|
||||||
|
|
||||||
/* set the subtitle encoding on all added elements */
|
/* set the subtitle encoding on all added elements */
|
||||||
for (walk = dbin->subtitles; walk; walk = g_list_next (walk)) {
|
for (walk = dbin->subtitles; walk; walk = g_list_next (walk)) {
|
||||||
g_object_set (G_OBJECT (walk->data), "subtitle-encoding", dbin->encoding,
|
g_object_set (G_OBJECT (walk->data), "subtitle-encoding", dbin->encoding,
|
||||||
NULL);
|
NULL);
|
||||||
}
|
}
|
||||||
DECODE_BIN_UNLOCK (dbin);
|
GST_OBJECT_UNLOCK (dbin);
|
||||||
}
|
}
|
||||||
|
|
||||||
static gchar *
|
static gchar *
|
||||||
|
@ -1319,11 +1317,11 @@ connect_pad (GstDecodeBin * dbin, GstElement * src, GstDecodePad * dpad,
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (subtitle) {
|
if (subtitle) {
|
||||||
DECODE_BIN_LOCK (dbin);
|
GST_OBJECT_LOCK (dbin);
|
||||||
/* we added the element now, add it to the list of subtitle-encoding
|
/* we added the element now, add it to the list of subtitle-encoding
|
||||||
* elements when we can set the property */
|
* elements when we can set the property */
|
||||||
dbin->subtitles = g_list_prepend (dbin->subtitles, element);
|
dbin->subtitles = g_list_prepend (dbin->subtitles, element);
|
||||||
DECODE_BIN_UNLOCK (dbin);
|
GST_OBJECT_UNLOCK (dbin);
|
||||||
}
|
}
|
||||||
|
|
||||||
res = TRUE;
|
res = TRUE;
|
||||||
|
@ -2364,10 +2362,10 @@ restart:
|
||||||
|
|
||||||
done:
|
done:
|
||||||
gst_element_set_state (element, GST_STATE_NULL);
|
gst_element_set_state (element, GST_STATE_NULL);
|
||||||
DECODE_BIN_LOCK (dbin);
|
GST_OBJECT_LOCK (dbin);
|
||||||
/* remove possible subtitle element */
|
/* remove possible subtitle element */
|
||||||
dbin->subtitles = g_list_remove (dbin->subtitles, element);
|
dbin->subtitles = g_list_remove (dbin->subtitles, element);
|
||||||
DECODE_BIN_UNLOCK (dbin);
|
GST_OBJECT_UNLOCK (dbin);
|
||||||
gst_bin_remove (GST_BIN (dbin), element);
|
gst_bin_remove (GST_BIN (dbin), element);
|
||||||
|
|
||||||
beach:
|
beach:
|
||||||
|
|
Loading…
Reference in a new issue