mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-23 00:36:51 +00:00
qtmux: Fix assertion on caps update
GstQTMuxPad.configured_caps should be protected since it's updated from streaming thread and accessed in aggregate thread Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4042>
This commit is contained in:
parent
0472c306d0
commit
1f0528b428
1 changed files with 11 additions and 3 deletions
|
@ -5793,15 +5793,17 @@ static gboolean
|
||||||
gst_qt_mux_can_renegotiate (GstQTMux * qtmux, GstPad * pad, GstCaps * caps)
|
gst_qt_mux_can_renegotiate (GstQTMux * qtmux, GstPad * pad, GstCaps * caps)
|
||||||
{
|
{
|
||||||
GstQTMuxPad *qtmuxpad = GST_QT_MUX_PAD_CAST (pad);
|
GstQTMuxPad *qtmuxpad = GST_QT_MUX_PAD_CAST (pad);
|
||||||
|
gboolean ret = TRUE;
|
||||||
|
|
||||||
/* does not go well to renegotiate stream mid-way, unless
|
/* does not go well to renegotiate stream mid-way, unless
|
||||||
* the old caps are a subset of the new one (this means upstream
|
* the old caps are a subset of the new one (this means upstream
|
||||||
* added more info to the caps, as both should be 'fixed' caps) */
|
* added more info to the caps, as both should be 'fixed' caps) */
|
||||||
|
|
||||||
|
GST_OBJECT_LOCK (qtmux);
|
||||||
if (!qtmuxpad->configured_caps) {
|
if (!qtmuxpad->configured_caps) {
|
||||||
GST_DEBUG_OBJECT (qtmux, "pad %s accepted caps %" GST_PTR_FORMAT,
|
GST_DEBUG_OBJECT (qtmux, "pad %s accepted caps %" GST_PTR_FORMAT,
|
||||||
GST_PAD_NAME (pad), caps);
|
GST_PAD_NAME (pad), caps);
|
||||||
return TRUE;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
g_assert (caps != NULL);
|
g_assert (caps != NULL);
|
||||||
|
@ -5810,14 +5812,18 @@ gst_qt_mux_can_renegotiate (GstQTMux * qtmux, GstPad * pad, GstCaps * caps)
|
||||||
GST_WARNING_OBJECT (qtmux,
|
GST_WARNING_OBJECT (qtmux,
|
||||||
"pad %s refused renegotiation to %" GST_PTR_FORMAT " from %"
|
"pad %s refused renegotiation to %" GST_PTR_FORMAT " from %"
|
||||||
GST_PTR_FORMAT, GST_PAD_NAME (pad), caps, qtmuxpad->configured_caps);
|
GST_PTR_FORMAT, GST_PAD_NAME (pad), caps, qtmuxpad->configured_caps);
|
||||||
return FALSE;
|
ret = FALSE;
|
||||||
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (qtmux,
|
GST_DEBUG_OBJECT (qtmux,
|
||||||
"pad %s accepted renegotiation to %" GST_PTR_FORMAT " from %"
|
"pad %s accepted renegotiation to %" GST_PTR_FORMAT " from %"
|
||||||
GST_PTR_FORMAT, GST_PAD_NAME (pad), caps, qtmuxpad->configured_caps);
|
GST_PTR_FORMAT, GST_PAD_NAME (pad), caps, qtmuxpad->configured_caps);
|
||||||
|
|
||||||
return TRUE;
|
out:
|
||||||
|
GST_OBJECT_UNLOCK (qtmux);
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
|
@ -7038,8 +7044,10 @@ gst_qt_mux_sink_event (GstAggregator * agg, GstAggregatorPad * agg_pad,
|
||||||
GST_OBJECT_UNLOCK (qtmux);
|
GST_OBJECT_UNLOCK (qtmux);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GST_OBJECT_LOCK (qtmux);
|
||||||
if (ret)
|
if (ret)
|
||||||
gst_caps_replace (&qtmux_pad->configured_caps, caps);
|
gst_caps_replace (&qtmux_pad->configured_caps, caps);
|
||||||
|
GST_OBJECT_UNLOCK (qtmux);
|
||||||
|
|
||||||
gst_event_unref (event);
|
gst_event_unref (event);
|
||||||
event = NULL;
|
event = NULL;
|
||||||
|
|
Loading…
Reference in a new issue