From 5043800a1dfac8cabb0b9d3a9b055d116ea11c77 Mon Sep 17 00:00:00 2001 From: Matthew Waters Date: Tue, 14 Jul 2015 17:40:32 +1000 Subject: [PATCH] glupload: memcpy on raw data upload Anything else requires keeping track of the GstVideoFrame mapping across possible multiple buffers to ensure correct data pointer usage. --- gst-libs/gst/gl/gstglupload.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/gst-libs/gst/gl/gstglupload.c b/gst-libs/gst/gl/gstglupload.c index 0ccf328ee1..358cdb7a95 100644 --- a/gst-libs/gst/gl/gstglupload.c +++ b/gst-libs/gst/gl/gstglupload.c @@ -782,7 +782,6 @@ static GstGLUploadReturn _raw_data_upload_perform (gpointer impl, GstBuffer * buffer, GstBuffer ** outbuf) { - GstGLMemory *in_tex[GST_GL_UPLOAD_MAX_PLANES] = { 0, }; struct RawUpload *raw = impl; int i; GstVideoInfo *in_info = &raw->upload->priv->in_info; @@ -793,12 +792,22 @@ _raw_data_upload_perform (gpointer impl, GstBuffer * buffer, GST_VIDEO_MULTIVIEW_MODE_SEPARATED) max_planes *= GST_VIDEO_INFO_VIEWS (in_info); - gst_gl_memory_setup_wrapped (raw->upload->context, - &raw->upload->priv->in_info, NULL, raw->in_frame.data, in_tex); - + /* FIXME: buffer pool */ *outbuf = gst_buffer_new (); + gst_gl_memory_setup_buffer (raw->upload->context, NULL, + &raw->upload->priv->in_info, NULL, *outbuf); + for (i = 0; i < max_planes; i++) { - gst_buffer_append_memory (*outbuf, (GstMemory *) in_tex[i]); + GstMemory *mem = gst_buffer_peek_memory (*outbuf, i); + GstMapInfo map_info; + + gst_memory_map (mem, &map_info, GST_MAP_WRITE); + + memcpy (map_info.data, raw->in_frame.data[i], map_info.size); + + gst_memory_unmap (mem, &map_info); + + gst_gl_memory_upload_transfer ((GstGLMemory *) mem); } return GST_GL_UPLOAD_DONE;