diff options
Diffstat (limited to 'gst/gsttoc.h')
-rw-r--r-- | gst/gsttoc.h | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/gst/gsttoc.h b/gst/gsttoc.h new file mode 100644 index 0000000..a1a7b8c --- /dev/null +++ b/gst/gsttoc.h @@ -0,0 +1,112 @@ +/* GStreamer + * (c) 2010, 2012 Alexander Saprykin <xelfium@gmail.com> + * + * gsttoc.h: generic TOC API declaration + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifndef __GST_TOC_H__ +#define __GST_TOC_H__ + +#include <gst/gstconfig.h> +#include <gst/gststructure.h> +#include <gst/gsttaglist.h> +#include <gst/gstformat.h> + +G_BEGIN_DECLS + +typedef struct _GstTocEntry GstTocEntry; +typedef struct _GstToc GstToc; + +/** + * GstTocEntryType: + * @GST_TOC_ENTRY_TYPE_CHAPTER: a chapter type entry. + * @GST_TOC_ENTRY_TYPE_EDITION: an edition entry (angle or alternative in other terms). + * + * The different types of TOC entry. + */ +typedef enum { + GST_TOC_ENTRY_TYPE_CHAPTER = 0, + GST_TOC_ENTRY_TYPE_EDITION = 1 +} GstTocEntryType; + +/** + * GstTocEntry: + * @uid: unique (for a whole TOC) id of the entry. This value should be persistent and + * should not be changed while updating TOC. @uid should be handled as "opaque" value + * without meaning (e.g. applications should not assume the /editionX/chapterY/chapter/Z structure, + * other demuxers could do something else), it should help to track updates of certain entries. + * @type: #GstTocEntryType of this entry. + * @subentries: list of #GstTocEntry children. + * @pads: list of #GstPad objects, related to this #GstTocEntry. + * @tags: tags related to this entry. + * @info: extra information related to this entry. + * + * Definition of TOC entry structure. + */ +struct _GstTocEntry { + gchar *uid; + GstTocEntryType type; + GList *subentries; + GList *pads; + GstTagList *tags; + GstStructure *info; + + /*< private >*/ + gpointer _gst_reserved[GST_PADDING]; +}; + +/* FIXME: pad member should be GstPad type, but that's + * impossible due to recursive includes */ + +/** + * GstToc: + * @entries: list of #GstTocEntry entries of the TOC. + * @tags: tags related to the whole TOC. + * @info: extra information related to the TOC. + * + * Definition of TOC structure. + */ +struct _GstToc { + GList *entries; + GstTagList *tags; + GstStructure *info; + + /*< private >*/ + gpointer _gst_reserved[GST_PADDING]; +}; + +/* functions to create new structures */ +GstToc * gst_toc_new (void); +GstTocEntry * gst_toc_entry_new (GstTocEntryType type, const gchar *uid); +GstTocEntry * gst_toc_entry_new_with_pad (GstTocEntryType type, const gchar *uid, gpointer pad); + +/* functions to free structures */ +void gst_toc_entry_free (GstTocEntry *entry); +void gst_toc_free (GstToc *toc); + +GstTocEntry * gst_toc_find_entry (const GstToc *toc, const gchar *uid); +GstTocEntry * gst_toc_entry_copy (const GstTocEntry *entry); +GstToc * gst_toc_copy (const GstToc *toc); + +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); + +G_END_DECLS + +#endif /* __GST_TOC_H__ */ + |