From: Michael Olbrich Date: Wed, 4 Jul 2018 07:29:57 +0000 (+0200) Subject: gluploadelement: try to avoid dropping buffers X-Git-Tag: 1.19.3~511^2~1489 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=75f2532da784731190d44f118f01a12841ecb683;p=platform%2Fupstream%2Fgstreamer.git gluploadelement: try to avoid dropping buffers Without this, a buffer is dropped if glupload indicates that it is necessary to reconfigure. Avoid this by explicitly reconfiguring immediately and uploading the buffer again. https://bugzilla.gnome.org/show_bug.cgi?id=783521 --- diff --git a/ext/gl/gstgluploadelement.c b/ext/gl/gstgluploadelement.c index 1998c77..eaaeaed 100644 --- a/ext/gl/gstgluploadelement.c +++ b/ext/gl/gstgluploadelement.c @@ -232,9 +232,21 @@ gst_gl_upload_element_prepare_output_buffer (GstBaseTransform * bt, if (!upload->upload) return GST_FLOW_NOT_NEGOTIATED; +again: ret = gst_gl_upload_perform_with_buffer (upload->upload, buffer, outbuf); if (ret == GST_GL_UPLOAD_RECONFIGURE) { - gst_base_transform_reconfigure_src (bt); + GstPad *sinkpad = GST_BASE_TRANSFORM_SINK_PAD (bt); + GstCaps *incaps = gst_pad_get_current_caps (sinkpad); + GST_DEBUG_OBJECT (bt, + "Failed to upload with curren caps -- reconfiguring."); + /* Note: gst_base_transform_reconfigure_src() cannot be used here. + * Reconfiguring must be synchronous to avoid dropping the current + * buffer */ + gst_pad_send_event (sinkpad, gst_event_new_caps (incaps)); + if (!gst_pad_needs_reconfigure (GST_BASE_TRANSFORM_SRC_PAD (bt))) { + GST_DEBUG_OBJECT (bt, "Retry uploading with new caps"); + goto again; + } return GST_FLOW_OK; }