mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-17 11:45:25 +00:00
Add GstVaapiID abstraction.
This commit is contained in:
parent
28afdd6f83
commit
647621cf3c
5 changed files with 220 additions and 2 deletions
|
@ -158,6 +158,9 @@ GST_VAAPI_VIDEO_BUFFER_GET_CLASS
|
|||
<SECTION>
|
||||
<FILE>gstvaapitypes</FILE>
|
||||
<TITLE>Basic data structures</TITLE>
|
||||
GstVaapiID
|
||||
gst_vaapi_value_get_id
|
||||
gst_vaapi_value_set_id
|
||||
GstVaapiPoint
|
||||
GstVaapiRectangle
|
||||
</SECTION>
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
gst_vaapi_display_get_type
|
||||
gst_vaapi_display_x11_get_type
|
||||
gst_vaapi_id_get_type
|
||||
gst_vaapi_image_get_type
|
||||
gst_vaapi_image_pool_get_type
|
||||
gst_vaapi_object_get_type
|
||||
|
|
|
@ -16,6 +16,7 @@ libgstvaapi_source_c = \
|
|||
gstvaapisubpicture.c \
|
||||
gstvaapisurface.c \
|
||||
gstvaapisurfacepool.c \
|
||||
gstvaapitypes.c \
|
||||
gstvaapiutils.c \
|
||||
gstvaapivideobuffer.c \
|
||||
gstvaapivideopool.c \
|
||||
|
|
164
gst-libs/gst/vaapi/gstvaapitypes.c
Normal file
164
gst-libs/gst/vaapi/gstvaapitypes.c
Normal file
|
@ -0,0 +1,164 @@
|
|||
/*
|
||||
* gstvaapitypes.h - Basic types
|
||||
*
|
||||
* gstreamer-vaapi (C) 2010 Splitted-Desktop Systems
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
/**
|
||||
* SECTION:gstvaapitypes
|
||||
* @short_description: Basic types
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
#include <gst/gstvalue.h>
|
||||
#include <gobject/gvaluecollector.h>
|
||||
#include "gstvaapitypes.h"
|
||||
|
||||
#if GST_VAAPI_TYPE_ID_SIZE == 4
|
||||
# define GST_VAAPI_VALUE_ID_(cvalue) ((cvalue).v_int)
|
||||
# define GST_VAAPI_VALUE_ID_CFORMAT "i"
|
||||
#elif GST_VAAPI_TYPE_ID_SIZE == 8
|
||||
# define GST_VAAPI_VALUE_ID_(cvalue) ((cvalue).v_int64)
|
||||
# define GST_VAAPI_VALUE_ID_CFORMAT "q"
|
||||
#else
|
||||
# error "unsupported GstVaapiID size"
|
||||
#endif
|
||||
#define GST_VAAPI_VALUE_ID(value) GST_VAAPI_VALUE_ID_((value)->data[0])
|
||||
|
||||
static void
|
||||
gst_vaapi_value_id_init(GValue *value)
|
||||
{
|
||||
GST_VAAPI_VALUE_ID(value) = 0;
|
||||
}
|
||||
|
||||
static void
|
||||
gst_vaapi_value_id_copy(const GValue *src_value, GValue *dst_value)
|
||||
{
|
||||
GST_VAAPI_VALUE_ID(dst_value) = GST_VAAPI_VALUE_ID(src_value);
|
||||
}
|
||||
|
||||
static gchar *
|
||||
gst_vaapi_value_id_collect(
|
||||
GValue *value,
|
||||
guint n_collect_values,
|
||||
GTypeCValue *collect_values,
|
||||
guint collect_flags
|
||||
)
|
||||
{
|
||||
GST_VAAPI_VALUE_ID(value) = GST_VAAPI_VALUE_ID_(collect_values[0]);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static gchar *
|
||||
gst_vaapi_value_id_lcopy(
|
||||
const GValue *value,
|
||||
guint n_collect_values,
|
||||
GTypeCValue *collect_values,
|
||||
guint collect_flags
|
||||
)
|
||||
{
|
||||
GstVaapiID *id_p = collect_values[0].v_pointer;
|
||||
|
||||
if (!id_p)
|
||||
return g_strdup_printf("value location for `%s' passed as NULL",
|
||||
G_VALUE_TYPE_NAME(value));
|
||||
|
||||
*id_p = GST_VAAPI_VALUE_ID(value);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static GTypeInfo gst_vaapi_type_info = {
|
||||
0,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
0,
|
||||
0,
|
||||
NULL,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static GTypeFundamentalInfo gst_vaapi_type_finfo = {
|
||||
0
|
||||
};
|
||||
|
||||
#define GST_VAAPI_TYPE_DEFINE(type, name) \
|
||||
GType gst_vaapi_ ## type ## _get_type(void) \
|
||||
{ \
|
||||
static GType gst_vaapi_ ## type ## _type = 0; \
|
||||
\
|
||||
if (G_UNLIKELY(gst_vaapi_ ## type ## _type == 0)) { \
|
||||
gst_vaapi_type_info.value_table = \
|
||||
&gst_vaapi_ ## type ## _value_table; \
|
||||
gst_vaapi_ ## type ## _type = g_type_register_fundamental( \
|
||||
g_type_fundamental_next(), \
|
||||
name, \
|
||||
&gst_vaapi_type_info, \
|
||||
&gst_vaapi_type_finfo, \
|
||||
0 \
|
||||
); \
|
||||
} \
|
||||
\
|
||||
return gst_vaapi_ ## type ## _type; \
|
||||
}
|
||||
|
||||
static const GTypeValueTable gst_vaapi_id_value_table = {
|
||||
gst_vaapi_value_id_init,
|
||||
NULL,
|
||||
gst_vaapi_value_id_copy,
|
||||
NULL,
|
||||
GST_VAAPI_VALUE_ID_CFORMAT,
|
||||
gst_vaapi_value_id_collect,
|
||||
"p",
|
||||
gst_vaapi_value_id_lcopy
|
||||
};
|
||||
|
||||
GST_VAAPI_TYPE_DEFINE(id, "GstVaapiID");
|
||||
|
||||
/**
|
||||
* gst_vaapi_value_get_id:
|
||||
* @value: a GValue initialized to #GstVaapiID
|
||||
*
|
||||
* Gets the integer contained in @value.
|
||||
*
|
||||
* Return value: the integer contained in @value
|
||||
*/
|
||||
GstVaapiID
|
||||
gst_vaapi_value_get_id(const GValue *value)
|
||||
{
|
||||
g_return_val_if_fail(GST_VAAPI_VALUE_HOLDS_ID(value), 0);
|
||||
|
||||
return GST_VAAPI_VALUE_ID(value);
|
||||
}
|
||||
|
||||
/**
|
||||
* gst_vaapi_value_set_id:
|
||||
* @value: a GValue initialized to #GstVaapiID
|
||||
* @id: a #GstVaapiID
|
||||
*
|
||||
* Sets the integer contained in @id to @value.
|
||||
*/
|
||||
void
|
||||
gst_vaapi_value_set_id(GValue *value, GstVaapiID id)
|
||||
{
|
||||
g_return_if_fail(GST_VAAPI_VALUE_HOLDS_ID(value));
|
||||
|
||||
GST_VAAPI_VALUE_ID(value) = id;
|
||||
}
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* gstvaapitypes.h - Misc types
|
||||
* gstvaapitypes.h - Basic types
|
||||
*
|
||||
* gstreamer-vaapi (C) 2010 Splitted-Desktop Systems
|
||||
*
|
||||
|
@ -21,10 +21,59 @@
|
|||
#ifndef GST_VAAPI_TYPES_H
|
||||
#define GST_VAAPI_TYPES_H
|
||||
|
||||
#include <glib/gtypes.h>
|
||||
#include <glib-object.h>
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
/**
|
||||
* GstVaapiID:
|
||||
*
|
||||
* An integer large enough to hold a generic VA id or a pointer
|
||||
* wherever necessary.
|
||||
*/
|
||||
#if defined(GLIB_SIZEOF_VOID_P)
|
||||
# define GST_VAAPI_TYPE_ID_SIZE GLIB_SIZEOF_VOID_P
|
||||
#elif G_MAXULONG == 0xffffffff
|
||||
# define GST_VAAPI_TYPE_ID_SIZE 4
|
||||
#elif G_MAXULONG == 0xffffffffffffffffull
|
||||
# define GST_VAAPI_TYPE_ID_SIZE 8
|
||||
#else
|
||||
# error "could not determine size of GstVaapiID"
|
||||
#endif
|
||||
#if GST_VAAPI_TYPE_ID_SIZE == 4
|
||||
typedef guint32 GstVaapiID;
|
||||
#elif GST_VAAPI_TYPE_ID_SIZE == 8
|
||||
typedef guint64 GstVaapiID;
|
||||
#else
|
||||
# error "unsupported value for GST_VAAPI_TYPE_ID_SIZE"
|
||||
#endif
|
||||
|
||||
/**
|
||||
* GST_VAAPI_TYPE_ID:
|
||||
*
|
||||
* A #GValue type that represents a VA identifier.
|
||||
*
|
||||
* Return value: the #GType of GstVaapiID
|
||||
*/
|
||||
#define GST_VAAPI_TYPE_ID gst_vaapi_id_get_type()
|
||||
|
||||
/**
|
||||
* GST_VAAPI_VALUE_HOLDS_ID:
|
||||
* @x: the #GValue to check
|
||||
*
|
||||
* Checks if the given #GValue contains a #GstVaapiID value.
|
||||
*/
|
||||
#define GST_VAAPI_VALUE_HOLDS_ID(x) (G_VALUE_HOLDS((x), GST_VAAPI_TYPE_ID))
|
||||
|
||||
GType
|
||||
gst_vaapi_id_get_type(void);
|
||||
|
||||
GstVaapiID
|
||||
gst_vaapi_value_get_id(const GValue *value);
|
||||
|
||||
void
|
||||
gst_vaapi_value_set_id(GValue *value, GstVaapiID id);
|
||||
|
||||
/**
|
||||
* GstVaapiPoint:
|
||||
* @x: X coordinate
|
||||
|
|
Loading…
Reference in a new issue