Commit 8d32de09 authored by Thibault Saunier's avatar Thibault Saunier 🌵 Committed by Thibault Saunier

glupload: Add VideoMetas and GLSyncMeta to the raw uploaded buffers

This is done by reusing `gst_gl_memory_setup_buffer` avoiding to
duplicate code.

Without a VideoMeta, mapping those buffers lead to GstBuffer mapping the
buffer in system memory even when specifying the GL flags (through the
buffer merging mechanism) making the result totally broken.
parent 99391499
......@@ -1293,33 +1293,23 @@ _raw_data_upload_perform (gpointer impl, GstBuffer * buffer,
/* FIXME Use a buffer pool to cache the generated textures */
/* FIXME: multiview support with separated left/right frames? */
*outbuf = gst_buffer_new ();
for (i = 0; i < n_mem; i++) {
GstGLBaseMemory *tex;
raw->params->parent.wrapped_data = raw->in_frame->[i];
raw->params->plane = i;
raw->params->tex_format =
gst_gl_format_from_video_info (raw->upload->context, in_info, i);
tex =
gst_gl_base_memory_alloc (allocator,
(GstGLAllocationParams *) raw->params);
if (!tex) {
gst_buffer_unref (*outbuf);
*outbuf = NULL;
GST_ERROR_OBJECT (raw->upload, "Failed to allocate wrapped texture");
raw->params->parent.context = raw->upload->context;
if (gst_gl_memory_setup_buffer ((GstGLMemoryAllocator *) allocator, *outbuf,
raw->params, NULL, raw->in_frame->, n_mem)) {
_raw_upload_frame_ref (raw->in_frame);
gst_buffer_append_memory (*outbuf, (GstMemory *) tex);
for (i = 0; i < n_mem; i++)
_raw_upload_frame_ref (raw->in_frame);
gst_buffer_add_gl_sync_meta (raw->upload->context, *outbuf);
} else {
GST_ERROR_OBJECT (raw->upload, "Failed to allocate wrapped texture");
gst_buffer_unref (*outbuf);
gst_object_unref (allocator);
_raw_upload_frame_unref (raw->in_frame);
raw->in_frame = NULL;
......@@ -281,6 +281,8 @@ GST_START_TEST (test_upload_data)
res = gst_gl_upload_perform_with_buffer (upload, inbuf, &outbuf);
fail_unless (res == GST_GL_UPLOAD_DONE, "Failed to upload buffer");
fail_unless (GST_IS_BUFFER (outbuf));
fail_unless (gst_buffer_get_video_meta (outbuf));
fail_unless (gst_buffer_get_gl_sync_meta (outbuf));
res = gst_buffer_map (outbuf, &map_info, GST_MAP_READ | GST_MAP_GL);
fail_if (res == FALSE, "Failed to map gl memory");
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment