gl/upload: set out_tex after reset, not before
authorJulien Isorce <julien.isorce@collabora.co.uk>
Mon, 12 May 2014 12:32:31 +0000 (13:32 +0100)
committerTim-Philipp Müller <tim@centricular.com>
Sat, 9 Dec 2017 19:31:40 +0000 (19:31 +0000)
Fix a regression introduced recently with the lazy init.
It was happening when calling gst_video_gl_texture_upload_meta_upload
from an aplication. So not using gst_gl_upload_perform_with_buffer.

gst-libs/gst/gl/gstglupload.c

index 9c5fd8f..4c3193e 100644 (file)
@@ -378,24 +378,6 @@ _do_upload_for_meta (GstGLUpload * upload, GstVideoGLTextureUploadMeta * meta)
   g_return_val_if_fail (upload != NULL, FALSE);
   g_return_val_if_fail (meta != NULL, FALSE);
 
-  v_meta = gst_buffer_get_video_meta (upload->priv->buffer);
-
-  if (!upload->initted) {
-    GstVideoFormat v_format;
-    guint width, height;
-
-    if (v_meta == NULL)
-      return FALSE;
-
-    v_format = v_meta->format;
-    width = v_meta->width;
-    height = v_meta->height;
-
-    gst_video_info_set_format (&in_info, v_format, width, height);
-
-    _gst_gl_upload_set_format_unlocked (upload, &in_info);
-  }
-
   /* GstGLMemory */
   mem = gst_buffer_peek_memory (upload->priv->buffer, 0);
 
@@ -410,6 +392,8 @@ _do_upload_for_meta (GstGLUpload * upload, GstVideoGLTextureUploadMeta * meta)
       return TRUE;
   }
 
+  v_meta = gst_buffer_get_video_meta (upload->priv->buffer);
+
   if (v_meta == NULL)
     return FALSE;
 
@@ -513,11 +497,22 @@ _gst_gl_upload_perform_for_gl_texture_upload_meta (GstVideoGLTextureUploadMeta *
 
   g_mutex_lock (&upload->lock);
 
-  if (!upload->out_tex)
+  if (!upload->initted) {
+    GstVideoInfo in_info;
+    GstVideoMeta *v_meta = gst_buffer_get_video_meta (upload->priv->buffer);
+
+    if (v_meta == NULL)
+      return FALSE;
+
+    gst_video_info_set_format (&in_info, v_meta->format, v_meta->width, v_meta->height);
+
+    _gst_gl_upload_set_format_unlocked (upload, &in_info);
+
     upload->out_tex = gst_gl_memory_wrapped_texture (upload->context,
         texture_id[0], GST_VIDEO_GL_TEXTURE_TYPE_RGBA,
         GST_VIDEO_INFO_WIDTH (&upload->in_info),
-        GST_VIDEO_INFO_HEIGHT (&upload->in_info), NULL, NULL);;
+        GST_VIDEO_INFO_HEIGHT (&upload->in_info), NULL, NULL);
+  }
 
   /* FIXME: kinda breaks the abstraction */
   if (upload->out_tex->tex_id != texture_id[0]) {