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
This commit is contained in:
Justin Kim 2017-12-04 20:12:40 +09:00 committed by Olivier Crête
parent dabeed52a9
commit ad8a6cb639
2 changed files with 37 additions and 3 deletions

View file

@ -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;
}

View file

@ -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;
}