mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-01-25 16:48:11 +00:00
meta: split registration of API and implementation
Split out the registration of the metadata API and its implementation. Make a GType for each metadata API. This allows us to store extra information with the API type such as the tags. Change the buffer API so that we can get the metadata using the API GType. Change the query API so that we use the metadata API GType in the allocation query instead of a string. Update netaddress and unit tests
This commit is contained in:
parent
fc01e757cf
commit
e80296cf46
11 changed files with 134 additions and 90 deletions
|
@ -1474,28 +1474,26 @@ gst_buffer_span (GstBuffer * buf1, gsize offset, GstBuffer * buf2, gsize size)
|
||||||
/**
|
/**
|
||||||
* gst_buffer_get_meta:
|
* gst_buffer_get_meta:
|
||||||
* @buffer: a #GstBuffer
|
* @buffer: a #GstBuffer
|
||||||
* @info: a #GstMetaInfo
|
* @api: the #GType of an API
|
||||||
*
|
*
|
||||||
* Get the metadata for the api in @info on buffer. When there is no such
|
* Get the metadata for @api on buffer. When there is no such
|
||||||
* metadata, NULL is returned.
|
* metadata, NULL is returned.
|
||||||
*
|
*
|
||||||
* Note that the result metadata might not be of the implementation @info.
|
* Returns: the metadata for @api on @buffer.
|
||||||
*
|
|
||||||
* Returns: the metadata for the api in @info on @buffer.
|
|
||||||
*/
|
*/
|
||||||
GstMeta *
|
GstMeta *
|
||||||
gst_buffer_get_meta (GstBuffer * buffer, const GstMetaInfo * info)
|
gst_buffer_get_meta (GstBuffer * buffer, GType api)
|
||||||
{
|
{
|
||||||
GstMetaItem *item;
|
GstMetaItem *item;
|
||||||
GstMeta *result = NULL;
|
GstMeta *result = NULL;
|
||||||
|
|
||||||
g_return_val_if_fail (buffer != NULL, NULL);
|
g_return_val_if_fail (buffer != NULL, NULL);
|
||||||
g_return_val_if_fail (info != NULL, NULL);
|
g_return_val_if_fail (api != 0, NULL);
|
||||||
|
|
||||||
/* find GstMeta of the requested API */
|
/* find GstMeta of the requested API */
|
||||||
for (item = GST_BUFFER_META (buffer); item; item = item->next) {
|
for (item = GST_BUFFER_META (buffer); item; item = item->next) {
|
||||||
GstMeta *meta = &item->meta;
|
GstMeta *meta = &item->meta;
|
||||||
if (meta->info->api == info->api) {
|
if (meta->info->api == api) {
|
||||||
result = meta;
|
result = meta;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -506,7 +506,7 @@ GstBuffer* gst_buffer_span (GstBuffer *buf1, gsize offset,
|
||||||
typedef gboolean (*GstBufferForeachMetaFunc) (GstBuffer *buffer, GstMeta **meta,
|
typedef gboolean (*GstBufferForeachMetaFunc) (GstBuffer *buffer, GstMeta **meta,
|
||||||
gpointer user_data);
|
gpointer user_data);
|
||||||
|
|
||||||
GstMeta * gst_buffer_get_meta (GstBuffer *buffer, const GstMetaInfo *info);
|
GstMeta * gst_buffer_get_meta (GstBuffer *buffer, GType api);
|
||||||
GstMeta * gst_buffer_add_meta (GstBuffer *buffer, const GstMetaInfo *info,
|
GstMeta * gst_buffer_add_meta (GstBuffer *buffer, const GstMetaInfo *info,
|
||||||
gpointer params);
|
gpointer params);
|
||||||
gboolean gst_buffer_remove_meta (GstBuffer *buffer, GstMeta *meta);
|
gboolean gst_buffer_remove_meta (GstBuffer *buffer, GstMeta *meta);
|
||||||
|
|
|
@ -46,9 +46,57 @@ _priv_gst_meta_initialize (void)
|
||||||
_gst_meta_transform_copy = g_quark_from_static_string ("copy");
|
_gst_meta_transform_copy = g_quark_from_static_string ("copy");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gst_meta_api_type_register:
|
||||||
|
* @api: an API to register
|
||||||
|
* @tags: tags for @api
|
||||||
|
*
|
||||||
|
* Register and return a GType for the @api and associate it with
|
||||||
|
* @tags.
|
||||||
|
*
|
||||||
|
* Returns: a unique GType for @api.
|
||||||
|
*/
|
||||||
|
GType
|
||||||
|
gst_meta_api_type_register (const gchar * api, const gchar ** tags)
|
||||||
|
{
|
||||||
|
GType type;
|
||||||
|
|
||||||
|
g_return_val_if_fail (api != NULL, 0);
|
||||||
|
g_return_val_if_fail (tags != NULL, 0);
|
||||||
|
|
||||||
|
type = g_pointer_type_register_static (api);
|
||||||
|
|
||||||
|
if (type != 0) {
|
||||||
|
gint i;
|
||||||
|
|
||||||
|
for (i = 0; tags[i]; i++)
|
||||||
|
g_type_set_qdata (type, g_quark_from_string (tags[i]),
|
||||||
|
GINT_TO_POINTER (TRUE));
|
||||||
|
}
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gst_meta_api_type_has_tag:
|
||||||
|
* @api: an API
|
||||||
|
* @tag: the tag to check
|
||||||
|
*
|
||||||
|
* Check if @api was registered with @tag.
|
||||||
|
*
|
||||||
|
* Returns: %TRUE if @api was registered with @tag.
|
||||||
|
*/
|
||||||
|
gboolean
|
||||||
|
gst_meta_api_type_has_tag (GType api, GQuark tag)
|
||||||
|
{
|
||||||
|
g_return_val_if_fail (api != 0, FALSE);
|
||||||
|
g_return_val_if_fail (tag != 0, FALSE);
|
||||||
|
|
||||||
|
return g_type_get_qdata (api, tag) != NULL;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gst_meta_register:
|
* gst_meta_register:
|
||||||
* @api: the name of the #GstMeta API
|
* @api: the type of the #GstMeta API
|
||||||
* @impl: the name of the #GstMeta implementation
|
* @impl: the name of the #GstMeta implementation
|
||||||
* @size: the size of the #GstMeta structure
|
* @size: the size of the #GstMeta structure
|
||||||
* @init_func: a #GstMetaInitFunction
|
* @init_func: a #GstMetaInitFunction
|
||||||
|
@ -66,33 +114,24 @@ _priv_gst_meta_initialize (void)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const GstMetaInfo *
|
const GstMetaInfo *
|
||||||
gst_meta_register (const gchar * api, const gchar * impl, gsize size,
|
gst_meta_register (GType api, const gchar * impl, gsize size,
|
||||||
GstMetaInitFunction init_func, GstMetaFreeFunction free_func,
|
GstMetaInitFunction init_func, GstMetaFreeFunction free_func,
|
||||||
GstMetaTransformFunction transform_func, const gchar ** tags)
|
GstMetaTransformFunction transform_func)
|
||||||
{
|
{
|
||||||
GstMetaInfo *info;
|
GstMetaInfo *info;
|
||||||
guint len, i;
|
|
||||||
GQuark *qtags;
|
|
||||||
|
|
||||||
g_return_val_if_fail (api != NULL, NULL);
|
g_return_val_if_fail (api != 0, NULL);
|
||||||
g_return_val_if_fail (impl != NULL, NULL);
|
g_return_val_if_fail (impl != NULL, NULL);
|
||||||
g_return_val_if_fail (size != 0, NULL);
|
g_return_val_if_fail (size != 0, NULL);
|
||||||
g_return_val_if_fail (tags != NULL, NULL);
|
|
||||||
|
|
||||||
info = g_slice_new (GstMetaInfo);
|
info = g_slice_new (GstMetaInfo);
|
||||||
info->api = g_quark_from_string (api);
|
info->api = api;
|
||||||
info->type = g_pointer_type_register_static (impl);
|
info->type = g_pointer_type_register_static (impl);
|
||||||
info->size = size;
|
info->size = size;
|
||||||
info->init_func = init_func;
|
info->init_func = init_func;
|
||||||
info->free_func = free_func;
|
info->free_func = free_func;
|
||||||
info->transform_func = transform_func;
|
info->transform_func = transform_func;
|
||||||
|
|
||||||
len = g_strv_length ((gchar **) tags);
|
|
||||||
qtags = g_new0 (GQuark, len);
|
|
||||||
for (i = 0; i < len; i++)
|
|
||||||
qtags[i] = g_quark_from_static_string (tags[i]);
|
|
||||||
info->tags = qtags;
|
|
||||||
|
|
||||||
GST_DEBUG ("register \"%s\" implementing \"%s\" of size %" G_GSIZE_FORMAT,
|
GST_DEBUG ("register \"%s\" implementing \"%s\" of size %" G_GSIZE_FORMAT,
|
||||||
api, impl, size);
|
api, impl, size);
|
||||||
|
|
||||||
|
@ -126,27 +165,3 @@ gst_meta_get_info (const gchar * impl)
|
||||||
|
|
||||||
return info;
|
return info;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* gst_meta_info_has_tag:
|
|
||||||
* @info: a #GstMetaInfo
|
|
||||||
* @tag: a #GQuark
|
|
||||||
*
|
|
||||||
* Check if @info contains @tag.
|
|
||||||
*
|
|
||||||
* Returns: %TRUE when @info contains @tag.
|
|
||||||
*/
|
|
||||||
gboolean
|
|
||||||
gst_meta_info_has_tag (const GstMetaInfo * info, GQuark tag)
|
|
||||||
{
|
|
||||||
gint i;
|
|
||||||
|
|
||||||
g_return_val_if_fail (info != NULL, FALSE);
|
|
||||||
g_return_val_if_fail (tag != 0, FALSE);
|
|
||||||
|
|
||||||
for (i = 0; info->tags[i]; i++)
|
|
||||||
if (info->tags[i] == tag)
|
|
||||||
return TRUE;
|
|
||||||
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
|
@ -170,7 +170,7 @@ typedef gboolean (*GstMetaTransformFunction) (GstBuffer *transbuf,
|
||||||
* structure.
|
* structure.
|
||||||
*/
|
*/
|
||||||
struct _GstMetaInfo {
|
struct _GstMetaInfo {
|
||||||
GQuark api;
|
GType api;
|
||||||
GType type;
|
GType type;
|
||||||
gsize size;
|
gsize size;
|
||||||
|
|
||||||
|
@ -178,21 +178,21 @@ struct _GstMetaInfo {
|
||||||
GstMetaFreeFunction free_func;
|
GstMetaFreeFunction free_func;
|
||||||
GstMetaTransformFunction transform_func;
|
GstMetaTransformFunction transform_func;
|
||||||
|
|
||||||
const GQuark *tags;
|
|
||||||
|
|
||||||
/*< private >*/
|
/*< private >*/
|
||||||
gpointer _gst_reserved[GST_PADDING];
|
gpointer _gst_reserved[GST_PADDING];
|
||||||
};
|
};
|
||||||
|
|
||||||
const GstMetaInfo * gst_meta_register (const gchar *api, const gchar *impl,
|
GType gst_meta_api_type_register (const gchar *api,
|
||||||
gsize size,
|
const gchar **tags);
|
||||||
GstMetaInitFunction init_func,
|
gboolean gst_meta_api_type_has_tag (GType api, GQuark tag);
|
||||||
GstMetaFreeFunction free_func,
|
|
||||||
GstMetaTransformFunction transform_func,
|
const GstMetaInfo * gst_meta_register (GType api, const gchar *impl,
|
||||||
const gchar **tags);
|
gsize size,
|
||||||
const GstMetaInfo * gst_meta_get_info (const gchar * impl);
|
GstMetaInitFunction init_func,
|
||||||
|
GstMetaFreeFunction free_func,
|
||||||
|
GstMetaTransformFunction transform_func);
|
||||||
|
const GstMetaInfo * gst_meta_get_info (const gchar * impl);
|
||||||
|
|
||||||
gboolean gst_meta_info_has_tag (const GstMetaInfo *info, GQuark tag);
|
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
|
|
@ -1713,20 +1713,18 @@ gst_query_parse_allocation_params (GstQuery * query, guint * size,
|
||||||
* Add @api as aone of the supported metadata API to @query.
|
* Add @api as aone of the supported metadata API to @query.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
gst_query_add_allocation_meta (GstQuery * query, const gchar * api)
|
gst_query_add_allocation_meta (GstQuery * query, GType api)
|
||||||
{
|
{
|
||||||
GArray *array;
|
GArray *array;
|
||||||
GstStructure *structure;
|
GstStructure *structure;
|
||||||
|
|
||||||
g_return_if_fail (GST_QUERY_TYPE (query) == GST_QUERY_ALLOCATION);
|
g_return_if_fail (GST_QUERY_TYPE (query) == GST_QUERY_ALLOCATION);
|
||||||
g_return_if_fail (api != NULL);
|
g_return_if_fail (api != 0);
|
||||||
g_return_if_fail (gst_query_is_writable (query));
|
g_return_if_fail (gst_query_is_writable (query));
|
||||||
|
|
||||||
structure = GST_QUERY_STRUCTURE (query);
|
structure = GST_QUERY_STRUCTURE (query);
|
||||||
array =
|
array = ensure_array (structure, GST_QUARK (META), sizeof (GType), NULL);
|
||||||
ensure_array (structure, GST_QUARK (META), sizeof (const gchar *), NULL);
|
|
||||||
|
|
||||||
api = g_intern_string (api);
|
|
||||||
g_array_append_val (array, api);
|
g_array_append_val (array, api);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1748,8 +1746,7 @@ gst_query_get_n_allocation_metas (GstQuery * query)
|
||||||
g_return_val_if_fail (GST_QUERY_TYPE (query) == GST_QUERY_ALLOCATION, 0);
|
g_return_val_if_fail (GST_QUERY_TYPE (query) == GST_QUERY_ALLOCATION, 0);
|
||||||
|
|
||||||
structure = GST_QUERY_STRUCTURE (query);
|
structure = GST_QUERY_STRUCTURE (query);
|
||||||
array =
|
array = ensure_array (structure, GST_QUARK (META), sizeof (GType), NULL);
|
||||||
ensure_array (structure, GST_QUARK (META), sizeof (const gchar *), NULL);
|
|
||||||
|
|
||||||
return array->len;
|
return array->len;
|
||||||
}
|
}
|
||||||
|
@ -1762,23 +1759,22 @@ gst_query_get_n_allocation_metas (GstQuery * query)
|
||||||
* Parse an available query and get the metadata API
|
* Parse an available query and get the metadata API
|
||||||
* at @index of the metadata API array.
|
* at @index of the metadata API array.
|
||||||
*
|
*
|
||||||
* Returns: a #gchar of the metadata API at @index.
|
* Returns: a #GType of the metadata API at @index.
|
||||||
*/
|
*/
|
||||||
const gchar *
|
GType
|
||||||
gst_query_parse_nth_allocation_meta (GstQuery * query, guint index)
|
gst_query_parse_nth_allocation_meta (GstQuery * query, guint index)
|
||||||
{
|
{
|
||||||
GArray *array;
|
GArray *array;
|
||||||
const gchar *ret = NULL;
|
GType ret = 0;
|
||||||
GstStructure *structure;
|
GstStructure *structure;
|
||||||
|
|
||||||
g_return_val_if_fail (GST_QUERY_TYPE (query) == GST_QUERY_ALLOCATION, NULL);
|
g_return_val_if_fail (GST_QUERY_TYPE (query) == GST_QUERY_ALLOCATION, 0);
|
||||||
|
|
||||||
structure = GST_QUERY_STRUCTURE (query);
|
structure = GST_QUERY_STRUCTURE (query);
|
||||||
array =
|
array = ensure_array (structure, GST_QUARK (META), sizeof (GType), NULL);
|
||||||
ensure_array (structure, GST_QUARK (META), sizeof (const gchar *), NULL);
|
|
||||||
|
|
||||||
if (index < array->len)
|
if (index < array->len)
|
||||||
ret = g_array_index (array, const gchar *, index);
|
ret = g_array_index (array, GType, index);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -1793,22 +1789,21 @@ gst_query_parse_nth_allocation_meta (GstQuery * query, guint index)
|
||||||
* Returns: TRUE when @api is in the list of metadata.
|
* Returns: TRUE when @api is in the list of metadata.
|
||||||
*/
|
*/
|
||||||
gboolean
|
gboolean
|
||||||
gst_query_has_allocation_meta (GstQuery * query, const gchar * api)
|
gst_query_has_allocation_meta (GstQuery * query, GType api)
|
||||||
{
|
{
|
||||||
GArray *array;
|
GArray *array;
|
||||||
GstStructure *structure;
|
GstStructure *structure;
|
||||||
guint i, len;
|
guint i, len;
|
||||||
|
|
||||||
g_return_val_if_fail (GST_QUERY_TYPE (query) == GST_QUERY_ALLOCATION, FALSE);
|
g_return_val_if_fail (GST_QUERY_TYPE (query) == GST_QUERY_ALLOCATION, FALSE);
|
||||||
g_return_val_if_fail (api != NULL, FALSE);
|
g_return_val_if_fail (api != 0, FALSE);
|
||||||
|
|
||||||
structure = GST_QUERY_STRUCTURE (query);
|
structure = GST_QUERY_STRUCTURE (query);
|
||||||
array =
|
array = ensure_array (structure, GST_QUARK (META), sizeof (GType), NULL);
|
||||||
ensure_array (structure, GST_QUARK (META), sizeof (const gchar *), NULL);
|
|
||||||
|
|
||||||
len = array->len;
|
len = array->len;
|
||||||
for (i = 0; i < len; i++) {
|
for (i = 0; i < len; i++) {
|
||||||
if (strcmp (api, g_array_index (array, const gchar *, i)) == 0)
|
if (g_array_index (array, GType, i) == api)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
|
@ -372,10 +372,10 @@ void gst_query_parse_allocation_params (GstQuery *query, guint *size,
|
||||||
guint *max_buffers, guint *prefix, guint *alignment,
|
guint *max_buffers, guint *prefix, guint *alignment,
|
||||||
GstBufferPool **pool);
|
GstBufferPool **pool);
|
||||||
|
|
||||||
void gst_query_add_allocation_meta (GstQuery *query, const gchar *api);
|
void gst_query_add_allocation_meta (GstQuery *query, GType api);
|
||||||
guint gst_query_get_n_allocation_metas (GstQuery *query);
|
guint gst_query_get_n_allocation_metas (GstQuery *query);
|
||||||
const gchar * gst_query_parse_nth_allocation_meta (GstQuery *query, guint index);
|
GType gst_query_parse_nth_allocation_meta (GstQuery *query, guint index);
|
||||||
gboolean gst_query_has_allocation_meta (GstQuery *query, const gchar *api);
|
gboolean gst_query_has_allocation_meta (GstQuery *query, GType api);
|
||||||
|
|
||||||
void gst_query_add_allocation_memory (GstQuery *query, GstAllocator *allocator);
|
void gst_query_add_allocation_memory (GstQuery *query, GstAllocator *allocator);
|
||||||
guint gst_query_get_n_allocation_memories (GstQuery *query);
|
guint gst_query_get_n_allocation_memories (GstQuery *query);
|
||||||
|
|
|
@ -64,17 +64,30 @@ net_address_meta_free (GstMeta * meta, GstBuffer * buffer)
|
||||||
nmeta->addr = NULL;
|
nmeta->addr = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GType
|
||||||
|
gst_net_address_meta_api_get_type (void)
|
||||||
|
{
|
||||||
|
static volatile GType type;
|
||||||
|
static const gchar *tags[] = { "origin", NULL };
|
||||||
|
|
||||||
|
if (g_once_init_enter (&type)) {
|
||||||
|
GType _type = gst_meta_api_type_register ("GstNetAddressMetaAPI", tags);
|
||||||
|
g_once_init_leave (&type, _type);
|
||||||
|
}
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
const GstMetaInfo *
|
const GstMetaInfo *
|
||||||
gst_net_address_meta_get_info (void)
|
gst_net_address_meta_get_info (void)
|
||||||
{
|
{
|
||||||
static const GstMetaInfo *meta_info = NULL;
|
static const GstMetaInfo *meta_info = NULL;
|
||||||
static const gchar *tags[] = { "origin", NULL };
|
|
||||||
|
|
||||||
if (meta_info == NULL) {
|
if (meta_info == NULL) {
|
||||||
meta_info = gst_meta_register ("GstNetAddressMeta", "GstNetAddressMeta",
|
meta_info = gst_meta_register (GST_NET_ADDRESS_META_API_TYPE,
|
||||||
|
"GstNetAddressMeta",
|
||||||
sizeof (GstNetAddressMeta),
|
sizeof (GstNetAddressMeta),
|
||||||
net_address_meta_init,
|
net_address_meta_init,
|
||||||
net_address_meta_free, net_address_meta_transform, tags);
|
net_address_meta_free, net_address_meta_transform);
|
||||||
}
|
}
|
||||||
return meta_info;
|
return meta_info;
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,11 +38,16 @@ struct _GstNetAddressMeta {
|
||||||
GSocketAddress *addr;
|
GSocketAddress *addr;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
GType gst_net_address_meta_api_get_type (void);
|
||||||
|
#define GST_NET_ADDRESS_META_API_TYPE (gst_net_address_meta_api_get_type())
|
||||||
|
|
||||||
|
#define gst_buffer_get_net_address_meta(b) \
|
||||||
|
((GstNetAddressMeta*)gst_buffer_get_meta((b),GST_NET_ADDRESS_META_API_TYPE))
|
||||||
|
|
||||||
|
/* implementation */
|
||||||
const GstMetaInfo *gst_net_address_meta_get_info (void);
|
const GstMetaInfo *gst_net_address_meta_get_info (void);
|
||||||
#define GST_NET_ADDRESS_META_INFO (gst_net_address_meta_get_info())
|
#define GST_NET_ADDRESS_META_INFO (gst_net_address_meta_get_info())
|
||||||
|
|
||||||
#define gst_buffer_get_net_address_meta(b) \
|
|
||||||
((GstNetAddressMeta*)gst_buffer_get_meta((b),GST_NET_ADDRESS_META_INFO))
|
|
||||||
GstNetAddressMeta * gst_buffer_add_net_address_meta (GstBuffer *buffer,
|
GstNetAddressMeta * gst_buffer_add_net_address_meta (GstBuffer *buffer,
|
||||||
GSocketAddress *addr);
|
GSocketAddress *addr);
|
||||||
|
|
||||||
|
|
|
@ -43,10 +43,13 @@ typedef struct
|
||||||
GstClockTime clock_rate;
|
GstClockTime clock_rate;
|
||||||
} GstMetaTest;
|
} GstMetaTest;
|
||||||
|
|
||||||
|
static GType gst_meta_test_api_get_type (void);
|
||||||
|
#define GST_META_TEST_API_TYPE (gst_meta_test_api_get_type())
|
||||||
|
|
||||||
static const GstMetaInfo *gst_meta_test_get_info (void);
|
static const GstMetaInfo *gst_meta_test_get_info (void);
|
||||||
#define GST_META_TEST_INFO (gst_meta_test_get_info())
|
#define GST_META_TEST_INFO (gst_meta_test_get_info())
|
||||||
|
|
||||||
#define GST_META_TEST_GET(buf) ((GstMetaTest *)gst_buffer_get_meta(buf,GST_META_TEST_INFO))
|
#define GST_META_TEST_GET(buf) ((GstMetaTest *)gst_buffer_get_meta(buf,GST_META_TEST_API_TYPE))
|
||||||
#define GST_META_TEST_ADD(buf) ((GstMetaTest *)gst_buffer_add_meta(buf,GST_META_TEST_INFO,NULL))
|
#define GST_META_TEST_ADD(buf) ((GstMetaTest *)gst_buffer_add_meta(buf,GST_META_TEST_INFO,NULL))
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
|
@ -114,16 +117,29 @@ test_transform_func (GstBuffer * transbuf, GstMeta * meta,
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static GType
|
||||||
|
gst_meta_test_api_get_type (void)
|
||||||
|
{
|
||||||
|
static volatile GType type;
|
||||||
|
static const gchar *tags[] = { "timing", NULL };
|
||||||
|
|
||||||
|
if (g_once_init_enter (&type)) {
|
||||||
|
GType _type = gst_meta_api_type_register ("GstMetaTestAPI", tags);
|
||||||
|
g_once_init_leave (&type, _type);
|
||||||
|
}
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
static const GstMetaInfo *
|
static const GstMetaInfo *
|
||||||
gst_meta_test_get_info (void)
|
gst_meta_test_get_info (void)
|
||||||
{
|
{
|
||||||
static const GstMetaInfo *meta_test_info = NULL;
|
static const GstMetaInfo *meta_test_info = NULL;
|
||||||
static const gchar *tags[] = { "timing", NULL };
|
|
||||||
|
|
||||||
if (meta_test_info == NULL) {
|
if (meta_test_info == NULL) {
|
||||||
meta_test_info = gst_meta_register ("GstMetaTest", "GstMetaTest",
|
meta_test_info = gst_meta_register (GST_META_TEST_API_TYPE,
|
||||||
|
"GstMetaTest",
|
||||||
sizeof (GstMetaTest),
|
sizeof (GstMetaTest),
|
||||||
test_init_func, test_free_func, test_transform_func, tags);
|
test_init_func, test_free_func, test_transform_func);
|
||||||
}
|
}
|
||||||
return meta_test_info;
|
return meta_test_info;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
EXPORTS
|
EXPORTS
|
||||||
gst_buffer_add_net_address_meta
|
gst_buffer_add_net_address_meta
|
||||||
|
gst_net_address_meta_api_get_type
|
||||||
gst_net_address_meta_get_info
|
gst_net_address_meta_get_info
|
||||||
gst_net_client_clock_get_type
|
gst_net_client_clock_get_type
|
||||||
gst_net_client_clock_new
|
gst_net_client_clock_new
|
||||||
|
|
|
@ -584,9 +584,10 @@ EXPORTS
|
||||||
gst_message_type_get_name
|
gst_message_type_get_name
|
||||||
gst_message_type_get_type
|
gst_message_type_get_type
|
||||||
gst_message_type_to_quark
|
gst_message_type_to_quark
|
||||||
|
gst_meta_api_type_has_tag
|
||||||
|
gst_meta_api_type_register
|
||||||
gst_meta_flags_get_type
|
gst_meta_flags_get_type
|
||||||
gst_meta_get_info
|
gst_meta_get_info
|
||||||
gst_meta_info_has_tag
|
|
||||||
gst_meta_register
|
gst_meta_register
|
||||||
gst_mini_object_copy
|
gst_mini_object_copy
|
||||||
gst_mini_object_flags_get_type
|
gst_mini_object_flags_get_type
|
||||||
|
|
Loading…
Reference in a new issue