From ad8a6cb6399c100e3ed74c3672e1cd69a718aa85 Mon Sep 17 00:00:00 2001 From: Justin Kim Date: Mon, 4 Dec 2017 20:12:40 +0900 Subject: [PATCH] qtmux: send stream warning when refusing video caps If codec_data is changed, the stream is no longer valid. Rather than keeping running when refusing new caps, this patch send a warning to the bus. Also fix up splitmuxsink to ignore this warning while changing caps. https://bugzilla.gnome.org/show_bug.cgi?id=790000 --- gst/isomp4/gstqtmux.c | 7 ++++--- gst/multifile/gstsplitmuxsink.c | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 3 deletions(-) diff --git a/gst/isomp4/gstqtmux.c b/gst/isomp4/gstqtmux.c index 12a654e611..09357be1bf 100644 --- a/gst/isomp4/gstqtmux.c +++ b/gst/isomp4/gstqtmux.c @@ -5685,9 +5685,10 @@ refuse_caps: } refuse_renegotiation: { - GST_WARNING_OBJECT (qtmux, - "pad %s refused renegotiation to %" GST_PTR_FORMAT, GST_PAD_NAME (pad), - caps); + GST_ELEMENT_WARNING (qtmux, STREAM, FORMAT, + ("Can't change input format at runtime."), + ("pad %s refused renegotiation to %" GST_PTR_FORMAT, GST_PAD_NAME (pad), + caps)); gst_object_unref (qtmux); return FALSE; } diff --git a/gst/multifile/gstsplitmuxsink.c b/gst/multifile/gstsplitmuxsink.c index 20bded2f86..be37933f0c 100644 --- a/gst/multifile/gstsplitmuxsink.c +++ b/gst/multifile/gstsplitmuxsink.c @@ -1250,6 +1250,39 @@ bus_handler (GstBin * bin, GstMessage * message) } } break; + case GST_MESSAGE_WARNING: + { + GError *gerror = NULL; + + gst_message_parse_warning (message, &gerror, NULL); + + if (g_error_matches (gerror, GST_STREAM_ERROR, GST_STREAM_ERROR_FORMAT)) { + GList *item; + gboolean caps_change = FALSE; + + GST_SPLITMUX_LOCK (splitmux); + + for (item = splitmux->contexts; item; item = item->next) { + MqStreamCtx *ctx = item->data; + + if (ctx->caps_change) { + caps_change = TRUE; + break; + } + } + + GST_SPLITMUX_UNLOCK (splitmux); + + if (caps_change) { + GST_LOG_OBJECT (splitmux, + "Ignoring warning change from child %" GST_PTR_FORMAT + " while switching caps", GST_MESSAGE_SRC (message)); + gst_message_unref (message); + return; + } + } + break; + } default: break; }