mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-01-27 09:38:17 +00:00
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:
parent
c1053e17d5
commit
75f2532da7
1 changed files with 13 additions and 1 deletions
|
@ -232,9 +232,21 @@ gst_gl_upload_element_prepare_output_buffer (GstBaseTransform * bt,
|
||||||
if (!upload->upload)
|
if (!upload->upload)
|
||||||
return GST_FLOW_NOT_NEGOTIATED;
|
return GST_FLOW_NOT_NEGOTIATED;
|
||||||
|
|
||||||
|
again:
|
||||||
ret = gst_gl_upload_perform_with_buffer (upload->upload, buffer, outbuf);
|
ret = gst_gl_upload_perform_with_buffer (upload->upload, buffer, outbuf);
|
||||||
if (ret == GST_GL_UPLOAD_RECONFIGURE) {
|
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;
|
return GST_FLOW_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue