mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-28 19:20:35 +00:00
guard buffer export API if not available
The support for buffer exports in VA-API was added in version 0.36. These interfaces are for interop with EGL, OpenCL, etc. GStreamer-VAAPI uses it for a dmabuf memory allocator. Though, gstreamer-vaapi has to support VA-API versions ranging from 0.30.4, which doesn't support it. This patch guards all the buffer exports handling (and dmabuf allocator) if the detected VA-API version is below 0.36. https://bugzilla.gnome.org/show_bug.cgi?id=746405
This commit is contained in:
parent
c750fa937d
commit
38f8fea4bb
3 changed files with 27 additions and 1 deletions
|
@ -77,6 +77,7 @@ to_GstVaapiBufferMemoryType (guint va_type)
|
|||
static gboolean
|
||||
gst_vaapi_buffer_proxy_acquire_handle (GstVaapiBufferProxy * proxy)
|
||||
{
|
||||
#if VA_CHECK_VERSION (0,36,0)
|
||||
const guint mem_type = proxy->va_info.mem_type;
|
||||
VAStatus va_status;
|
||||
|
||||
|
@ -95,11 +96,15 @@ gst_vaapi_buffer_proxy_acquire_handle (GstVaapiBufferProxy * proxy)
|
|||
if (proxy->va_info.mem_type != mem_type)
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
#else
|
||||
return FALSE;
|
||||
#endif
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gst_vaapi_buffer_proxy_release_handle (GstVaapiBufferProxy * proxy)
|
||||
{
|
||||
#if VA_CHECK_VERSION (0,36,0)
|
||||
VAStatus va_status;
|
||||
|
||||
if (!proxy->va_info.handle)
|
||||
|
@ -115,6 +120,9 @@ gst_vaapi_buffer_proxy_release_handle (GstVaapiBufferProxy * proxy)
|
|||
if (!vaapi_check_status (va_status, "vaReleaseBufferHandle()"))
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
#else
|
||||
return FALSE;
|
||||
#endif
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -143,6 +151,7 @@ GstVaapiBufferProxy *
|
|||
gst_vaapi_buffer_proxy_new (guintptr handle, guint type, gsize size,
|
||||
GDestroyNotify destroy_func, gpointer user_data)
|
||||
{
|
||||
#if VA_CHECK_VERSION (0,36,0)
|
||||
GstVaapiBufferProxy *proxy;
|
||||
|
||||
g_return_val_if_fail (handle != 0, NULL);
|
||||
|
@ -171,12 +180,16 @@ error_unsupported_mem_type:
|
|||
GST_ERROR ("unsupported buffer type (%d)", proxy->type);
|
||||
gst_vaapi_buffer_proxy_unref_internal (proxy);
|
||||
return NULL;
|
||||
#else
|
||||
return NULL;
|
||||
#endif
|
||||
}
|
||||
|
||||
GstVaapiBufferProxy *
|
||||
gst_vaapi_buffer_proxy_new_from_object (GstVaapiObject * object,
|
||||
VABufferID buf_id, guint type, GDestroyNotify destroy_func, gpointer data)
|
||||
{
|
||||
#if VA_CHECK_VERSION (0,36,0)
|
||||
GstVaapiBufferProxy *proxy;
|
||||
|
||||
g_return_val_if_fail (object != NULL, NULL);
|
||||
|
@ -208,6 +221,9 @@ error_acquire_handle:
|
|||
GST_ERROR ("failed to acquire the underlying VA buffer handle");
|
||||
gst_vaapi_buffer_proxy_unref_internal (proxy);
|
||||
return NULL;
|
||||
#else
|
||||
return NULL;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -288,7 +304,11 @@ gst_vaapi_buffer_proxy_get_handle (GstVaapiBufferProxy * proxy)
|
|||
{
|
||||
g_return_val_if_fail (proxy != NULL, 0);
|
||||
|
||||
#if VA_CHECK_VERSION (0,36,0)
|
||||
return GST_VAAPI_BUFFER_PROXY_HANDLE (proxy);
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -304,5 +324,9 @@ gst_vaapi_buffer_proxy_get_size (GstVaapiBufferProxy * proxy)
|
|||
{
|
||||
g_return_val_if_fail (proxy != NULL, 0);
|
||||
|
||||
#if VA_CHECK_VERSION (0,36,0)
|
||||
return GST_VAAPI_BUFFER_PROXY_SIZE (proxy);
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
|
|
@ -68,7 +68,9 @@ struct _GstVaapiBufferProxy {
|
|||
gpointer destroy_data;
|
||||
guint type;
|
||||
VABufferID va_buf;
|
||||
#if VA_CHECK_VERSION (0,36,0)
|
||||
VABufferInfo va_info;
|
||||
#endif
|
||||
};
|
||||
|
||||
G_GNUC_INTERNAL
|
||||
|
|
|
@ -225,7 +225,7 @@ static gboolean
|
|||
gst_vaapi_surface_create_from_buffer_proxy (GstVaapiSurface * surface,
|
||||
GstVaapiBufferProxy * proxy, const GstVideoInfo * vip)
|
||||
{
|
||||
#if VA_CHECK_VERSION (0,34,0)
|
||||
#if VA_CHECK_VERSION (0,36,0)
|
||||
GstVaapiDisplay *const display = GST_VAAPI_OBJECT_DISPLAY (surface);
|
||||
GstVideoFormat format;
|
||||
VASurfaceID surface_id;
|
||||
|
|
Loading…
Reference in a new issue