plugins: enable direct rendering with envvar

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
This commit is contained in:
Víctor Manuel Jáquez Leal 2016-12-08 18:51:54 +01:00
parent ebca86dcc7
commit 24af97a7d1
2 changed files with 6 additions and 1 deletions

View file

@ -247,6 +247,9 @@ gst_vaapi_plugin_base_init (GstVaapiPluginBase * plugin,
if (!(GST_OBJECT_FLAGS (plugin) & GST_ELEMENT_FLAG_SINK)) if (!(GST_OBJECT_FLAGS (plugin) & GST_ELEMENT_FLAG_SINK))
plugin->srcpad = gst_element_get_static_pad (GST_ELEMENT (plugin), "src"); plugin->srcpad = gst_element_get_static_pad (GST_ELEMENT (plugin), "src");
gst_video_info_init (&plugin->srcpad_info); gst_video_info_init (&plugin->srcpad_info);
plugin->enable_direct_rendering =
(g_getenv ("GST_VAAPI_ENABLE_DIRECT_RENDERING") != NULL);
} }
void void
@ -592,7 +595,7 @@ ensure_srcpad_allocator (GstVaapiPluginBase * plugin, GstVideoInfo * vinfo,
gst_vaapi_dmabuf_allocator_new (plugin->display, vinfo, gst_vaapi_dmabuf_allocator_new (plugin->display, vinfo,
get_dmabuf_surface_allocation_flags (), GST_PAD_SRC); get_dmabuf_surface_allocation_flags (), GST_PAD_SRC);
} }
} else { } else if (plugin->enable_direct_rendering) {
usage_flag = GST_VAAPI_IMAGE_USAGE_FLAG_DIRECT_RENDER; usage_flag = GST_VAAPI_IMAGE_USAGE_FLAG_DIRECT_RENDER;
GST_INFO_OBJECT (plugin, "enabling direct rendering in source allocator"); GST_INFO_OBJECT (plugin, "enabling direct rendering in source allocator");
} }

View file

@ -149,6 +149,8 @@ struct _GstVaapiPluginBase
GstAllocator *sinkpad_allocator; GstAllocator *sinkpad_allocator;
GstAllocator *srcpad_allocator; GstAllocator *srcpad_allocator;
gboolean srcpad_can_dmabuf; gboolean srcpad_can_dmabuf;
gboolean enable_direct_rendering;
}; };
struct _GstVaapiPluginBaseClass struct _GstVaapiPluginBaseClass