toc: add more entry types

Make entry types less abstract.

https://bugzilla.gnome.org/show_bug.cgi?id=678742
This commit is contained in:
Tim-Philipp Müller 2012-06-25 23:17:32 +01:00 committed by Tim-Philipp Müller
parent f79d398c61
commit e11f38b98b
4 changed files with 96 additions and 12 deletions

View file

@ -2726,6 +2726,11 @@ gst_toc_find_entry
gst_toc_entry_get_start_stop gst_toc_entry_get_start_stop
gst_toc_entry_set_start_stop gst_toc_entry_set_start_stop
gst_toc_entry_type_get_nick gst_toc_entry_type_get_nick
gst_toc_entry_get_entry_type
gst_toc_entry_is_alternative
gst_toc_entry_is_sequence
GST_TOC_ENTRY_TYPE_IS_ALTERNATIVE
GST_TOC_ENTRY_TYPE_IS_SEQUENCE
<SUBSECTION Standard> <SUBSECTION Standard>
GST_TYPE_TOC GST_TYPE_TOC
GST_TYPE_TOC_ENTRY GST_TYPE_TOC_ENTRY

View file

@ -880,19 +880,75 @@ gst_toc_entry_get_start_stop (const GstTocEntry * entry, gint64 * start,
* *
* Converts @type to a string representation. * Converts @type to a string representation.
* *
* Returns: Returns the human-readable @type. Can be NULL if an error occurred. * Returns: Returns a human-readable string for @type. This string is
* Since: 0.11.92 * only for debugging purpose and should not be displayed in a user
* interface.
*/ */
const gchar * const gchar *
gst_toc_entry_type_get_nick (GstTocEntryType type) gst_toc_entry_type_get_nick (GstTocEntryType type)
{ {
const gchar *entry_types[] = { "chapter", "edition" }; switch (type) {
case GST_TOC_ENTRY_TYPE_ANGLE:
g_return_val_if_fail ((gint) type >= 0 return "angle";
&& (gint) type < G_N_ELEMENTS (entry_types), NULL); case GST_TOC_ENTRY_TYPE_VERSION:
return entry_types[type]; return "version";
case GST_TOC_ENTRY_TYPE_EDITION:
return "edition";
case GST_TOC_ENTRY_TYPE_TITLE:
return "title";
case GST_TOC_ENTRY_TYPE_TRACK:
return "track";
case GST_TOC_ENTRY_TYPE_CHAPTER:
return "chapter";
default:
break;
}
return "invalid";
} }
/**
* gst_toc_entry_get_entry_type:
* @entry: a #GstTocEntry
*
* Returns: @entry's entry type
*/
GstTocEntryType
gst_toc_entry_get_entry_type (GstTocEntry * entry)
{
g_return_val_if_fail (entry != NULL, GST_TOC_ENTRY_TYPE_INVALID);
return entry->type;
}
/**
* gst_toc_entry_is_alternative:
* @entry: a #GstTocEntry
*
* Returns: %TRUE if @entry's type is an alternative type, otherwise %FALSE
*/
gboolean
gst_toc_entry_is_alternative (GstTocEntry * entry)
{
g_return_val_if_fail (entry != NULL, FALSE);
return GST_TOC_ENTRY_TYPE_IS_ALTERNATIVE (entry->type);
}
/**
* gst_toc_entry_is_sequence:
* @entry: a #GstTocEntry
*
* Returns: %TRUE if @entry's type is a sequence type, otherwise %FALSE
*/
gboolean
gst_toc_entry_is_sequence (GstTocEntry * entry)
{
g_return_val_if_fail (entry != NULL, FALSE);
return GST_TOC_ENTRY_TYPE_IS_SEQUENCE (entry->type);
}
gboolean gboolean
__gst_toc_structure_get_updated (const GstStructure * toc) __gst_toc_structure_get_updated (const GstStructure * toc)
{ {

View file

@ -38,16 +38,31 @@ typedef struct _GstToc GstToc;
/** /**
* GstTocEntryType: * GstTocEntryType:
* @GST_TOC_ENTRY_TYPE_CHAPTER: a chapter type entry. * @GST_TOC_ENTRY_TYPE_ANGLE: entry is an angle (i.e. an alternative)
* @GST_TOC_ENTRY_TYPE_EDITION: an edition entry (angle or alternative in other terms). * @GST_TOC_ENTRY_TYPE_VERSION: entry is a version (i.e. alternative)
* @GST_TOC_ENTRY_TYPE_EDITION: entry is an edition (i.e. alternative)
* @GST_TOC_ENTRY_TYPE_INVALID: invalid entry type value
* @GST_TOC_ENTRY_TYPE_TITLE: entry is a title (i.e. a part of a sequence)
* @GST_TOC_ENTRY_TYPE_TRACK: entry is a track (i.e. a part of a sequence)
* @GST_TOC_ENTRY_TYPE_CHAPTER: entry is a chapter (i.e. a part of a sequence)
* *
* The different types of TOC entry. * The different types of TOC entries (see #GstTocEntry).
*
* There are two types of TOC entries: alternatives or parts in a sequence.
*/ */
typedef enum { typedef enum {
GST_TOC_ENTRY_TYPE_CHAPTER = 0, GST_TOC_ENTRY_TYPE_ANGLE = -3,
GST_TOC_ENTRY_TYPE_EDITION = 1 GST_TOC_ENTRY_TYPE_VERSION = -2,
GST_TOC_ENTRY_TYPE_EDITION = -1,
GST_TOC_ENTRY_TYPE_INVALID = 0,
GST_TOC_ENTRY_TYPE_TITLE = 1,
GST_TOC_ENTRY_TYPE_TRACK = 2,
GST_TOC_ENTRY_TYPE_CHAPTER = 3,
} GstTocEntryType; } GstTocEntryType;
#define GST_TOC_ENTRY_TYPE_IS_ALTERNATIVE(entry_type) (entry_type < 0)
#define GST_TOC_ENTRY_TYPE_IS_SEQUENCE(entry_type) (entry_type > 0)
/** /**
* GstTocEntry: * GstTocEntry:
* @uid: unique (for a whole TOC) id of the entry. This value should be persistent and * @uid: unique (for a whole TOC) id of the entry. This value should be persistent and
@ -124,6 +139,11 @@ GstTocEntry * gst_toc_entry_new_with_pad (GstTocEntryType type, const gch
GstTocEntry * gst_toc_find_entry (const GstToc *toc, const gchar *uid); GstTocEntry * gst_toc_find_entry (const GstToc *toc, const gchar *uid);
GstTocEntryType gst_toc_entry_get_entry_type (GstTocEntry * entry);
gboolean gst_toc_entry_is_alternative (GstTocEntry * entry);
gboolean gst_toc_entry_is_sequence (GstTocEntry * entry);
void gst_toc_entry_set_start_stop (GstTocEntry *entry, gint64 start, gint64 stop); void gst_toc_entry_set_start_stop (GstTocEntry *entry, gint64 start, gint64 stop);
gboolean gst_toc_entry_get_start_stop (const GstTocEntry *entry, gint64 *start, gint64 *stop); gboolean gst_toc_entry_get_start_stop (const GstTocEntry *entry, gint64 *start, gint64 *stop);
const gchar * gst_toc_entry_type_get_nick (GstTocEntryType type); const gchar * gst_toc_entry_type_get_nick (GstTocEntryType type);

View file

@ -1128,8 +1128,11 @@ EXPORTS
gst_task_start gst_task_start
gst_task_state_get_type gst_task_state_get_type
gst_task_stop gst_task_stop
gst_toc_entry_get_entry_type
gst_toc_entry_get_start_stop gst_toc_entry_get_start_stop
gst_toc_entry_get_type gst_toc_entry_get_type
gst_toc_entry_is_alternative
gst_toc_entry_is_sequence
gst_toc_entry_new gst_toc_entry_new
gst_toc_entry_new_with_pad gst_toc_entry_new_with_pad
gst_toc_entry_set_start_stop gst_toc_entry_set_start_stop