glupload: Fix DirectVIV uploader for formats with a single plane
authorSebastian Dröge <sebastian@centricular.com>
Mon, 12 Jun 2017 19:29:01 +0000 (22:29 +0300)
committerTim-Philipp Müller <tim@centricular.com>
Sat, 9 Dec 2017 19:32:28 +0000 (19:32 +0000)
We have to pass the "height" as height = vmeta->offset[1] / width to the
API, which of course does not work well for formats with only a single
plane. Use the whole memory size instead of the offset in that case.

gst-libs/gst/gl/gstglupload.c

index 810f4fa..7bc1b6d 100644 (file)
@@ -1446,10 +1446,16 @@ _directviv_upload_perform_gl_thread (GstGLContext * context,
   vmeta = gst_buffer_get_video_meta (directviv->inbuf);
   if (vmeta) {
     width = vmeta->stride[0];
-    height = vmeta->offset[1] / width;
+    if (GST_VIDEO_INFO_N_PLANES (in_info) == 1)
+      height = gst_memory_get_sizes (in_mem, NULL, NULL) / width;
+    else
+      height = vmeta->offset[1] / width;
   } else {
     width = GST_VIDEO_INFO_PLANE_STRIDE (in_info, 0);
-    height = GST_VIDEO_INFO_PLANE_OFFSET (in_info, 1) / width;
+    if (GST_VIDEO_INFO_N_PLANES (in_info) == 1)
+      height = gst_memory_get_sizes (in_mem, NULL, NULL) / width;
+    else
+      height = GST_VIDEO_INFO_PLANE_OFFSET (in_info, 1) / width;
   }
   width /= GST_VIDEO_INFO_COMP_PSTRIDE (in_info, 0);