summaryrefslogtreecommitdiff
path: root/gst-libs/gst/gl/gstglmemory.c
diff options
context:
space:
mode:
authorJan Schmidt <jan@centricular.com>2015-05-30 02:15:51 +1000
committerJan Schmidt <jan@centricular.com>2015-06-12 00:39:15 +1000
commite2ce1eff36cb6c0c5fde6fc13ce57af3c89fa117 (patch)
treecb8f09fbdd5931b2a95596495aa4a56eddd3b3e1 /gst-libs/gst/gl/gstglmemory.c
parent08c73f9cc714b1eb2edf662479197dd956cbf918 (diff)
downloadgstreamer-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.c31
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;
}