*/
GstIndexEntry*
gst_index_get_assoc_entry (GstIndex *index, gint id,
- GstIndexLookupMethod method,
+ GstIndexLookupMethod method, GstAssocFlags flags,
GstFormat format, gint64 value)
{
g_return_val_if_fail (GST_IS_INDEX (index), NULL);
- return gst_index_get_assoc_entry_full (index, id, method, format, value,
+ return gst_index_get_assoc_entry_full (index, id, method, flags, format, value,
gst_index_compare_func, NULL);
}
*/
GstIndexEntry*
gst_index_get_assoc_entry_full (GstIndex *index, gint id,
- GstIndexLookupMethod method,
+ GstIndexLookupMethod method, GstAssocFlags flags,
GstFormat format, gint64 value,
GCompareDataFunc func,
gpointer user_data)
iclass = GST_INDEX_GET_CLASS (index);
if (iclass->get_assoc_entry)
- return iclass->get_assoc_entry (index, id, method, format, value, func, user_data);
+ return iclass->get_assoc_entry (index, id, method, flags, format, value, func, user_data);
return NULL;
}
typedef enum {
GST_ACCOCIATION_FLAG_NONE = 0,
GST_ACCOCIATION_FLAG_KEY_UNIT = (1 << 0),
+
+ /* new flags should start here */
+ GST_ACCOCIATION_FLAG_LAST = (1 << 8),
} GstAssocFlags;
#define GST_INDEX_FORMAT_FORMAT(entry) ((entry)->data.format.format)
void (*add_entry) (GstIndex *index, GstIndexEntry *entry);
GstIndexEntry* (*get_assoc_entry) (GstIndex *index, gint id,
- GstIndexLookupMethod method,
+ GstIndexLookupMethod method, GstAssocFlags flags,
GstFormat format, gint64 value,
GCompareDataFunc func,
gpointer user_data);
gchar *description);
GstIndexEntry* gst_index_get_assoc_entry (GstIndex *index, gint id,
- GstIndexLookupMethod method,
+ GstIndexLookupMethod method, GstAssocFlags flags,
GstFormat format, gint64 value);
GstIndexEntry* gst_index_get_assoc_entry_full (GstIndex *index, gint id,
- GstIndexLookupMethod method,
+ GstIndexLookupMethod method, GstAssocFlags flags,
GstFormat format, gint64 value,
GCompareDataFunc func,
gpointer user_data);
static void gst_mem_index_add_entry (GstIndex *index, GstIndexEntry *entry);
static GstIndexEntry* gst_mem_index_get_assoc_entry (GstIndex *index, gint id,
- GstIndexLookupMethod method,
+ GstIndexLookupMethod method, GstAssocFlags flags,
GstFormat format, gint64 value,
GCompareDataFunc func,
gpointer user_data);
static GstIndexEntry*
gst_mem_index_get_assoc_entry (GstIndex *index, gint id,
- GstIndexLookupMethod method,
+ GstIndexLookupMethod method,
+ GstAssocFlags flags,
GstFormat format, gint64 value,
GCompareDataFunc func,
gpointer user_data)
}
}
+ if (entry) {
+ if ((GST_INDEX_ASSOC_FLAGS (entry) & flags) != flags) {
+ GList *l_entry = g_list_find (memindex->associations, entry);
+
+ entry = NULL;
+
+ while (l_entry) {
+ entry = (GstIndexEntry *) l_entry->data;
+
+ if (entry->id == id &&
+ (GST_INDEX_ASSOC_FLAGS (entry) & flags) == flags)
+ break;
+
+ if (method == GST_INDEX_LOOKUP_BEFORE)
+ l_entry = g_list_next (l_entry);
+ else if (method == GST_INDEX_LOOKUP_AFTER) {
+ l_entry = g_list_previous (l_entry);
+ }
+ }
+ }
+ }
+
return entry;
}
static void gst_mem_index_add_entry (GstIndex *index, GstIndexEntry *entry);
static GstIndexEntry* gst_mem_index_get_assoc_entry (GstIndex *index, gint id,
- GstIndexLookupMethod method,
+ GstIndexLookupMethod method, GstAssocFlags flags,
GstFormat format, gint64 value,
GCompareDataFunc func,
gpointer user_data);
static GstIndexEntry*
gst_mem_index_get_assoc_entry (GstIndex *index, gint id,
- GstIndexLookupMethod method,
+ GstIndexLookupMethod method,
+ GstAssocFlags flags,
GstFormat format, gint64 value,
GCompareDataFunc func,
gpointer user_data)
}
}
+ if (entry) {
+ if ((GST_INDEX_ASSOC_FLAGS (entry) & flags) != flags) {
+ GList *l_entry = g_list_find (memindex->associations, entry);
+
+ entry = NULL;
+
+ while (l_entry) {
+ entry = (GstIndexEntry *) l_entry->data;
+
+ if (entry->id == id &&
+ (GST_INDEX_ASSOC_FLAGS (entry) & flags) == flags)
+ break;
+
+ if (method == GST_INDEX_LOOKUP_BEFORE)
+ l_entry = g_list_next (l_entry);
+ else if (method == GST_INDEX_LOOKUP_AFTER) {
+ l_entry = g_list_previous (l_entry);
+ }
+ }
+ }
+ }
+
return entry;
}