plugins: enable direct rendering with envvar
authorVíctor Manuel Jáquez Leal <victorx.jaquez@intel.com>
Thu, 8 Dec 2016 17:51:54 +0000 (18:51 +0100)
committerVíctor Manuel Jáquez Leal <victorx.jaquez@intel.com>
Wed, 12 Apr 2017 18:39:06 +0000 (20:39 +0200)
Direct rendering (use vaDeriveImage rather than vaPutImage) has better
performance in some Intel platforms (Haswell, for example) but in others
(Skylake) is the opposite.

In order to have some control, the patch enables the direct rendering
through the environment variable GST_VAAPI_ENABLE_DIRECT_RENDERING.

Also it seems to generating some problems with gallium/radeon backend.
See bug #779642.

https://bugzilla.gnome.org/show_bug.cgi?id=775848

gst/vaapi/gstvaapipluginbase.c
gst/vaapi/gstvaapipluginbase.h

index a60498d..8c2b84a 100644 (file)
@@ -247,6 +247,9 @@ gst_vaapi_plugin_base_init (GstVaapiPluginBase * plugin,
   if (!(GST_OBJECT_FLAGS (plugin) & GST_ELEMENT_FLAG_SINK))
     plugin->srcpad = gst_element_get_static_pad (GST_ELEMENT (plugin), "src");
   gst_video_info_init (&plugin->srcpad_info);
+
+  plugin->enable_direct_rendering =
+      (g_getenv ("GST_VAAPI_ENABLE_DIRECT_RENDERING") != NULL);
 }
 
 void
@@ -592,7 +595,7 @@ ensure_srcpad_allocator (GstVaapiPluginBase * plugin, GstVideoInfo * vinfo,
             gst_vaapi_dmabuf_allocator_new (plugin->display, vinfo,
             get_dmabuf_surface_allocation_flags (), GST_PAD_SRC);
       }
-    } else {
+    } else if (plugin->enable_direct_rendering) {
       usage_flag = GST_VAAPI_IMAGE_USAGE_FLAG_DIRECT_RENDER;
       GST_INFO_OBJECT (plugin, "enabling direct rendering in source allocator");
     }
index bfeeb10..3346ed4 100644 (file)
@@ -149,6 +149,8 @@ struct _GstVaapiPluginBase
   GstAllocator *sinkpad_allocator;
   GstAllocator *srcpad_allocator;
   gboolean srcpad_can_dmabuf;
+
+  gboolean enable_direct_rendering;
 };
 
 struct _GstVaapiPluginBaseClass