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;
}
Exemple #2
0
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);
}
Exemple #3
0
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);
}
Exemple #6
0
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)));
}