Before erroring out on not-negotiated returns, check if the pad
has the reconfigure flag set and retry.
https://bugzilla.gnome.org/show_bug.cgi?id=681198
ret = gst_pad_push (pad, buf);
if (G_UNLIKELY (ret != GST_FLOW_OK)) {
ret = gst_pad_push (pad, buf);
if (G_UNLIKELY (ret != GST_FLOW_OK)) {
+ if (ret == GST_FLOW_NOT_NEGOTIATED) {
+ goto not_negotiated;
+ }
GST_INFO_OBJECT (src, "pausing after gst_pad_push() = %s",
gst_flow_get_name (ret));
goto pause;
GST_INFO_OBJECT (src, "pausing after gst_pad_push() = %s",
gst_flow_get_name (ret));
goto pause;
/* special cases */
not_negotiated:
{
/* special cases */
not_negotiated:
{
+ if (gst_pad_needs_reconfigure (pad)) {
+ GST_DEBUG_OBJECT (src, "Retrying to renegotiate");
+ return;
+ }
GST_DEBUG_OBJECT (src, "Failed to renegotiate");
ret = GST_FLOW_NOT_NEGOTIATED;
goto pause;
GST_DEBUG_OBJECT (src, "Failed to renegotiate");
ret = GST_FLOW_NOT_NEGOTIATED;
goto pause;