Top |
GstToc | |
enum | GstTocScope |
GstTocEntry | |
enum | GstTocEntryType |
enum | GstTocLoopType |
#define | GST_TOC_REPEAT_COUNT_INFINITE |
GstToc functions are used to create/free GstToc and GstTocEntry structures. Also they are used to convert GstToc into GstStructure and vice versa.
GstToc lets you to inform other elements in pipeline or application that playing source has some kind of table of contents (TOC). These may be chapters, editions, angles or other types. For example: DVD chapters, Matroska chapters or cue sheet TOC. Such TOC will be useful for applications to display instead of just a playlist.
Using TOC is very easy. Firstly, create GstToc structure which represents root
contents of the source. You can also attach TOC-specific tags to it. Then fill
it with GstTocEntry entries by appending them to the GstToc using
gst_toc_append_entry()
, and appending subentries to a GstTocEntry using
gst_toc_entry_append_sub_entry()
.
Note that root level of the TOC can contain only either editions or chapters. You should not mix them together at the same level. Otherwise you will get serialization /deserialization errors. Make sure that no one of the entries has negative start and stop values.
Use gst_event_new_toc()
to create a new TOC GstEvent, and gst_event_parse_toc()
to
parse received TOC event. Use gst_event_new_toc_select()
to create a new TOC select GstEvent,
and gst_event_parse_toc_select()
to parse received TOC select event. The same rule for
the GstMessage: gst_message_new_toc()
to create new TOC GstMessage, and
gst_message_parse_toc()
to parse received TOC message.
TOCs can have global scope or current scope. Global scope TOCs contain all entries that can possibly be selected using a toc select event, and are what an application is usually interested in. TOCs with current scope only contain the parts of the TOC relevant to the currently selected/playing stream; the current scope TOC is used by downstream elements such as muxers to write correct TOC entries when transcoding files, for example. When playing a DVD, the global TOC would contain a hierarchy of all titles, chapters and angles, for example, while the current TOC would only contain the chapters for the currently playing title if playback of a specific title was requested.
Applications and plugins should not rely on TOCs having a certain kind of structure, but should allow for different alternatives. For example, a simple CUE sheet embedded in a file may be presented as a flat list of track entries, or could have a top-level edition node (or some other alternative type entry) with track entries underneath that node; or even multiple top-level edition nodes (or some other alternative type entries) each with track entries underneath, in case the source file has extracted a track listing from different sources).
#define gst_toc_copy(toc) (GstToc*)gst_mini_object_copy(GST_MINI_OBJECT_CAST(toc))
Copy GstToc with all subentries (deep copy).
newly allocated GstToc in case of success,
NULL
otherwise; free it when done with gst_toc_unref()
.
[nullable]
#define gst_toc_make_writable(toc) (GstToc*)gst_mini_object_make_writable(GST_MINI_OBJECT_CAST(toc))
GList *
gst_toc_get_entries (const GstToc *toc
);
Gets the list of GstTocEntry of toc
.
void gst_toc_append_entry (GstToc *toc
,GstTocEntry *entry
);
Appends the GstTocEntry entry
to toc
.
void gst_toc_merge_tags (GstToc *toc
,GstTagList *tags
,GstTagMergeMode mode
);
Merge tags
into the existing tags of toc
using mode
.
void gst_toc_set_tags (GstToc *toc
,GstTagList *tags
);
Set a GstTagList with tags for the complete toc
.
GstTocEntry * gst_toc_entry_new (GstTocEntryType type
,const gchar *uid
);
Create new GstTocEntry structure.
#define gst_toc_entry_ref(entry) (GstTocEntry*)gst_mini_object_ref(GST_MINI_OBJECT_CAST(entry))
#define gst_toc_entry_unref(entry) gst_mini_object_unref(GST_MINI_OBJECT_CAST(entry))
#define gst_toc_entry_copy(entry) (GstTocEntry*)gst_mini_object_copy(GST_MINI_OBJECT_CAST(entry))
Copy GstTocEntry with all subentries (deep copy).
newly allocated GstTocEntry in case of
success, NULL
otherwise; free it when done with
gst_toc_entry_unref()
.
[nullable]
#define gst_toc_entry_make_writable(entry) (GstTocEntry*)gst_mini_object_make_writable(GST_MINI_OBJECT_CAST(entry))
GstTocEntry * gst_toc_find_entry (const GstToc *toc
,const gchar *uid
);
Find GstTocEntry with given uid
in the toc
.
GstTocEntry with specified
uid
from the toc
, or NULL
if not found.
[transfer none][nullable]
GstToc *
gst_toc_entry_get_toc (GstTocEntry *entry
);
Gets the parent GstToc of entry
.
const gchar *
gst_toc_entry_get_uid (const GstTocEntry *entry
);
Gets the UID of entry
.
GstTocEntry *
gst_toc_entry_get_parent (GstTocEntry *entry
);
Gets the parent GstTocEntry of entry
.
GList *
gst_toc_entry_get_sub_entries (const GstTocEntry *entry
);
Gets the sub-entries of entry
.
void gst_toc_entry_append_sub_entry (GstTocEntry *entry
,GstTocEntry *subentry
);
Appends the GstTocEntry subentry
to entry
.
gboolean gst_toc_entry_get_loop (const GstTocEntry *entry
,GstTocLoopType *loop_type
,gint *repeat_count
);
Get loop_type
and repeat_count
values from the entry
and write them into
appropriate storages. Loops are e.g. used by sampled instruments. GStreamer
is not automatically applying the loop. The application can process this
meta data and use it e.g. to send a seek-event to loop a section.
entry |
GstTocEntry to get values from. |
|
loop_type |
the storage for the loop_type
value, leave |
[out][allow-none] |
repeat_count |
the storage for the repeat_count
value, leave |
[out][allow-none] |
Since: 1.4
void gst_toc_entry_set_loop (GstTocEntry *entry
,GstTocLoopType loop_type
,gint repeat_count
);
Set loop_type
and repeat_count
values for the entry
.
entry |
GstTocEntry to set values. |
|
loop_type |
loop_type value to set. |
|
repeat_count |
repeat_count value to set. |
Since: 1.4
gboolean gst_toc_entry_get_start_stop_times (const GstTocEntry *entry
,gint64 *start
,gint64 *stop
);
Get start
and stop
values from the entry
and write them into appropriate
storages.
entry |
GstTocEntry to get values from. |
|
start |
the storage for the start value, leave
|
[out][allow-none] |
stop |
the storage for the stop value, leave
|
[out][allow-none] |
void gst_toc_entry_set_start_stop_times (GstTocEntry *entry
,gint64 start
,gint64 stop
);
Set start
and stop
values for the entry
.
GstTagList *
gst_toc_entry_get_tags (const GstTocEntry *entry
);
Gets the tags for entry
.
void gst_toc_entry_merge_tags (GstTocEntry *entry
,GstTagList *tags
,GstTagMergeMode mode
);
Merge tags
into the existing tags of entry
using mode
.
void gst_toc_entry_set_tags (GstTocEntry *entry
,GstTagList *tags
);
Set a GstTagList with tags for the complete entry
.
const gchar *
gst_toc_entry_type_get_nick (GstTocEntryType type
);
Converts type
to a string representation.
GstTocEntryType
gst_toc_entry_get_entry_type (const GstTocEntry *entry
);
#define GST_TOC_ENTRY_TYPE_IS_ALTERNATIVE(entry_type) (entry_type < 0)
Checks if entry_type
indicates that its GstTocEntry is an alternative.
#define GST_TOC_ENTRY_TYPE_IS_SEQUENCE(entry_type) (entry_type > 0)
Checks if entry_type
indicates that its GstTocEntry is a sequence.
The scope of a TOC.
global TOC representing all selectable options (this is what applications are usually interested in) |
||
TOC for the currently active/selected stream (this is a TOC representing the current stream from start to EOS, and is what a TOC writer / muxer is usually interested in; it will usually be a subset of the global TOC, e.g. just the chapters of the current title, or the chapters selected for playback from the current title) |
The different types of TOC entries (see GstTocEntry).
There are two types of TOC entries: alternatives or parts in a sequence.
How a GstTocEntry should be repeated. By default, entries are played a single time.
Since: 1.4
#define GST_TOC_REPEAT_COUNT_INFINITE (-1)
Special value for the repeat_count set in gst_toc_entry_set_loop()
or
returned by gst_toc_entry_set_loop()
to indicate infinite looping.
Since: 1.4