g_type_class_ref (gst_search_mode_get_type ());
g_type_class_ref (gst_progress_type_get_type ());
g_type_class_ref (gst_buffer_pool_flags_get_type ());
- g_type_class_ref (gst_meta_map_flags_get_type ());
gst_structure_get_type ();
_gst_event_initialize ();
g_type_class_unref (g_type_class_peek (gst_param_spec_fraction_get_type ()));
g_type_class_unref (g_type_class_peek (gst_progress_type_get_type ()));
g_type_class_unref (g_type_class_peek (gst_buffer_pool_flags_get_type ()));
- g_type_class_unref (g_type_class_peek (gst_meta_map_flags_get_type ()));
gst_deinitialized = TRUE;
GST_INFO ("deinitialized GStreamer");
return info;
}
-/* Memory metadata */
-typedef struct
-{
- guint8 *data;
- GFreeFunc free_func;
- gsize size;
- gsize offset;
-} GstMetaMemoryParams;
-
-typedef struct
-{
- GstMetaMemory memory;
- GstMetaMemoryParams params;
-} GstMetaMemoryImpl;
-
-static gpointer
-meta_memory_mmap (GstMetaMemory * meta, gsize offset, gsize * size,
- GstMetaMapFlags flags)
-{
- GstMetaMemoryImpl *impl = (GstMetaMemoryImpl *) meta;
-
- *size = impl->params.size - offset;
- return impl->params.data + offset;
-}
-
-static gboolean
-meta_memory_munmap (GstMetaMemory * meta, gpointer data, gsize size)
-{
- return TRUE;
-}
-
-static gboolean
-meta_memory_init (GstMetaMemoryImpl * meta, GstMetaMemoryParams * params,
- GstBuffer * buffer)
-{
- GST_DEBUG ("init %p", buffer);
- meta->memory.mmap_func = meta_memory_mmap;
- meta->memory.munmap_func = meta_memory_munmap;
- meta->params = *params;
-
- /* FIXME, backwards compatibility */
- //GST_BUFFER_DATA (buffer) = params->data + params->offset;
- //GST_BUFFER_SIZE (buffer) = params->size;
-
- return TRUE;
-}
-
-static void
-meta_memory_free (GstMetaMemoryImpl * meta, GstBuffer * buffer)
-{
- GST_DEBUG ("free buffer %p", buffer);
- if (meta->params.free_func)
- meta->params.free_func (meta->params.data);
-}
-
-static void
-meta_memory_transform (GstBuffer * transbuf, GstMetaMemoryImpl * meta,
- GstBuffer * buffer, GstMetaTransformData * data)
-{
- switch (data->type) {
- case GST_META_TRANSFORM_COPY:
- {
- GST_DEBUG ("copy %p to %p", buffer, transbuf);
- gst_buffer_add_meta_memory (transbuf,
- g_memdup (meta->params.data, meta->params.size),
- g_free, meta->params.size, meta->params.offset);
- break;
- }
- case GST_META_TRANSFORM_TRIM:
- {
- GstMetaTransformSubbuffer *subdata = (GstMetaTransformSubbuffer *) data;
-
- GST_DEBUG ("trim %p to %p", buffer, transbuf);
- gst_buffer_add_meta_memory (transbuf,
- meta->params.data, NULL, subdata->size,
- meta->params.offset + subdata->offset);
- break;
- }
- case GST_META_TRANSFORM_MAKE_WRITABLE:
- {
- GST_DEBUG ("make writable %p to %p", buffer, transbuf);
- gst_buffer_add_meta_memory (transbuf,
- meta->params.data, NULL, meta->params.size, meta->params.offset);
- break;
- }
- default:
- /* don't copy by default */
- break;
- }
-}
-
-const GstMetaInfo *
-gst_meta_memory_get_info (void)
-{
- static const GstMetaInfo *meta_info = NULL;
-
- if (meta_info == NULL) {
- meta_info = gst_meta_register ("GstMetaMemory", "GstMetaMemoryImpl",
- sizeof (GstMetaMemoryImpl),
- (GstMetaInitFunction) meta_memory_init,
- (GstMetaFreeFunction) meta_memory_free,
- (GstMetaTransformFunction) meta_memory_transform,
- (GstMetaSerializeFunction) NULL, (GstMetaDeserializeFunction) NULL);
- }
- return meta_info;
-}
-
-GstMetaMemory *
-gst_buffer_add_meta_memory (GstBuffer * buffer, gpointer data,
- GFreeFunc free_func, gsize size, gsize offset)
-{
- GstMeta *meta;
- GstMetaMemoryParams params = { data, free_func, size, offset };
-
- meta = gst_buffer_add_meta (buffer, GST_META_MEMORY_INFO, ¶ms);
-
- return (GstMetaMemory *) meta;
-}
-
/* Timing metadata */
static void
meta_timing_transform (GstBuffer * transbuf, GstMetaTiming * meta,
/* default metadata */
-/* memory metadata */
-typedef struct _GstMetaMemory GstMetaMemory;
-
-const GstMetaInfo *gst_meta_memory_get_info(void);
-#define GST_META_MEMORY_INFO (gst_meta_memory_get_info())
-
-typedef enum {
- GST_META_MAP_NONE = 0,
- GST_META_MAP_READ = (1 << 0),
- GST_META_MAP_WRITE = (1 << 1)
-} GstMetaMapFlags;
-
-struct _GstMetaMemory
-{
- GstMeta meta;
-
- gpointer (*mmap_func) (GstMetaMemory *meta, gsize offset, gsize *size,
- GstMetaMapFlags flags);
- gboolean (*munmap_func) (GstMetaMemory *meta, gpointer data, gsize size);
-};
-
-#define gst_meta_memory_map(m,o,s,f) ((m)->mmap_func(m, o, s, f))
-#define gst_meta_memory_unmap(m,d,s) ((m)->munmap_func(m, d, s))
-
-#define gst_buffer_get_meta_memory(b) ((GstMetaMemory*)gst_buffer_get_meta((b),GST_META_MEMORY_INFO))
-GstMetaMemory * gst_buffer_add_meta_memory (GstBuffer *buffer, gpointer data,
- GFreeFunc free_func,
- gsize size, gsize offset);
/* timing metadata */
typedef struct _GstMetaTiming GstMetaTiming;
csize = gst_buffer_get_size (cur);
if (csize >= size + skip) {
- data = gst_buffer_map (cur, &csize, NULL, GST_META_MAP_READ);
+ data = gst_buffer_map (cur, &csize, NULL, GST_MAP_READ);
adapter->priv->cdata = data;
adapter->priv->csize = csize;
return data + skip;
gchar *bdata;
gsize bsize, csize, msize;
- bdata = gst_buffer_map (buf, &bsize, &msize, GST_META_MAP_READ);
+ bdata = gst_buffer_map (buf, &bsize, &msize, GST_MAP_READ);
csize = size ? size : bsize;
GST_DEBUG ("%lu %lu %lu", bsize, csize, msize);
fail_unless (bsize == csize);
GST_END_TEST;
-GST_START_TEST (test_meta_memory)
-{
- GstBuffer *buffer, *copy;
- GstMetaMemory *meta;
- guint8 *data;
- gsize size;
- guint i;
-
- buffer = gst_buffer_new ();
-
- /* add some memory metadata */
- meta = gst_buffer_add_meta_memory (buffer, g_malloc (4), g_free, 4, 0);
- fail_if (meta == NULL);
- fail_if (meta->mmap_func == NULL);
- fail_if (meta->munmap_func == NULL);
-
- /* prepare for writing */
- data = gst_meta_memory_map (meta, 0, &size, GST_META_MAP_WRITE);
- fail_if (data == NULL);
- fail_if (size != 4);
- for (i = 0; i < 4; i++)
- data[i] = i;
- gst_meta_memory_unmap (meta, data, size);
-
- /* reading */
- meta = gst_buffer_get_meta_memory (buffer);
- fail_if (meta == NULL);
-
- data = gst_meta_memory_map (meta, 0, &size, GST_META_MAP_READ);
- fail_if (data == NULL);
- fail_if (size != 4);
- for (i = 0; i < 4; i++)
- fail_if (data[i] != i);
- gst_meta_memory_unmap (meta, data, size);
-
- /* copy of the buffer */
- copy = gst_buffer_copy (buffer);
- /* get metadata of the buffer */
- meta = gst_buffer_get_meta_memory (copy);
- fail_if (meta == NULL);
- data = gst_meta_memory_map (meta, 0, &size, GST_META_MAP_READ);
- fail_if (data == NULL);
- fail_if (size != 4);
- for (i = 0; i < 4; i++)
- fail_if (data[i] != i);
- gst_meta_memory_unmap (meta, data, size);
- gst_buffer_unref (copy);
-
-#if 0
- /* FIXME, does not work yet */
- /* make a subbuffer */
- subbuf = gst_buffer_create_sub (buffer, 1, 3);
- meta = gst_buffer_get_meta_memory (subbuf);
- fail_if (meta == NULL);
- data = gst_meta_memory_map (meta, 0, &size, GST_META_MAP_READ);
- fail_if (data == NULL);
- fail_if (size != 3);
- for (i = 0; i < 3; i++)
- fail_if (data[i] != i + 1);
- gst_meta_memory_unmap (meta, data, size);
- gst_buffer_unref (subbuf);
-#endif
-
- /* clean up */
- gst_buffer_unref (buffer);
-}
-
-GST_END_TEST;
-
static Suite *
gst_buffermeta_suite (void)
{
suite_add_tcase (s, tc_chain);
tcase_add_test (tc_chain, test_meta_test);
- tcase_add_test (tc_chain, test_meta_memory);
return s;
}
gboolean res;
gpointer data;
- data = gst_buffer_map (buf, NULL, NULL, GST_META_MAP_READ);
+ data = gst_buffer_map (buf, NULL, NULL, GST_MAP_READ);
res = memcmp (data, str, size) == 0;
gst_buffer_unmap (buf, data, size);