diff options
author | Matthew Waters <matthew@centricular.com> | 2015-10-26 17:36:21 +1100 |
---|---|---|
committer | Matthew Waters <matthew@centricular.com> | 2015-10-26 18:24:59 +1100 |
commit | 09976e021b8d222daf96e1b1328fde4a00b5c05f (patch) | |
tree | 37e1cd6b1d623a83c4973cb23b9b6c378d02e266 | |
parent | 41ca1e48a0baa53354d3c9d0dd8679fab5fcfbb3 (diff) |
glviewconvert: expose the element on gles2 platforms
We can do everything with gles3 however gles2 restricts us not allowing
separated or frame-by-frame multiview modes due to multiple draw buffers.
-rw-r--r-- | ext/gl/gstopengl.c | 10 | ||||
-rw-r--r-- | gst-libs/gst/gl/gstglviewconvert.c | 11 |
2 files changed, 16 insertions, 5 deletions
diff --git a/ext/gl/gstopengl.c b/ext/gl/gstopengl.c index 1fad0a239..7784f0ae3 100644 --- a/ext/gl/gstopengl.c +++ b/ext/gl/gstopengl.c @@ -199,6 +199,11 @@ plugin_init (GstPlugin * plugin) GST_RANK_NONE, GST_TYPE_GL_FILTER_APP)) { return FALSE; } + + if (!gst_element_register (plugin, "glviewconvert", + GST_RANK_NONE, GST_TYPE_GL_VIEW_CONVERT_ELEMENT)) { + return FALSE; + } #if HAVE_JPEG #if HAVE_PNG if (!gst_element_register (plugin, "gloverlay", @@ -228,11 +233,6 @@ plugin_init (GstPlugin * plugin) return FALSE; } - if (!gst_element_register (plugin, "glviewconvert", - GST_RANK_NONE, GST_TYPE_GL_VIEW_CONVERT_ELEMENT)) { - return FALSE; - } - if (!gst_element_register (plugin, "glmosaic", GST_RANK_NONE, GST_TYPE_GL_MOSAIC)) { return FALSE; diff --git a/gst-libs/gst/gl/gstglviewconvert.c b/gst-libs/gst/gl/gstglviewconvert.c index ef348f0bf..149273a77 100644 --- a/gst-libs/gst/gl/gstglviewconvert.c +++ b/gst-libs/gst/gl/gstglviewconvert.c @@ -1449,6 +1449,17 @@ _init_view_convert (GstGLViewConvert * viewconvert) "Cannot perform multiview conversion without OpenGL shaders"); goto error; } + + if (out_mode == GST_VIDEO_MULTIVIEW_MODE_SEPARATED + || out_mode == GST_VIDEO_MULTIVIEW_MODE_FRAME_BY_FRAME) { + if (!gl->DrawBuffers) { + GST_ERROR_OBJECT (viewconvert, + "Separate texture output mode requested however the current " + "OpenGL API does not support drawing to multiple buffers"); + goto error; + } + } + if ((in_flags & GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_VIEW_FIRST) == (out_flags & GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_VIEW_FIRST)) { l_index = 0; |