GstIndex

GstIndex — Generate indexes on objects

Synopsis


#include <gst/gst.h>


struct      GstIndex;
struct      GstIndexEntry;
struct      GstIndexGroup;
enum        GstIndexCertainty;
enum        GstIndexEntryType;
enum        GstIndexLookupMethod;
#define     GST_INDEX_NASSOCS               (entry)
#define     GST_INDEX_ASSOC_FLAGS           (entry)
#define     GST_INDEX_ASSOC_FORMAT          (entry,i)
#define     GST_INDEX_ASSOC_VALUE           (entry,i)
struct      GstIndexAssociation;
enum        GstAssocFlags;
#define     GST_INDEX_FORMAT_FORMAT         (entry)
#define     GST_INDEX_FORMAT_KEY            (entry)
#define     GST_INDEX_ID_INVALID
#define     GST_INDEX_ID_DESCRIPTION        (entry)
gboolean    (*GstIndexFilter)               (GstIndex *index,
                                             GstIndexEntry *entry);
enum        GstIndexResolverMethod;
gboolean    (*GstIndexResolver)             (GstIndex *index,
                                             GstObject *writer,
                                             gchar **writer_string,
                                             gpointer user_data);
enum        GstIndexFlags;
#define     GST_INDEX_IS_READABLE           (obj)
#define     GST_INDEX_IS_WRITABLE           (obj)
GstIndex*   gst_index_new                   (void);
void        gst_index_commit                (GstIndex *index,
                                             gint id);
gint        gst_index_get_group             (GstIndex *index);
gint        gst_index_new_group             (GstIndex *index);
gboolean    gst_index_set_group             (GstIndex *index,
                                             gint groupnum);
void        gst_index_set_certainty         (GstIndex *index,
                                             GstIndexCertainty certainty);
GstIndexCertainty gst_index_get_certainty   (GstIndex *index);
void        gst_index_set_filter            (GstIndex *index,
                                             GstIndexFilter filter,
                                             gpointer user_data);
void        gst_index_set_resolver          (GstIndex *index,
                                             GstIndexResolver resolver,
                                             gpointer user_data);
gboolean    gst_index_get_writer_id         (GstIndex *index,
                                             GstObject *writer,
                                             gint *id);
GstIndexEntry* gst_index_add_format         (GstIndex *index,
                                             gint id,
                                             GstFormat format);
GstIndexEntry* gst_index_add_association    (GstIndex *index,
                                             gint id,
                                             GstAssocFlags flags,
                                             GstFormat format,
                                             gint64 value,
                                             ...);
GstIndexEntry* gst_index_add_object         (GstIndex *index,
                                             gint id,
                                             gchar *key,
                                             GType type,
                                             gpointer object);
GstIndexEntry* gst_index_add_id             (GstIndex *index,
                                             gint id,
                                             gchar *description);
GstIndexEntry* gst_index_get_assoc_entry    (GstIndex *index,
                                             gint id,
                                             GstIndexLookupMethod method,
                                             GstAssocFlags flags,
                                             GstFormat format,
                                             gint64 value);
GstIndexEntry* gst_index_get_assoc_entry_full
                                            (GstIndex *index,
                                             gint id,
                                             GstIndexLookupMethod method,
                                             GstAssocFlags flags,
                                             GstFormat format,
                                             gint64 value,
                                             GCompareDataFunc func,
                                             gpointer user_data);
GType       gst_index_entry_get_type        (void);
GstIndexEntry* gst_index_entry_copy         (GstIndexEntry *entry);
void        gst_index_entry_free            (GstIndexEntry *entry);
gboolean    gst_index_entry_assoc_map       (GstIndexEntry *entry,
                                             GstFormat format,
                                             gint64 *value);


Object Hierarchy


  GObject
   +----GstObject
         +----GstIndex

Properties


  "resolver"             GstIndexResolver     : Read / Write

Signal Prototypes


"entry-added"
            void        user_function      (GstIndex *gstindex,
                                            GstIndexEntry *arg1,
                                            gpointer user_data);

Description

GstIndex is used to generate a stream index of one or more elements in a pipeline.

Details

struct GstIndex

struct GstIndex;


struct GstIndexEntry

struct GstIndexEntry {

  GstIndexEntryType	 type;
  gint			 id;

  union {
    struct {
      gchar		*description;
    } id;
    struct {
      gint		 nassocs;
      GstIndexAssociation 
	      		*assocs;
      GstAssocFlags	 flags;
    } assoc;
    struct {
      gchar		*key;
      GType		 type;
      gpointer		 object;
    } object;
    struct {
      GstFormat		 format;
      gchar		*key;
    } format;
  } data;
};

The basic element of an index.


struct GstIndexGroup

struct GstIndexGroup {

  /* unique ID of group in index */
  gint groupnum;

  /* list of entries */
  GList *entries;

  /* the certainty level of the group */
  GstIndexCertainty certainty;

  /* peer group that contains more certain entries */
  gint peergroup;
};

A group of related entries in an index.


enum GstIndexCertainty

typedef enum {
  GST_INDEX_UNKNOWN,
  GST_INDEX_CERTAIN,
  GST_INDEX_FUZZY
} GstIndexCertainty;

The certainty of a group in the index.

GST_INDEX_UNKNOWNaccuracy is not known
GST_INDEX_CERTAINaccuracy is perfect
GST_INDEX_FUZZYaccuracy is fuzzy

enum GstIndexEntryType

typedef enum {
  GST_INDEX_ENTRY_ID,
  GST_INDEX_ENTRY_ASSOCIATION,
  GST_INDEX_ENTRY_OBJECT,
  GST_INDEX_ENTRY_FORMAT
} GstIndexEntryType;

The different types of entries in the index.

GST_INDEX_ENTRY_IDThis entry is an id that maps an index id to its owner object
GST_INDEX_ENTRY_ASSOCIATIONThis entry is an association between formats
GST_INDEX_ENTRY_OBJECTAn object
GST_INDEX_ENTRY_FORMATA format definition

enum GstIndexLookupMethod

typedef enum {
  GST_INDEX_LOOKUP_EXACT,
  GST_INDEX_LOOKUP_BEFORE,
  GST_INDEX_LOOKUP_AFTER
} GstIndexLookupMethod;

Specify the method to find an index entry in the index.

GST_INDEX_LOOKUP_EXACTThere has to be an exact indexentry with the given format/value
GST_INDEX_LOOKUP_BEFOREThe exact entry or the one before it
GST_INDEX_LOOKUP_AFTERThe exact entry or the one after it

GST_INDEX_NASSOCS()

#define GST_INDEX_NASSOCS(entry)		((entry)->data.assoc.nassocs)

Get the number of associations in the entry.

entry :The entry to query

GST_INDEX_ASSOC_FLAGS()

#define GST_INDEX_ASSOC_FLAGS(entry)		((entry)->data.assoc.flags)

Get the flags for this entry

entry :The entry to query

GST_INDEX_ASSOC_FORMAT()

#define GST_INDEX_ASSOC_FORMAT(entry,i)		((entry)->data.assoc.assocs[(i)].format)

Get the i-th format of the entry.

entry :The entry to query
i :The format index

GST_INDEX_ASSOC_VALUE()

#define GST_INDEX_ASSOC_VALUE(entry,i)		((entry)->data.assoc.assocs[(i)].value)

Get the i-th value of the entry.

entry :The entry to query
i :The value index

struct GstIndexAssociation

struct GstIndexAssociation {

  GstFormat 	format;
  gint64 	value;
};

An association in an entry.

GstFormat formatthe format of the association
gint64 valuethe value of the association

enum GstAssocFlags

typedef enum {
  GST_ASSOCIATION_FLAG_NONE 	= 0,
  GST_ASSOCIATION_FLAG_KEY_UNIT = (1 << 0),
  GST_ASSOCIATION_FLAG_DELTA_UNIT = (1 << 1),

  /* new flags should start here */
  GST_ASSOCIATION_FLAG_LAST	= (1 << 8)
} GstAssocFlags;

flags for an association entry

GST_ASSOCIATION_FLAG_NONEno extra flags
GST_ASSOCIATION_FLAG_KEY_UNITthe entry marks a key unit, a key unit is one that marks a place where one can randomly seek to.
GST_ASSOCIATION_FLAG_DELTA_UNIT
GST_ASSOCIATION_FLAG_LASTextra user defined flags should start here.

GST_INDEX_FORMAT_FORMAT()

#define GST_INDEX_FORMAT_FORMAT(entry)		((entry)->data.format.format)

Get the format of the format entry

entry :The entry to query

GST_INDEX_FORMAT_KEY()

#define GST_INDEX_FORMAT_KEY(entry)		((entry)->data.format.key)

Get the key of the format entry

entry :The entry to query

GST_INDEX_ID_INVALID

#define GST_INDEX_ID_INVALID			(-1)

An invalid index id


GST_INDEX_ID_DESCRIPTION()

#define GST_INDEX_ID_DESCRIPTION(entry)		((entry)->data.id.description)

Get the description of the id entry

entry :The entry to query

GstIndexFilter ()

gboolean    (*GstIndexFilter)               (GstIndex *index,
                                             GstIndexEntry *entry);

Function to filter out entries in the index.

index :The index being queried
entry :The entry to be added.
Returns :This function should return TRUE if the entry is to be added to the index, FALSE otherwise.

enum GstIndexResolverMethod

typedef enum {
  GST_INDEX_RESOLVER_CUSTOM,
  GST_INDEX_RESOLVER_GTYPE,
  GST_INDEX_RESOLVER_PATH
} GstIndexResolverMethod;

The method used to resolve index writers

GST_INDEX_RESOLVER_CUSTOMUse a custom resolver
GST_INDEX_RESOLVER_GTYPEResolve based on the GType of the object
GST_INDEX_RESOLVER_PATHResolve on the path in graph

GstIndexResolver ()

gboolean    (*GstIndexResolver)             (GstIndex *index,
                                             GstObject *writer,
                                             gchar **writer_string,
                                             gpointer user_data);

Function to resolve ids to writer descriptions.

index :the index being queried.
writer :The object that wants to write
writer_string :A description of the writer.
user_data :user_data as registered
Returns :TRUE if an id could be assigned to the writer.

enum GstIndexFlags

typedef enum {
  GST_INDEX_WRITABLE 		= GST_OBJECT_FLAG_LAST,	
  GST_INDEX_READABLE,	

  GST_INDEX_FLAG_LAST 		= GST_OBJECT_FLAG_LAST + 8
} GstIndexFlags;

Flags for this index

GST_INDEX_WRITABLEThe index is writable
GST_INDEX_READABLEThe index is readable
GST_INDEX_FLAG_LASTFirst flag that can be used by subclasses

GST_INDEX_IS_READABLE()

#define GST_INDEX_IS_READABLE(obj)    (GST_FLAG_IS_SET (obj, GST_INDEX_READABLE))

Check if the index can be read from

obj :The index to check

GST_INDEX_IS_WRITABLE()

#define GST_INDEX_IS_WRITABLE(obj)    (GST_FLAG_IS_SET (obj, GST_INDEX_WRITABLE))

Check if the index can be written to

obj :The index to check

gst_index_new ()

GstIndex*   gst_index_new                   (void);

Create a new tileindex object

Returns : a new index object

gst_index_commit ()

void        gst_index_commit                (GstIndex *index,
                                             gint id);

Tell the index that the writer with the given id is done with this index and is not going to write any more entries to it.

index : the index to commit
id : the writer that commited the index

gst_index_get_group ()

gint        gst_index_get_group             (GstIndex *index);

Get the id of the current group.

index : the index to get the current group from
Returns : the id of the current group.

gst_index_new_group ()

gint        gst_index_new_group             (GstIndex *index);

Create a new group for the given index. It will be set as the current group.

index : the index to create the new group in
Returns : the id of the newly created group.

gst_index_set_group ()

gboolean    gst_index_set_group             (GstIndex *index,
                                             gint groupnum);

Set the current groupnumber to the given argument.

index : the index to set the new group in
groupnum : the groupnumber to set
Returns : TRUE if the operation succeeded, FALSE if the group did not exist.

gst_index_set_certainty ()

void        gst_index_set_certainty         (GstIndex *index,
                                             GstIndexCertainty certainty);

Set the certainty of the given index.

index : the index to set the certainty on
certainty : the certainty to set

gst_index_get_certainty ()

GstIndexCertainty gst_index_get_certainty   (GstIndex *index);

Get the certainty of the given index.

index : the index to get the certainty of
Returns : the certainty of the index.

gst_index_set_filter ()

void        gst_index_set_filter            (GstIndex *index,
                                             GstIndexFilter filter,
                                             gpointer user_data);

Lets the app register a custom filter function so that it can select what entries should be stored in the index.

index : the index to register the filter on
filter : the filter to register
user_data : data passed to the filter function

gst_index_set_resolver ()

void        gst_index_set_resolver          (GstIndex *index,
                                             GstIndexResolver resolver,
                                             gpointer user_data);

Lets the app register a custom function to map index ids to writer descriptions.

index : the index to register the resolver on
resolver : the resolver to register
user_data : data passed to the resolver function

gst_index_get_writer_id ()

gboolean    gst_index_get_writer_id         (GstIndex *index,
                                             GstObject *writer,
                                             gint *id);

Before entries can be added to the index, a writer should obtain a unique id. The methods to add new entries to the index require this id as an argument.

The application can implement a custom function to map the writer object to a string. That string will be used to register or look up an id in the index.

index : the index to get a unique write id for
writer : the GstObject to allocate an id for
id : a pointer to a gint to hold the id
Returns : TRUE if the writer would be mapped to an id.

gst_index_add_format ()

GstIndexEntry* gst_index_add_format         (GstIndex *index,
                                             gint id,
                                             GstFormat format);

Adds a format entry into the index. This function is used to map dynamic GstFormat ids to their original format key.

index : the index to add the entry to
id : the id of the index writer
format : the format to add to the index
Returns : a pointer to the newly added entry in the index.

gst_index_add_association ()

GstIndexEntry* gst_index_add_association    (GstIndex *index,
                                             gint id,
                                             GstAssocFlags flags,
                                             GstFormat format,
                                             gint64 value,
                                             ...);

Associate given format/value pairs with each other. Be sure to pass gint64 values to this functions varargs, you might want to use a gint64 cast to be sure.

index : the index to add the entry to
id : the id of the index writer
flags : optinal flags for this entry
format : the format of the value
value : the value
... : other format/value pairs or 0 to end the list
Returns : a pointer to the newly added entry in the index.

gst_index_add_object ()

GstIndexEntry* gst_index_add_object         (GstIndex *index,
                                             gint id,
                                             gchar *key,
                                             GType type,
                                             gpointer object);

Add the given object to the index with the given key.

index : the index to add the object to
id : the id of the index writer
key : a key for the object
type : the GType of the object
object : a pointer to the object to add
Returns : a pointer to the newly added entry in the index.

gst_index_add_id ()

GstIndexEntry* gst_index_add_id             (GstIndex *index,
                                             gint id,
                                             gchar *description);

Add an id entry into the index.

index : the index to add the entry to
id : the id of the index writer
description : the description of the index writer
Returns : a pointer to the newly added entry in the index.

gst_index_get_assoc_entry ()

GstIndexEntry* gst_index_get_assoc_entry    (GstIndex *index,
                                             gint id,
                                             GstIndexLookupMethod method,
                                             GstAssocFlags flags,
                                             GstFormat format,
                                             gint64 value);

Finds the given format/value in the index

index : the index to search
id : the id of the index writer
method : The lookup method to use
flags : Flags for the entry
format : the format of the value
value : the value to find
Returns : the entry associated with the value or NULL if the value was not found.

gst_index_get_assoc_entry_full ()

GstIndexEntry* gst_index_get_assoc_entry_full
                                            (GstIndex *index,
                                             gint id,
                                             GstIndexLookupMethod method,
                                             GstAssocFlags flags,
                                             GstFormat format,
                                             gint64 value,
                                             GCompareDataFunc func,
                                             gpointer user_data);

Finds the given format/value in the index with the given compare function and user_data.

index : the index to search
id : the id of the index writer
method : The lookup method to use
flags : Flags for the entry
format : the format of the value
value : the value to find
func : the function used to compare entries
user_data : user data passed to the compare function
Returns : the entry associated with the value or NULL if the value was not found.

gst_index_entry_get_type ()

GType       gst_index_entry_get_type        (void);

Returns :

gst_index_entry_copy ()

GstIndexEntry* gst_index_entry_copy         (GstIndexEntry *entry);

Copies an entry and returns the result.

entry : the entry to copy
Returns : a newly allocated GstIndexEntry.

gst_index_entry_free ()

void        gst_index_entry_free            (GstIndexEntry *entry);

Free the memory used by the given entry.

entry : the entry to free

gst_index_entry_assoc_map ()

gboolean    gst_index_entry_assoc_map       (GstIndexEntry *entry,
                                             GstFormat format,
                                             gint64 *value);

Gets alternative formats associated with the indexentry.

entry : the index to search
format : the format of the value the find
value : a pointer to store the value
Returns : TRUE if there was a value associated with the given format.

Properties

"resolver" (GstIndexResolver : Read / Write)

Select a predefined object to string mapper.

Signals

The "entry-added" signal

void        user_function                  (GstIndex *gstindex,
                                            GstIndexEntry *arg1,
                                            gpointer user_data);

Is emited when a new entry is added to the index.

gstindex :the object which received the signal.
arg1 :The entry added to the index.
user_data :user data set when the signal handler was connected.

See Also

GstIndexFactory