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
This commit is contained in:
Michael Olbrich 2018-07-04 09:29:57 +02:00
parent f349cdccf5
commit b006ef97fc

View file

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