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: refuse_renegotiation:
{ {
GST_WARNING_OBJECT (qtmux, GST_ELEMENT_WARNING (qtmux, STREAM, FORMAT,
"pad %s refused renegotiation to %" GST_PTR_FORMAT, GST_PAD_NAME (pad), ("Can't change input format at runtime."),
caps); ("pad %s refused renegotiation to %" GST_PTR_FORMAT, GST_PAD_NAME (pad),
caps));
gst_object_unref (qtmux); gst_object_unref (qtmux);
return FALSE; return FALSE;
} }

View file

@ -1250,6 +1250,39 @@ bus_handler (GstBin * bin, GstMessage * message)
} }
} }
break; 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: default:
break; break;
} }