diff options
author | Jan Schmidt <jan@centricular.com> | 2015-05-30 02:15:51 +1000 |
---|---|---|
committer | Jan Schmidt <jan@centricular.com> | 2015-06-12 00:39:15 +1000 |
commit | e2ce1eff36cb6c0c5fde6fc13ce57af3c89fa117 (patch) | |
tree | cb8f09fbdd5931b2a95596495aa4a56eddd3b3e1 /gst-libs/gst/gl/gstglmemory.c | |
parent | 08c73f9cc714b1eb2edf662479197dd956cbf918 (diff) | |
download | gstreamer-plugins-bad-e2ce1eff36cb6c0c5fde6fc13ce57af3c89fa117.tar.gz |
gl: Add support for multiple views in upload, colour convert and download
Support multiple attached views on input/output buffers
by processing each one, not just the first.
Diffstat (limited to 'gst-libs/gst/gl/gstglmemory.c')
-rw-r--r-- | gst-libs/gst/gl/gstglmemory.c | 31 |
1 files changed, 20 insertions, 11 deletions
diff --git a/gst-libs/gst/gl/gstglmemory.c b/gst-libs/gst/gl/gstglmemory.c index b93ad5ef8..2deede49f 100644 --- a/gst-libs/gst/gl/gstglmemory.c +++ b/gst-libs/gst/gl/gstglmemory.c @@ -1422,22 +1422,31 @@ gst_gl_memory_setup_buffer (GstGLContext * context, GstVideoAlignment * valign, GstBuffer * buffer) { GstGLMemory *gl_mem[GST_VIDEO_MAX_PLANES] = { NULL, }; - guint n_mem, i; + guint n_mem, i, v, views; n_mem = GST_VIDEO_INFO_N_PLANES (info); - for (i = 0; i < n_mem; i++) { - gl_mem[i] = - (GstGLMemory *) gst_gl_memory_alloc (context, params, info, i, valign); - if (gl_mem[i] == NULL) - return FALSE; + if (GST_VIDEO_INFO_MULTIVIEW_MODE (info) == + GST_VIDEO_MULTIVIEW_MODE_SEPARATED) + views = info->views; + else + views = 1; - gst_buffer_append_memory (buffer, (GstMemory *) gl_mem[i]); - } + for (v = 0; v < views; v++) { + for (i = 0; i < n_mem; i++) { + gl_mem[i] = + (GstGLMemory *) gst_gl_memory_alloc (context, params, info, i, + valign); + if (gl_mem[i] == NULL) + return FALSE; - gst_buffer_add_video_meta_full (buffer, 0, - GST_VIDEO_INFO_FORMAT (info), GST_VIDEO_INFO_WIDTH (info), - GST_VIDEO_INFO_HEIGHT (info), n_mem, info->offset, info->stride); + gst_buffer_append_memory (buffer, (GstMemory *) gl_mem[i]); + } + + gst_buffer_add_video_meta_full (buffer, v, + GST_VIDEO_INFO_FORMAT (info), GST_VIDEO_INFO_WIDTH (info), + GST_VIDEO_INFO_HEIGHT (info), n_mem, info->offset, info->stride); + } return TRUE; } |