VASurfaceID surface_id;
guint width;
guint height;
- guint format;
+ GstVaapiChromaType chroma_type;
};
enum {
PROP_SURFACE_ID,
PROP_WIDTH,
PROP_HEIGHT,
- PROP_FORMAT
+ PROP_CHROMA_TYPE
};
static void
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()"))
}
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;
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);
}
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);
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);
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));
}
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);
}
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;
}
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())
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);
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 */