static GstVaapiBufferProxy * gst_vaapi_surface_get_drm_buf_handle (GstVaapiSurface * surface, guint type) { GstVaapiBufferProxy *proxy; GstVaapiImage *image; image = gst_vaapi_surface_derive_image (surface); if (!image) goto error_derive_image; proxy = gst_vaapi_buffer_proxy_new_from_object (GST_VAAPI_OBJECT (surface), image->internal_image.buf, type, gst_vaapi_object_unref, image); if (!proxy) goto error_alloc_export_buffer; return proxy; /* ERRORS */ error_derive_image: GST_ERROR ("failed to extract image handle from surface"); return NULL; error_alloc_export_buffer: GST_ERROR ("failed to allocate export buffer proxy"); gst_vaapi_object_unref (image); return NULL; }
static void gst_vaapi_object_finalize(GObject *object) { GstVaapiObjectPrivate * const priv = GST_VAAPI_OBJECT(object)->priv; priv->id = GST_VAAPI_ID_NONE; g_clear_object(&priv->display); G_OBJECT_CLASS(gst_vaapi_object_parent_class)->finalize(object); }
static void gst_vaapi_object_dispose(GObject *object) { GstVaapiObjectPrivate * const priv = GST_VAAPI_OBJECT(object)->priv; if (!priv->is_destroying) { priv->is_destroying = TRUE; g_signal_emit(object, object_signals[DESTROY], 0); priv->is_destroying = FALSE; } G_OBJECT_CLASS(gst_vaapi_object_parent_class)->dispose(object); }
static gboolean set_surface_proxy (GstVaapiVideoMeta * meta, GstVaapiSurfaceProxy * proxy) { GstVaapiSurface *surface; surface = GST_VAAPI_SURFACE_PROXY_SURFACE (proxy); if (!surface) return FALSE; meta->proxy = gst_vaapi_surface_proxy_ref (proxy); set_display (meta, gst_vaapi_object_get_display (GST_VAAPI_OBJECT (surface))); return TRUE; }
static void gst_vaapi_object_finalize(GObject *object) { GstVaapiObjectPrivate * const priv = GST_VAAPI_OBJECT(object)->priv; priv->id = GST_VAAPI_ID_NONE; if (priv->display) { g_object_unref(priv->display); priv->display = NULL; } G_OBJECT_CLASS(gst_vaapi_object_parent_class)->finalize(object); }
static void gst_vaapi_object_set_property( GObject *gobject, guint prop_id, const GValue *value, GParamSpec *pspec ) { GstVaapiObject * const object = GST_VAAPI_OBJECT(gobject); switch (prop_id) { case PROP_DISPLAY: object->priv->display = g_object_ref(g_value_get_object(value)); break; case PROP_ID: object->priv->id = gst_vaapi_value_get_id(value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, pspec); break; } }
static inline void set_image (GstVaapiVideoMeta * meta, GstVaapiImage * image) { meta->image = gst_vaapi_object_ref (image); set_display (meta, gst_vaapi_object_get_display (GST_VAAPI_OBJECT (image))); }