mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-29 21:21:12 +00:00
gst/gstindex.c: (gst_index_add_association): Add gst_index_add_associationv() and clean up gst_index_add_association(...
Original commit message from CVS: * gst/gstindex.c: (gst_index_add_format), (gst_index_add_id), (gst_index_add_entry), (gst_index_add_associationv), (gst_index_add_association): Add gst_index_add_associationv() and clean up gst_index_add_association(). #127133
This commit is contained in:
parent
6ae04f0e3a
commit
168eaa4f68
2 changed files with 82 additions and 54 deletions
|
@ -1,3 +1,10 @@
|
||||||
|
2004-02-06 David Schleef <ds@schleef.org>
|
||||||
|
|
||||||
|
* gst/gstindex.c: (gst_index_add_format), (gst_index_add_id),
|
||||||
|
(gst_index_add_entry), (gst_index_add_associationv),
|
||||||
|
(gst_index_add_association): Add gst_index_add_associationv()
|
||||||
|
and clean up gst_index_add_association(). #127133
|
||||||
|
|
||||||
2004-02-06 Thomas Vander Stichele <thomas at apestaart dot org>
|
2004-02-06 Thomas Vander Stichele <thomas at apestaart dot org>
|
||||||
|
|
||||||
* autogen.sh: check out common with right tag if CVS/Tag exists
|
* autogen.sh: check out common with right tag if CVS/Tag exists
|
||||||
|
|
129
gst/gstindex.c
129
gst/gstindex.c
|
@ -54,6 +54,7 @@ static gboolean gst_index_path_resolver (GstIndex *index, GstObject *writer,
|
||||||
gchar **writer_string, gpointer data);
|
gchar **writer_string, gpointer data);
|
||||||
static gboolean gst_index_gtype_resolver (GstIndex *index, GstObject *writer,
|
static gboolean gst_index_gtype_resolver (GstIndex *index, GstObject *writer,
|
||||||
gchar **writer_string, gpointer data);
|
gchar **writer_string, gpointer data);
|
||||||
|
static void gst_index_add_entry (GstIndex *index, GstIndexEntry *entry);
|
||||||
|
|
||||||
static GstObject *parent_class = NULL;
|
static GstObject *parent_class = NULL;
|
||||||
static guint gst_index_signals[LAST_SIGNAL] = { 0 };
|
static guint gst_index_signals[LAST_SIGNAL] = { 0 };
|
||||||
|
@ -437,7 +438,6 @@ gst_index_add_format (GstIndex *index, gint id, GstFormat format)
|
||||||
{
|
{
|
||||||
GstIndexEntry *entry;
|
GstIndexEntry *entry;
|
||||||
const GstFormatDefinition* def;
|
const GstFormatDefinition* def;
|
||||||
GstIndexClass *iclass;
|
|
||||||
|
|
||||||
g_return_val_if_fail (GST_IS_INDEX (index), NULL);
|
g_return_val_if_fail (GST_IS_INDEX (index), NULL);
|
||||||
g_return_val_if_fail (format != 0, NULL);
|
g_return_val_if_fail (format != 0, NULL);
|
||||||
|
@ -453,12 +453,7 @@ gst_index_add_format (GstIndex *index, gint id, GstFormat format)
|
||||||
def = gst_format_get_details (format);
|
def = gst_format_get_details (format);
|
||||||
entry->data.format.key = def->nick;
|
entry->data.format.key = def->nick;
|
||||||
|
|
||||||
iclass = GST_INDEX_GET_CLASS (index);
|
gst_index_add_entry (index, entry);
|
||||||
|
|
||||||
if (iclass->add_entry)
|
|
||||||
iclass->add_entry (index, entry);
|
|
||||||
|
|
||||||
g_signal_emit (G_OBJECT (index), gst_index_signals[ENTRY_ADDED], 0, entry);
|
|
||||||
|
|
||||||
return entry;
|
return entry;
|
||||||
}
|
}
|
||||||
|
@ -477,7 +472,6 @@ GstIndexEntry*
|
||||||
gst_index_add_id (GstIndex *index, gint id, gchar *description)
|
gst_index_add_id (GstIndex *index, gint id, gchar *description)
|
||||||
{
|
{
|
||||||
GstIndexEntry *entry;
|
GstIndexEntry *entry;
|
||||||
GstIndexClass *iclass;
|
|
||||||
|
|
||||||
g_return_val_if_fail (GST_IS_INDEX (index), NULL);
|
g_return_val_if_fail (GST_IS_INDEX (index), NULL);
|
||||||
g_return_val_if_fail (description != NULL, NULL);
|
g_return_val_if_fail (description != NULL, NULL);
|
||||||
|
@ -490,12 +484,7 @@ gst_index_add_id (GstIndex *index, gint id, gchar *description)
|
||||||
entry->id = id;
|
entry->id = id;
|
||||||
entry->data.id.description = description;
|
entry->data.id.description = description;
|
||||||
|
|
||||||
iclass = GST_INDEX_GET_CLASS (index);
|
gst_index_add_entry (index, entry);
|
||||||
|
|
||||||
if (iclass->add_entry)
|
|
||||||
iclass->add_entry (index, entry);
|
|
||||||
|
|
||||||
g_signal_emit (G_OBJECT (index), gst_index_signals[ENTRY_ADDED], 0, entry);
|
|
||||||
|
|
||||||
return entry;
|
return entry;
|
||||||
}
|
}
|
||||||
|
@ -603,6 +592,59 @@ gst_index_get_writer_id (GstIndex *index, GstObject *writer, gint *id)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gst_index_add_entry (GstIndex *index, GstIndexEntry *entry)
|
||||||
|
{
|
||||||
|
GstIndexClass *iclass;
|
||||||
|
|
||||||
|
iclass = GST_INDEX_GET_CLASS (index);
|
||||||
|
|
||||||
|
if (iclass->add_entry) {
|
||||||
|
iclass->add_entry (index, entry);
|
||||||
|
}
|
||||||
|
|
||||||
|
g_signal_emit (G_OBJECT (index), gst_index_signals[ENTRY_ADDED], 0, entry);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gst_index_add_associationv:
|
||||||
|
* @index: the index to add the entry to
|
||||||
|
* @id: the id of the index writer
|
||||||
|
* @flags: optinal flags for this entry
|
||||||
|
* @n: number of associations
|
||||||
|
* @list: list of associations
|
||||||
|
* @...: other format/value pairs or 0 to end the list
|
||||||
|
*
|
||||||
|
* Associate given format/value pairs with each other.
|
||||||
|
*
|
||||||
|
* Returns: a pointer to the newly added entry in the index.
|
||||||
|
*/
|
||||||
|
GstIndexEntry*
|
||||||
|
gst_index_add_associationv (GstIndex *index, gint id, GstAssocFlags flags,
|
||||||
|
int n, const GstIndexAssociation *list)
|
||||||
|
{
|
||||||
|
GstIndexEntry *entry;
|
||||||
|
|
||||||
|
g_return_val_if_fail (n > 0, NULL);
|
||||||
|
g_return_val_if_fail (list != NULL, NULL);
|
||||||
|
g_return_val_if_fail (GST_IS_INDEX (index), NULL);
|
||||||
|
|
||||||
|
if (!GST_INDEX_IS_WRITABLE (index) || id == -1)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
entry = g_malloc (sizeof (GstIndexEntry));
|
||||||
|
|
||||||
|
entry->type = GST_INDEX_ENTRY_ASSOCIATION;
|
||||||
|
entry->id = id;
|
||||||
|
entry->data.assoc.flags = flags;
|
||||||
|
entry->data.assoc.assocs = g_memdup(list, sizeof (GstIndexAssociation) * n);
|
||||||
|
entry->data.assoc.nassocs = n;
|
||||||
|
|
||||||
|
gst_index_add_entry (index, entry);
|
||||||
|
|
||||||
|
return entry;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gst_index_add_association:
|
* gst_index_add_association:
|
||||||
* @index: the index to add the entry to
|
* @index: the index to add the entry to
|
||||||
|
@ -612,7 +654,7 @@ gst_index_get_writer_id (GstIndex *index, GstObject *writer, gint *id)
|
||||||
* @value: the value
|
* @value: the value
|
||||||
* @...: other format/value pairs or 0 to end the list
|
* @...: other format/value pairs or 0 to end the list
|
||||||
*
|
*
|
||||||
* Associate given format/value pairs with eachother.
|
* Associate given format/value pairs with each other.
|
||||||
* Be sure to pass gint64 values to this functions varargs,
|
* Be sure to pass gint64 values to this functions varargs,
|
||||||
* you might want to use a gint64 cast to be sure.
|
* you might want to use a gint64 cast to be sure.
|
||||||
*
|
*
|
||||||
|
@ -623,13 +665,11 @@ gst_index_add_association (GstIndex *index, gint id, GstAssocFlags flags,
|
||||||
GstFormat format, gint64 value, ...)
|
GstFormat format, gint64 value, ...)
|
||||||
{
|
{
|
||||||
va_list args;
|
va_list args;
|
||||||
GstIndexAssociation *assoc;
|
|
||||||
GstIndexEntry *entry;
|
GstIndexEntry *entry;
|
||||||
gulong size;
|
GstIndexAssociation *list;
|
||||||
gint nassocs = 0;
|
gint n_assocs = 0;
|
||||||
GstFormat cur_format;
|
GstFormat cur_format;
|
||||||
volatile gint64 dummy;
|
GArray *array;
|
||||||
GstIndexClass *iclass;
|
|
||||||
|
|
||||||
g_return_val_if_fail (GST_IS_INDEX (index), NULL);
|
g_return_val_if_fail (GST_IS_INDEX (index), NULL);
|
||||||
g_return_val_if_fail (format != 0, NULL);
|
g_return_val_if_fail (format != 0, NULL);
|
||||||
|
@ -637,49 +677,30 @@ gst_index_add_association (GstIndex *index, gint id, GstAssocFlags flags,
|
||||||
if (!GST_INDEX_IS_WRITABLE (index) || id == -1)
|
if (!GST_INDEX_IS_WRITABLE (index) || id == -1)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
array = g_array_new(FALSE, FALSE, sizeof(GstIndexAssociation));
|
||||||
|
|
||||||
va_start (args, value);
|
va_start (args, value);
|
||||||
|
|
||||||
cur_format = format;
|
cur_format = format;
|
||||||
|
n_assocs = 0;
|
||||||
while (cur_format) {
|
while (cur_format) {
|
||||||
nassocs++;
|
GstIndexAssociation a;
|
||||||
|
|
||||||
|
n_assocs++;
|
||||||
cur_format = va_arg (args, GstFormat);
|
cur_format = va_arg (args, GstFormat);
|
||||||
if (cur_format)
|
if (cur_format) {
|
||||||
dummy = va_arg (args, gint64);
|
a.format = cur_format;
|
||||||
|
a.value = va_arg (args, gint64);
|
||||||
|
|
||||||
|
g_array_append_val (array, a);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
va_end (args);
|
va_end (args);
|
||||||
|
|
||||||
/* make room for two assoc */
|
list = (GstIndexAssociation *) g_array_free (array, FALSE);
|
||||||
size = sizeof (GstIndexEntry) + (sizeof (GstIndexAssociation) * nassocs);
|
|
||||||
|
|
||||||
entry = g_malloc (size);
|
entry = gst_index_add_associationv (index, id, flags, n_assocs, list);
|
||||||
|
g_free (list);
|
||||||
entry->type = GST_INDEX_ENTRY_ASSOCIATION;
|
|
||||||
entry->id = id;
|
|
||||||
entry->data.assoc.flags = flags;
|
|
||||||
assoc = (GstIndexAssociation *) (((guint8 *) entry) + sizeof (GstIndexEntry));
|
|
||||||
entry->data.assoc.assocs = assoc;
|
|
||||||
entry->data.assoc.nassocs = nassocs;
|
|
||||||
|
|
||||||
va_start (args, value);
|
|
||||||
while (format) {
|
|
||||||
assoc->format = format;
|
|
||||||
assoc->value = value;
|
|
||||||
|
|
||||||
assoc++;
|
|
||||||
|
|
||||||
format = va_arg (args, GstFormat);
|
|
||||||
if (format)
|
|
||||||
value = va_arg (args, gint64);
|
|
||||||
}
|
|
||||||
va_end (args);
|
|
||||||
|
|
||||||
iclass = GST_INDEX_GET_CLASS (index);
|
|
||||||
|
|
||||||
if (iclass->add_entry)
|
|
||||||
iclass->add_entry (index, entry);
|
|
||||||
|
|
||||||
g_signal_emit (G_OBJECT (index), gst_index_signals[ENTRY_ADDED], 0, entry);
|
|
||||||
|
|
||||||
return entry;
|
return entry;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue