From: gb Date: Mon, 15 Mar 2010 11:49:03 +0000 (+0000) Subject: Add gst_vaapi_{get,put}_image() API. X-Git-Tag: 1.19.3~503^2~3738 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d69e59ffee2896a6d9988c1674a1b8a8c663a6c1;p=platform%2Fupstream%2Fgstreamer.git Add gst_vaapi_{get,put}_image() API. --- diff --git a/gst-libs/gst/vaapi/gstvaapiimage.c b/gst-libs/gst/vaapi/gstvaapiimage.c index 52ad804..d84b894 100644 --- a/gst-libs/gst/vaapi/gstvaapiimage.c +++ b/gst-libs/gst/vaapi/gstvaapiimage.c @@ -319,6 +319,19 @@ gst_vaapi_image_get_height(GstVaapiImage *image) return image->priv->height; } +void +gst_vaapi_image_get_size(GstVaapiImage *image, guint *pwidth, guint *pheight) +{ + g_return_val_if_fail(GST_VAAPI_IS_IMAGE(image), 0); + g_return_val_if_fail(image->priv->is_constructed, FALSE); + + if (pwidth) + *pwidth = image->priv->width; + + if (pheight) + *pheight = image->priv->height; +} + guint gst_vaapi_image_get_format(GstVaapiImage *image) { diff --git a/gst-libs/gst/vaapi/gstvaapiimage.h b/gst-libs/gst/vaapi/gstvaapiimage.h index 237e8c5..eb8f37b 100644 --- a/gst-libs/gst/vaapi/gstvaapiimage.h +++ b/gst-libs/gst/vaapi/gstvaapiimage.h @@ -90,6 +90,9 @@ gst_vaapi_image_get_width(GstVaapiImage *image); guint gst_vaapi_image_get_height(GstVaapiImage *image); +void +gst_vaapi_image_get_size(GstVaapiImage *image, guint *pwidth, guint *pheight); + guint gst_vaapi_image_get_format(GstVaapiImage *image); diff --git a/gst-libs/gst/vaapi/gstvaapisurface.c b/gst-libs/gst/vaapi/gstvaapisurface.c index dc41495..4f859f0 100644 --- a/gst-libs/gst/vaapi/gstvaapisurface.c +++ b/gst-libs/gst/vaapi/gstvaapisurface.c @@ -336,3 +336,63 @@ gst_vaapi_surface_get_size( *pheight = gst_vaapi_surface_get_height(surface); } +gboolean +gst_vaapi_surface_get_image(GstVaapiSurface *surface, GstVaapiImage *image) +{ + VAImageID image_id; + VAStatus status; + guint width, height; + + g_return_val_if_fail(GST_VAAPI_IS_SURFACE(surface), FALSE); + g_return_val_if_fail(GST_VAAPI_IS_IMAGE(image), FALSE); + + gst_vaapi_image_get_size(image, &width, &height); + if (width != surface->priv->width || height != surface->priv->height) + return FALSE; + + image_id = gst_vaapi_image_get_id(image); + if (image_id == VA_INVALID_ID) + return FALSE; + + status = vaGetImage( + gst_vaapi_display_get_display(surface->priv->display), + surface->priv->surface_id, + 0, 0, width, height, + image_id + ); + if (!vaapi_check_status(status, "vaGetImage()")) + return FALSE; + + return TRUE; +} + +gboolean +gst_vaapi_surface_put_image(GstVaapiSurface *surface, GstVaapiImage *image) +{ + VAImageID image_id; + VAStatus status; + guint width, height; + + g_return_val_if_fail(GST_VAAPI_IS_SURFACE(surface), FALSE); + g_return_val_if_fail(GST_VAAPI_IS_IMAGE(image), FALSE); + + gst_vaapi_image_get_size(image, &width, &height); + if (width != surface->priv->width || height != surface->priv->height) + return FALSE; + + image_id = gst_vaapi_image_get_id(image); + if (image_id == VA_INVALID_ID) + return FALSE; + + status = vaPutImage( + gst_vaapi_display_get_display(surface->priv->display), + surface->priv->surface_id, + image_id, + 0, 0, width, height, + 0, 0, width, height + ); + if (!vaapi_check_status(status, "vaPutImage()")) + return FALSE; + + return TRUE; +} diff --git a/gst-libs/gst/vaapi/gstvaapisurface.h b/gst-libs/gst/vaapi/gstvaapisurface.h index 3e859a3..445ca8f 100644 --- a/gst-libs/gst/vaapi/gstvaapisurface.h +++ b/gst-libs/gst/vaapi/gstvaapisurface.h @@ -21,6 +21,7 @@ #ifndef GST_VAAPI_SURFACE_H #define GST_VAAPI_SURFACE_H +#include #include G_BEGIN_DECLS @@ -106,6 +107,12 @@ gst_vaapi_surface_get_size( guint *pheight ); +gboolean +gst_vaapi_surface_get_image(GstVaapiSurface *surface, GstVaapiImage *image); + +gboolean +gst_vaapi_surface_put_image(GstVaapiSurface *surface, GstVaapiImage *image); + G_END_DECLS #endif /* GST_VAAPI_SURFACE_H */