Ich kenne keinen generischen Meta-Typ, auf den Sie leider zurückgreifen könnten. Wenn Sie uns mitteilen möchten, welche Art von Daten Sie weitergeben möchten, kann Ihnen jemand eine Umgehungslösung vorschlagen.
Hier ist eine Beispiel-Meta-API, die wir getan haben, um einen einfachen GstClockTime-Wert zu übergeben.
gstmark.h
#ifndef __GST_MARK_H__
#define __GST_MARK_H__
#include <gst/gst.h>
#include <gst/gstmeta.h>
G_BEGIN_DECLS
typedef struct _GstMetaMarking GstMetaMarking;
struct _GstMetaMarking {
GstMeta meta;
GstClockTime in_timestamp;
};
GType gst_meta_marking_api_get_type (void);
const GstMetaInfo* gst_meta_marking_get_info (void);
#define GST_META_MARKING_GET(buf) ((GstMetaMarking *)gst_buffer_get_meta(buf,gst_meta_marking_api_get_type()))
#define GST_META_MARKING_ADD(buf) ((GstMetaMarking *)gst_buffer_add_meta(buf,gst_meta_marking_get_info(),(gpointer)NULL))
G_END_DECLS
#endif
gstmark.c
#include "gstmark.h"
GType
gst_meta_marking_api_get_type (void)
{
static volatile GType type;
static const gchar *tags[] = { NULL };
if (g_once_init_enter (&type)) {
GType _type = gst_meta_api_type_register ("GstMetaMarkingAPI", tags);
g_once_init_leave (&type, _type);
}
return type;
}
gboolean
gst_meta_marking_init(GstMeta *meta, gpointer params, GstBuffer *buffer)
{
GstMetaMarking* marking_meta = (GstMetaMarking*)meta;
marking_meta->in_timestamp = GST_CLOCK_TIME_NONE;
return TRUE;
}
gboolean
gst_meta_marking_transform (GstBuffer *dest_buf,
GstMeta *src_meta,
GstBuffer *src_buf,
GQuark type,
gpointer data) {
GstMeta* dest_meta = GST_META_MARKING_ADD(dest_buf);
GstMetaMarking* src_meta_marking = (GstMetaMarking*)src_meta;
GstMetaMarking* dest_meta_marking = (GstMetaMarking*)dest_meta;
dest_meta_marking->in_timestamp = src_meta_marking->in_timestamp;
return TRUE;
}
void
gst_meta_marking_free (GstMeta *meta, GstBuffer *buffer) {
}
const GstMetaInfo *
gst_meta_marking_get_info (void)
{
static const GstMetaInfo *meta_info = NULL;
if (g_once_init_enter (&meta_info)) {
const GstMetaInfo *meta =
gst_meta_register (gst_meta_marking_api_get_type(), "GstMetaMarking",
sizeof (GstMetaMarking), (GstMetaInitFunction)gst_meta_marking_init,
(GstMetaFreeFunction)gst_meta_marking_free, (GstMetaTransformFunction) gst_meta_marking_transform);
g_once_init_leave (&meta_info, meta);
}
return meta_info;
}
dann die Metadaten hinzuzufügen:
GstMetaMarking* meta = GST_META_MARKING_ADD(in);
Sie das Problem, das Sie zu lösen versuchen beschrieben haben. Nun, was ist deine Frage? Was hast du probiert? Wie hat dein Versuch funktioniert oder nicht funktioniert? Zuletzt, was hast du probiert? Wie hat oder hat dein Versuch funktioniert? Und bitte [lesen Sie, wie Sie gute Fragen stellen können] (http://stackoverflow.com/help/how-to-ask), und erfahren Sie, wie Sie ein [minimales, vollständiges und verifizierbares Beispiel] erstellen können (http://stackoverflow.com/help/mcve). –