From e284e5e0d0c8e4be2c9c9786da60e6641c68b79e Mon Sep 17 00:00:00 2001 From: gb Date: Thu, 11 Mar 2010 13:58:32 +0000 Subject: [PATCH] Use GstVaapiChromaType abstraction. --- gst-libs/gst/vaapi/gstvaapisurface.c | 94 ++++++++++++++++++++++-------------- gst-libs/gst/vaapi/gstvaapisurface.h | 24 ++++++--- 2 files changed, 75 insertions(+), 43 deletions(-) diff --git a/gst-libs/gst/vaapi/gstvaapisurface.c b/gst-libs/gst/vaapi/gstvaapisurface.c index efc9719..b15d05a 100644 --- a/gst-libs/gst/vaapi/gstvaapisurface.c +++ b/gst-libs/gst/vaapi/gstvaapisurface.c @@ -38,7 +38,7 @@ struct _GstVaapiSurfacePrivate { VASurfaceID surface_id; guint width; guint height; - guint format; + GstVaapiChromaType chroma_type; }; enum { @@ -48,7 +48,7 @@ enum { PROP_SURFACE_ID, PROP_WIDTH, PROP_HEIGHT, - PROP_FORMAT + PROP_CHROMA_TYPE }; static void @@ -77,12 +77,28 @@ gst_vaapi_surface_create(GstVaapiSurface *surface) GstVaapiSurfacePrivate * const priv = surface->priv; VASurfaceID surface_id; VAStatus status; + guint format; + + switch (priv->chroma_type) { + case GST_VAAPI_CHROMA_TYPE_YUV420: + format = VA_RT_FORMAT_YUV420; + break; + case GST_VAAPI_CHROMA_TYPE_YUV422: + format = VA_RT_FORMAT_YUV422; + break; + case GST_VAAPI_CHROMA_TYPE_YUV444: + format = VA_RT_FORMAT_YUV444; + break; + default: + GST_DEBUG("unsupported chroma-type %u\n", priv->chroma_type); + return FALSE; + } status = vaCreateSurfaces( gst_vaapi_display_get_display(priv->display), priv->width, priv->height, - priv->format, + format, 1, &surface_id ); if (!vaapi_check_status(status, "vaCreateSurfaces()")) @@ -101,10 +117,12 @@ gst_vaapi_surface_finalize(GObject *object) } static void -gst_vaapi_surface_set_property(GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) +gst_vaapi_surface_set_property( + GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec +) { GstVaapiSurface * const surface = GST_VAAPI_SURFACE(object); GstVaapiSurfacePrivate * const priv = surface->priv; @@ -119,8 +137,8 @@ gst_vaapi_surface_set_property(GObject *object, case PROP_HEIGHT: priv->height = g_value_get_uint(value); break; - case PROP_FORMAT: - priv->format = g_value_get_uint(value); + case PROP_CHROMA_TYPE: + priv->chroma_type = g_value_get_uint(value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); @@ -129,10 +147,12 @@ gst_vaapi_surface_set_property(GObject *object, } static void -gst_vaapi_surface_get_property(GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) +gst_vaapi_surface_get_property( + GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec +) { GstVaapiSurface * const surface = GST_VAAPI_SURFACE(object); @@ -149,8 +169,8 @@ gst_vaapi_surface_get_property(GObject *object, case PROP_HEIGHT: g_value_set_uint(value, gst_vaapi_surface_get_height(surface)); break; - case PROP_FORMAT: - g_value_set_uint(value, gst_vaapi_surface_get_format(surface)); + case PROP_CHROMA_TYPE: + g_value_set_uint(value, gst_vaapi_surface_get_chroma_type(surface)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); @@ -221,10 +241,10 @@ gst_vaapi_surface_class_init(GstVaapiSurfaceClass *klass) g_object_class_install_property (object_class, - PROP_FORMAT, - g_param_spec_uint("format", - "format", - "VA surface format", + PROP_CHROMA_TYPE, + g_param_spec_uint("chroma-type", + "chroma-type", + "VA surface chroma type", 0, G_MAXUINT32, 0, G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY)); } @@ -239,22 +259,24 @@ gst_vaapi_surface_init(GstVaapiSurface *surface) priv->surface_id = VA_INVALID_SURFACE; priv->width = 0; priv->height = 0; - priv->format = 0; + priv->chroma_type = 0; } GstVaapiSurface * -gst_vaapi_surface_new(GstVaapiDisplay *display, - guint width, - guint height, - guint format) +gst_vaapi_surface_new( + GstVaapiDisplay *display, + GstVaapiChromaType chroma_type, + guint width, + guint height +) { - GST_DEBUG("size %ux%u, format 0x%x", width, height, format); + GST_DEBUG("size %ux%u, chroma type 0x%x", width, height, chroma_type); return g_object_new(GST_VAAPI_TYPE_SURFACE, - "display", display, - "width", width, - "height", height, - "format", format, + "display", display, + "width", width, + "height", height, + "chroma-type", chroma_type, NULL); } @@ -274,26 +296,26 @@ gst_vaapi_surface_get_display(GstVaapiSurface *surface) return surface->priv->display; } -guint -gst_vaapi_surface_get_width(GstVaapiSurface *surface) +GstVaapiChromaType +gst_vaapi_surface_get_chroma_type(GstVaapiSurface *surface) { g_return_val_if_fail(GST_VAAPI_IS_SURFACE(surface), 0); - return surface->priv->width; + return surface->priv->chroma_type; } guint -gst_vaapi_surface_get_height(GstVaapiSurface *surface) +gst_vaapi_surface_get_width(GstVaapiSurface *surface) { g_return_val_if_fail(GST_VAAPI_IS_SURFACE(surface), 0); - return surface->priv->height; + return surface->priv->width; } guint -gst_vaapi_surface_get_format(GstVaapiSurface *surface) +gst_vaapi_surface_get_height(GstVaapiSurface *surface) { g_return_val_if_fail(GST_VAAPI_IS_SURFACE(surface), 0); - return surface->priv->format; + return surface->priv->height; } diff --git a/gst-libs/gst/vaapi/gstvaapisurface.h b/gst-libs/gst/vaapi/gstvaapisurface.h index 7d8f276..43c8f59 100644 --- a/gst-libs/gst/vaapi/gstvaapisurface.h +++ b/gst-libs/gst/vaapi/gstvaapisurface.h @@ -25,6 +25,14 @@ G_BEGIN_DECLS +typedef enum _GstVaapiChromaType GstVaapiChromaType; + +enum _GstVaapiChromaType { + GST_VAAPI_CHROMA_TYPE_YUV420 = 1, + GST_VAAPI_CHROMA_TYPE_YUV422, + GST_VAAPI_CHROMA_TYPE_YUV444 +}; + #define GST_VAAPI_TYPE_SURFACE \ (gst_vaapi_surface_get_type()) @@ -69,10 +77,12 @@ GType gst_vaapi_surface_get_type(void); GstVaapiSurface * -gst_vaapi_surface_new(GstVaapiDisplay *display, - guint width, - guint height, - guint format); +gst_vaapi_surface_new( + GstVaapiDisplay *display, + GstVaapiChromaType chroma_type, + guint width, + guint height +); VASurfaceID gst_vaapi_surface_get_id(GstVaapiSurface *surface); @@ -80,15 +90,15 @@ gst_vaapi_surface_get_id(GstVaapiSurface *surface); GstVaapiDisplay * gst_vaapi_surface_get_display(GstVaapiSurface *surface); +GstVaapiChromaType +gst_vaapi_surface_get_chroma_type(GstVaapiSurface *surface); + guint gst_vaapi_surface_get_width(GstVaapiSurface *surface); guint gst_vaapi_surface_get_height(GstVaapiSurface *surface); -guint -gst_vaapi_surface_get_format(GstVaapiSurface *surface); - G_END_DECLS #endif /* GST_VAAPI_SURFACE_H */ -- 2.7.4