summaryrefslogtreecommitdiff
path: root/gst
diff options
context:
space:
mode:
Diffstat (limited to 'gst')
-rw-r--r--gst/Makefile.am4
-rw-r--r--gst/gst.c3
-rw-r--r--gst/gst.h2
-rw-r--r--gst/gst_private.h14
-rw-r--r--gst/gstevent.c111
-rw-r--r--gst/gstevent.h16
-rw-r--r--gst/gstmessage.c59
-rw-r--r--gst/gstmessage.h8
-rw-r--r--gst/gstquark.c2
-rw-r--r--gst/gstquark.h5
-rw-r--r--gst/gstquery.c92
-rw-r--r--gst/gstquery.h10
-rw-r--r--gst/gsttoc.c1038
-rw-r--r--gst/gsttoc.h111
-rw-r--r--gst/gsttocsetter.c362
-rw-r--r--gst/gsttocsetter.h67
16 files changed, 3 insertions, 1901 deletions
diff --git a/gst/Makefile.am b/gst/Makefile.am
index 0da40a0e45..60d4b11a02 100644
--- a/gst/Makefile.am
+++ b/gst/Makefile.am
@@ -98,8 +98,6 @@ libgstreamer_@GST_MAJORMINOR@_la_SOURCES = \
gsttagsetter.c \
gsttask.c \
gsttaskpool.c \
- gsttoc.c \
- gsttocsetter.c \
$(GST_TRACE_SRC) \
gsttypefind.c \
gsttypefindfactory.c \
@@ -190,8 +188,6 @@ gst_headers = \
gsttagsetter.h \
gsttask.h \
gsttaskpool.h \
- gsttoc.h \
- gsttocsetter.h \
gsttrace.h \
gsttypefind.h \
gsttypefindfactory.h \
diff --git a/gst/gst.c b/gst/gst.c
index c95bb8592e..ea1154aee8 100644
--- a/gst/gst.c
+++ b/gst/gst.c
@@ -756,7 +756,6 @@ init_post (GOptionContext * context, GOptionGroup * group, gpointer data,
g_type_class_ref (gst_search_mode_get_type ());
g_type_class_ref (gst_progress_type_get_type ());
g_type_class_ref (gst_caps_intersect_mode_get_type ());
- g_type_class_ref (gst_toc_entry_type_get_type ());
gst_structure_get_type ();
_gst_value_initialize ();
@@ -768,7 +767,6 @@ init_post (GOptionContext * context, GOptionGroup * group, gpointer data,
gst_buffer_list_iterator_get_type ();
_gst_message_initialize ();
_gst_tag_initialize ();
- priv_gst_toc_initialize ();
gst_parse_context_get_type ();
_gst_plugin_initialize ();
@@ -1126,7 +1124,6 @@ gst_deinit (void)
g_type_class_unref (g_type_class_peek (gst_param_spec_fraction_get_type ()));
g_type_class_unref (g_type_class_peek (gst_progress_type_get_type ()));
g_type_class_unref (g_type_class_peek (gst_caps_intersect_mode_get_type ()));
- g_type_class_unref (g_type_class_peek (gst_toc_entry_type_get_type ()));
gst_deinitialized = TRUE;
GST_INFO ("deinitialized GStreamer");
diff --git a/gst/gst.h b/gst/gst.h
index 422cbfb317..35ef29035d 100644
--- a/gst/gst.h
+++ b/gst/gst.h
@@ -68,8 +68,6 @@
#include <gst/gsttagsetter.h>
#include <gst/gsttask.h>
#include <gst/gsttaskpool.h>
-#include <gst/gsttoc.h>
-#include <gst/gsttocsetter.h>
#include <gst/gsttrace.h>
#include <gst/gsttypefind.h>
#include <gst/gsttypefindfactory.h>
diff --git a/gst/gst_private.h b/gst/gst_private.h
index 31f258034b..c36a72d99d 100644
--- a/gst/gst_private.h
+++ b/gst/gst_private.h
@@ -54,9 +54,6 @@ extern const char g_log_domain_gstreamer[];
/* for GstElement */
#include "gstelement.h"
-/* for GstToc */
-#include "gsttoc.h"
-
G_BEGIN_DECLS
/* used by gstparse.c and grammar.y */
@@ -112,17 +109,6 @@ void _gst_query_initialize (void);
void _gst_tag_initialize (void);
void _gst_value_initialize (void);
-void priv_gst_toc_initialize (void);
-
-/* TOC functions */
-/* These functions are used to parse TOC messages, events and queries */
-GstToc* priv_gst_toc_from_structure (const GstStructure *toc);
-GstStructure* priv_gst_toc_to_structure (const GstToc *toc);
-gboolean priv_gst_toc_structure_get_updated (const GstStructure * toc);
-void priv_gst_toc_structure_set_updated (GstStructure * toc, gboolean updated);
-gchar* priv_gst_toc_structure_get_extend_uid (const GstStructure * toc);
-void priv_gst_toc_structure_set_extend_uid (GstStructure * toc, const gchar * extend_uid);
-
/* Private registry functions */
gboolean _priv_gst_registry_remove_cache_plugins (GstRegistry *registry);
void _priv_gst_registry_cleanup (void);
diff --git a/gst/gstevent.c b/gst/gstevent.c
index fbd39a262c..d2e8d10d8e 100644
--- a/gst/gstevent.c
+++ b/gst/gstevent.c
@@ -114,7 +114,6 @@ static GstEventQuarks event_quarks[] = {
{GST_EVENT_EOS, "eos", 0},
{GST_EVENT_NEWSEGMENT, "newsegment", 0},
{GST_EVENT_TAG, "tag", 0},
- {GST_EVENT_TOC, "toc", 0},
{GST_EVENT_BUFFERSIZE, "buffersize", 0},
{GST_EVENT_SINK_MESSAGE, "sink-message", 0},
{GST_EVENT_QOS, "qos", 0},
@@ -122,7 +121,6 @@ static GstEventQuarks event_quarks[] = {
{GST_EVENT_NAVIGATION, "navigation", 0},
{GST_EVENT_LATENCY, "latency", 0},
{GST_EVENT_STEP, "step", 0},
- {GST_EVENT_TOC_SELECT, "toc-select", 0},
{GST_EVENT_CUSTOM_UPSTREAM, "custom-upstream", 0},
{GST_EVENT_CUSTOM_DOWNSTREAM, "custom-downstream", 0},
{GST_EVENT_CUSTOM_DOWNSTREAM_OOB, "custom-downstream-oob", 0},
@@ -1305,112 +1303,3 @@ gst_event_parse_sink_message (GstEvent * event, GstMessage ** msg)
GST_MESSAGE (gst_value_dup_mini_object (gst_structure_id_get_value
(event->structure, GST_QUARK (MESSAGE))));
}
-
-/**
- * gst_event_new_toc:
- * @toc: #GstToc structure.
- * @updated: whether @toc was updated or not.
- *
- * Generate a TOC event from the given @toc. The purpose of the TOC event is to
- * inform elements that some kind of the TOC was found.
- *
- * Returns: a new #GstEvent.
- *
- * Since: 0.10.37
- */
-GstEvent *
-gst_event_new_toc (GstToc * toc, gboolean updated)
-{
- GstStructure *toc_struct;
-
- g_return_val_if_fail (toc != NULL, NULL);
-
- GST_CAT_INFO (GST_CAT_EVENT, "creating toc event");
-
- toc_struct = priv_gst_toc_to_structure (toc);
-
- if (G_LIKELY (toc_struct != NULL)) {
- priv_gst_toc_structure_set_updated (toc_struct, updated);
- return gst_event_new_custom (GST_EVENT_TOC, toc_struct);
- } else
- return NULL;
-}
-
-/**
- * gst_event_parse_toc:
- * @event: a TOC event.
- * @toc: (out): pointer to #GstToc structure.
- * @updated: (out): pointer to store TOC updated flag.
- *
- * Parse a TOC @event and store the results in the given @toc and @updated locations.
- *
- * Since: 0.10.37
- */
-void
-gst_event_parse_toc (GstEvent * event, GstToc ** toc, gboolean * updated)
-{
- const GstStructure *structure;
-
- g_return_if_fail (event != NULL);
- g_return_if_fail (GST_EVENT_TYPE (event) == GST_EVENT_TOC);
- g_return_if_fail (toc != NULL);
-
- structure = gst_event_get_structure (event);
- *toc = priv_gst_toc_from_structure (structure);
-
- if (updated != NULL)
- *updated = priv_gst_toc_structure_get_updated (structure);
-}
-
-/**
- * gst_event_new_toc_select:
- * @uid: UID in the TOC to start playback from.
- *
- * Generate a TOC select event with the given @uid. The purpose of the
- * TOC select event is to start playback based on the TOC's entry with the
- * given @uid.
- *
- * Returns: a new #GstEvent.
- *
- * Since: 0.10.37
- */
-GstEvent *
-gst_event_new_toc_select (const gchar * uid)
-{
- GstStructure *structure;
-
- g_return_val_if_fail (uid != NULL, NULL);
-
- GST_CAT_INFO (GST_CAT_EVENT, "creating toc select event for UID: %s", uid);
-
- structure = gst_structure_id_new (GST_QUARK (EVENT_TOC_SELECT),
- GST_QUARK (UID), G_TYPE_STRING, uid, NULL);
-
- return gst_event_new_custom (GST_EVENT_TOC_SELECT, structure);
-}
-
-/**
- * gst_event_parse_toc_select:
- * @event: a TOC select event.
- * @uid: (out): storage for the selection UID.
- *
- * Parse a TOC select @event and store the results in the given @uid location.
- *
- * Since: 0.10.37
- */
-void
-gst_event_parse_toc_select (GstEvent * event, gchar ** uid)
-{
- const GstStructure *structure;
- const GValue *val;
-
- g_return_if_fail (event != NULL);
- g_return_if_fail (GST_EVENT_TYPE (event) == GST_EVENT_TOC_SELECT);
-
- structure = gst_event_get_structure (event);
- val = gst_structure_id_get_value (structure, GST_QUARK (UID));
-
- if (uid != NULL)
- *uid = g_strdup (g_value_get_string (val));
-
-}
diff --git a/gst/gstevent.h b/gst/gstevent.h
index 8875432985..36ae3c9f06 100644
--- a/gst/gstevent.h
+++ b/gst/gstevent.h
@@ -31,7 +31,6 @@
#include <gst/gstclock.h>
#include <gst/gststructure.h>
#include <gst/gsttaglist.h>
-#include <gst/gsttoc.h>
G_BEGIN_DECLS
@@ -95,8 +94,6 @@ typedef enum {
* send messages that should be emitted in sync with
* rendering.
* Since: 0.10.26
- * @GST_EVENT_TOC: An event which indicates that a new table of contents (TOC)
- was found or updated. Since: 0.10.37
* @GST_EVENT_QOS: A quality message. Used to indicate to upstream elements
* that the downstream elements should adjust their processing
* rate.
@@ -109,8 +106,6 @@ typedef enum {
* Since: 0.10.12
* @GST_EVENT_STEP: A request for stepping through the media. Sinks will usually
* execute the step operation. Since: 0.10.24
- * @GST_EVENT_TOC_SELECT: A request for a new playback position based on TOC
- * entry's UID. Since 0.10.37
* @GST_EVENT_CUSTOM_UPSTREAM: Upstream custom event
* @GST_EVENT_CUSTOM_DOWNSTREAM: Downstream custom event that travels in the
* data flow.
@@ -139,14 +134,12 @@ typedef enum {
GST_EVENT_TAG = GST_EVENT_MAKE_TYPE (7, FLAG(DOWNSTREAM) | FLAG(SERIALIZED)),
GST_EVENT_BUFFERSIZE = GST_EVENT_MAKE_TYPE (8, FLAG(DOWNSTREAM) | FLAG(SERIALIZED)),
GST_EVENT_SINK_MESSAGE = GST_EVENT_MAKE_TYPE (9, FLAG(DOWNSTREAM) | FLAG(SERIALIZED)),
- GST_EVENT_TOC = GST_EVENT_MAKE_TYPE (10, FLAG(DOWNSTREAM) | FLAG(SERIALIZED)),
/* upstream events */
GST_EVENT_QOS = GST_EVENT_MAKE_TYPE (15, FLAG(UPSTREAM)),
GST_EVENT_SEEK = GST_EVENT_MAKE_TYPE (16, FLAG(UPSTREAM)),
GST_EVENT_NAVIGATION = GST_EVENT_MAKE_TYPE (17, FLAG(UPSTREAM)),
GST_EVENT_LATENCY = GST_EVENT_MAKE_TYPE (18, FLAG(UPSTREAM)),
GST_EVENT_STEP = GST_EVENT_MAKE_TYPE (19, FLAG(UPSTREAM)),
- GST_EVENT_TOC_SELECT = GST_EVENT_MAKE_TYPE (20, FLAG(UPSTREAM)),
/* custom events start here */
GST_EVENT_CUSTOM_UPSTREAM = GST_EVENT_MAKE_TYPE (32, FLAG(UPSTREAM)),
@@ -519,11 +512,6 @@ void gst_event_parse_new_segment_full (GstEvent *event,
GstEvent* gst_event_new_tag (GstTagList *taglist) G_GNUC_MALLOC;
void gst_event_parse_tag (GstEvent *event, GstTagList **taglist);
-/* TOC event */
-GstEvent* gst_event_new_toc (GstToc *toc, gboolean updated);
-void gst_event_parse_toc (GstEvent *event, GstToc **toc, gboolean *updated);
-
-
/* buffer */
GstEvent * gst_event_new_buffer_size (GstFormat format, gint64 minsize, gint64 maxsize,
gboolean async) G_GNUC_MALLOC;
@@ -561,10 +549,6 @@ GstEvent* gst_event_new_step (GstFormat format, guint64 amoun
void gst_event_parse_step (GstEvent *event, GstFormat *format, guint64 *amount,
gdouble *rate, gboolean *flush, gboolean *intermediate);
-/* TOC select event */
-GstEvent* gst_event_new_toc_select (const gchar *uid);
-void gst_event_parse_toc_select (GstEvent *event, gchar **uid);
-
G_END_DECLS
#endif /* __GST_EVENT_H__ */
diff --git a/gst/gstmessage.c b/gst/gstmessage.c
index feabbf070f..423ebc2d88 100644
--- a/gst/gstmessage.c
+++ b/gst/gstmessage.c
@@ -113,7 +113,6 @@ static GstMessageQuarks message_quarks[] = {
{GST_MESSAGE_STEP_START, "step-start", 0},
{GST_MESSAGE_QOS, "qos", 0},
{GST_MESSAGE_PROGRESS, "progress", 0},
- {GST_MESSAGE_TOC, "toc", 0},
{0, NULL, 0}
};
@@ -2155,61 +2154,3 @@ gst_message_parse_progress (GstMessage * message, GstProgressType * type,
GST_QUARK (CODE), G_TYPE_STRING, code,
GST_QUARK (TEXT), G_TYPE_STRING, text, NULL);
}
-
-/**
- * gst_message_new_toc:
- * @src: the object originating the message.
- * @toc: #GstToc structure for the message.
- * @updated: whether TOC was updated or not.
- *
- * Create a new TOC message. The message is posted by elements
- * that discovered or updated a TOC.
- *
- * Returns: a new TOC message.
- *
- * MT safe.
- *
- * Since: 0.10.37
- */
-GstMessage *
-gst_message_new_toc (GstObject * src, GstToc * toc, gboolean updated)
-{
- GstStructure *toc_struct;
-
- g_return_val_if_fail (toc != NULL, NULL);
-
- toc_struct = priv_gst_toc_to_structure (toc);
-
- if (G_LIKELY (toc_struct != NULL)) {
- priv_gst_toc_structure_set_updated (toc_struct, updated);
- return gst_message_new_custom (GST_MESSAGE_TOC, src, toc_struct);
- } else
- return NULL;
-}
-
-/**
- * gst_message_parse_toc:
- * @message: a valid #GstMessage of type GST_MESSAGE_TOC.
- * @toc: (out): return location for the TOC.
- * @updated: (out): return location for the updated flag.
- *
- * Extract the TOC from the #GstMessage. The TOC returned in the
- * output argument is a copy; the caller must free it with
- * gst_toc_free() when done.
- *
- * MT safe.
- *
- * Since: 0.10.37
- */
-void
-gst_message_parse_toc (GstMessage * message, GstToc ** toc, gboolean * updated)
-{
- g_return_if_fail (GST_IS_MESSAGE (message));
- g_return_if_fail (GST_MESSAGE_TYPE (message) == GST_MESSAGE_TOC);
- g_return_if_fail (toc != NULL);
-
- *toc = priv_gst_toc_from_structure (message->structure);
-
- if (updated != NULL)
- *updated = priv_gst_toc_structure_get_updated (message->structure);
-}
diff --git a/gst/gstmessage.h b/gst/gstmessage.h
index 0e7ac6bce2..8229f842b9 100644
--- a/gst/gstmessage.h
+++ b/gst/gstmessage.h
@@ -89,8 +89,6 @@ typedef struct _GstMessageClass GstMessageClass;
* @GST_MESSAGE_QOS: A buffer was dropped or an element changed its processing
* strategy for Quality of Service reasons. Since: 0.10.29
* @GST_MESSAGE_PROGRESS: A progress message. Since: 0.10.33
- * @GST_MESSAGE_TOC: A new table of contents (TOC) was found or previously found TOC
- * was updated. Since: 0.10.37
* @GST_MESSAGE_ANY: mask for all of the above messages.
*
* The different message types that are available.
@@ -127,7 +125,6 @@ typedef enum
GST_MESSAGE_STEP_START = (1 << 23),
GST_MESSAGE_QOS = (1 << 24),
GST_MESSAGE_PROGRESS = (1 << 25),
- GST_MESSAGE_TOC = (1 << 26),
GST_MESSAGE_ANY = ~0
} GstMessageType;
@@ -136,7 +133,6 @@ typedef enum
#include <gst/gstelement.h>
#include <gst/gsttaglist.h>
#include <gst/gststructure.h>
-#include <gst/gsttoc.h>
/**
* GST_MESSAGE_TRACE_NAME:
@@ -526,10 +522,6 @@ GstMessage * gst_message_new_progress (GstObject * src, GstProgress
void gst_message_parse_progress (GstMessage * message, GstProgressType * type, gchar ** code,
gchar ** text);
-/* TOC */
-GstMessage * gst_message_new_toc (GstObject *src, GstToc *toc, gboolean updated);
-void gst_message_parse_toc (GstMessage *message, GstToc **toc, gboolean *updated);
-
/* custom messages */
GstMessage * gst_message_new_custom (GstMessageType type,
GstObject * src,
diff --git a/gst/gstquark.c b/gst/gstquark.c
index f8b54da076..91a201271d 100644
--- a/gst/gstquark.c
+++ b/gst/gstquark.c
@@ -50,7 +50,7 @@ static const gchar *_quark_strings[] = {
"intermediate", "GstMessageStepStart", "active", "eos", "sink-message",
"message", "GstMessageQOS", "running-time", "stream-time", "jitter",
"quality", "processed", "dropped", "buffering-ranges", "GstMessageProgress",
- "code", "text", "percent", "timeout", "toc-select", "uid"
+ "code", "text", "percent", "timeout"
};
GQuark _priv_gst_quark_table[GST_QUARK_MAX];
diff --git a/gst/gstquark.h b/gst/gstquark.h
index b3cfb459a4..eec5ac1934 100644
--- a/gst/gstquark.h
+++ b/gst/gstquark.h
@@ -132,10 +132,7 @@ typedef enum _GstQuarkId
GST_QUARK_TEXT = 103,
GST_QUARK_PERCENT = 104,
GST_QUARK_TIMEOUT = 105,
- GST_QUARK_EVENT_TOC_SELECT = 106,
- GST_QUARK_UID = 107,
-
- GST_QUARK_MAX = 108
+ GST_QUARK_MAX = 106
} GstQuarkId;
extern GQuark _priv_gst_quark_table[GST_QUARK_MAX];
diff --git a/gst/gstquery.c b/gst/gstquery.c
index 84a8809ea9..d9c48f8b91 100644
--- a/gst/gstquery.c
+++ b/gst/gstquery.c
@@ -101,7 +101,6 @@ static GstQueryTypeDefinition standard_definitions[] = {
{GST_QUERY_BUFFERING, "buffering", "Buffering status", 0},
{GST_QUERY_CUSTOM, "custom", "Custom query", 0},
{GST_QUERY_URI, "uri", "URI of the source or sink", 0},
- {GST_QUERY_TOC, "toc", "Full table of contents", 0},
{GST_QUERY_NONE, NULL, NULL, 0}
};
@@ -1496,94 +1495,3 @@ gst_query_parse_uri (GstQuery * query, gchar ** uri)
*uri = g_value_dup_string (gst_structure_id_get_value (query->structure,
GST_QUARK (URI)));
}
-
-/**
- * gst_query_new_toc:
- *
- * Constructs a new query TOC query object. Use gst_query_unref()
- * when done with it. A TOC query is used to query the full TOC with
- * the UID marker for TOC extending (to insert some new entries).
- *
- * Returns: A #GstQuery.
- *
- * Since: 0.10.37
- */
-GstQuery *
-gst_query_new_toc (void)
-{
- GstQuery *query;
-
- query = gst_query_new (GST_QUERY_TOC, NULL);
-
- return query;
-}
-
-/**
- * gst_query_set_toc:
- * @query: a #GstQuery with query type GST_QUERY_TOC.
- * @toc: the GstToc to set.
- * @extend_uid: UID which can be used for TOC extending (may be NULL),
- * 0 means root TOC level.
- *
- * Answer a TOC query by setting appropriate #GstToc structure.
- *
- * Since: 0.10.37
- */
-void
-gst_query_set_toc (GstQuery * query, GstToc * toc, const gchar * extend_uid)
-{
- GstStructure *structure;
-
- g_return_if_fail (query != NULL);
- g_return_if_fail (GST_QUERY_TYPE (query) == GST_QUERY_TOC);
- g_return_if_fail (toc != NULL);
-
- structure = priv_gst_toc_to_structure (toc);
-
- g_return_if_fail (structure != NULL);
-
- /* that shouldn't be happen in normal usage */
- if (query->structure != NULL)
- gst_structure_free (query->structure);
-
- if (extend_uid != NULL)
- priv_gst_toc_structure_set_extend_uid (structure, extend_uid);
-
- query->structure = structure;
- gst_structure_set_parent_refcount (query->structure,
- &(query->mini_object.refcount));
-}
-
-/**
- * gst_query_parse_toc:
- * @query: a #GstQuery.
- * @toc: (out): the storage for the received TOC (may be NULL).
- * @extend_uid: (out): the storage for the received extend UID marker (may be NULL),
- * 0 means root TOC level.
- *
- * Parse a TOC query, writing the TOC into @toc as a newly
- * allocated #GstToc and extend UID into @extend_uid, if the respective parameters
- * are non-NULL. Use @extend_uid value to insert new entries into the TOC (@extend_uid will
- * act as root entry for newly inserted entries).
- * Free @toc with gst_toc_free() and @extend_uid with g_free() after usage.
- *
- * Since: 0.10.37
- */
-void
-gst_query_parse_toc (GstQuery * query, GstToc ** toc, gchar ** extend_uid)
-{
- const GstStructure *structure;
-
- g_return_if_fail (query != NULL);
- g_return_if_fail (GST_QUERY_TYPE (query) == GST_QUERY_TOC);
-
- structure = gst_query_get_structure (query);
-
- g_return_if_fail (structure != NULL);
-
- if (toc != NULL)
- *toc = priv_gst_toc_from_structure (structure);
-
- if (extend_uid != NULL)
- *extend_uid = priv_gst_toc_structure_get_extend_uid (structure);
-}
diff --git a/gst/gstquery.h b/gst/gstquery.h
index 9a1a0f91c2..2166537ef2 100644
--- a/gst/gstquery.h
+++ b/gst/gstquery.h
@@ -51,8 +51,6 @@ G_BEGIN_DECLS
* @GST_QUERY_CUSTOM: a custom application or element defined query. Since
* 0.10.22.
* @GST_QUERY_URI: query the URI of the source or sink. Since 0.10.22.
- * @GST_QUERY_TOC: query the full table of contents (TOC) with the marker
- * for an entry which can be used to extend received TOC. Since 0.10.37.
*
* Standard predefined Query types
*/
@@ -71,8 +69,7 @@ typedef enum {
GST_QUERY_FORMATS,
GST_QUERY_BUFFERING,
GST_QUERY_CUSTOM,
- GST_QUERY_URI,
- GST_QUERY_TOC
+ GST_QUERY_URI
} GstQueryType;
/**
@@ -339,11 +336,6 @@ GstQuery * gst_query_new_uri (void) G_GNUC_MALLOC;
void gst_query_parse_uri (GstQuery *query, gchar **uri);
void gst_query_set_uri (GstQuery *query, const gchar *uri);
-/* TOC query */
-GstQuery * gst_query_new_toc (void);
-void gst_query_set_toc (GstQuery *query, GstToc *toc, const gchar *extend_uid);
-void gst_query_parse_toc (GstQuery *query, GstToc **toc, gchar **extend_uid);
-
G_END_DECLS
#endif /* __GST_QUERY_H__ */
diff --git a/gst/gsttoc.c b/gst/gsttoc.c
deleted file mode 100644
index c997c225ea..0000000000
--- a/gst/gsttoc.c
+++ /dev/null
@@ -1,1038 +0,0 @@
-/* GStreamer
- * (c) 2010, 2012 Alexander Saprykin <xelfium@gmail.com>
- *
- * gsttoc.c: GstToc initialization and parsing/creation
- *
- * 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.
- */
-
-/**
- * SECTION:gsttoc
- * @short_description: Generic table of contents support
- * @see_also: #GstStructure, #GstEvent, #GstMessage, #GstQuery, #GstPad
- *
- * #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 #GstToc.entries #GstTocEntry.subentries
- * lists. You should use GST_TOC_ENTRY_TYPE_CHAPTER for generic TOC entry and
- * GST_TOC_ENTRY_TYPE_EDITION for the entries which are considered to be alternatives
- * (like DVD angles, Matroska editions and so on).
- *
- * 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.
- *
- * Please, use #GstToc.info and #GstTocEntry.info fields in that way: create a #GstStructure,
- * put all info related to your element there and put this structure into the info field under
- * the name of your element. Some fields in the info structure can be used for internal purposes,
- * so you should use it in the way described above to not to overwrite already existent fields.
- *
- * 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. Also you can create a new TOC query
- * with gst_query_new_toc(), set it with gst_query_set_toc() and parse it with
- * gst_query_parse_toc().
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include "gst_private.h"
-#include "gstenumtypes.h"
-#include "gsttaglist.h"
-#include "gststructure.h"
-#include "gstvalue.h"
-#include "gsttoc.h"
-#include "gstpad.h"
-
-#define GST_TOC_TOC_NAME "toc"
-#define GST_TOC_ENTRY_NAME "entry"
-
-#define GST_TOC_TOC_UPDATED_FIELD "updated"
-#define GST_TOC_TOC_EXTENDUID_FIELD "extenduid"
-#define GST_TOC_INFO_FIELD "info"
-
-#define GST_TOC_ENTRY_UID_FIELD "uid"
-#define GST_TOC_ENTRY_TYPE_FIELD "type"
-#define GST_TOC_ENTRY_TAGS_FIELD "tags"
-
-#define GST_TOC_TOC_ENTRIES_FIELD "subentries"
-
-#define GST_TOC_INFO_NAME "info-structure"
-#define GST_TOC_INFO_TIME_FIELD "time"
-
-#define GST_TOC_TIME_NAME "time-structure"
-#define GST_TOC_TIME_START_FIELD "start"
-#define GST_TOC_TIME_STOP_FIELD "stop"
-
-
-enum
-{
- GST_TOC_TOC = 0,
- GST_TOC_ENTRY = 1,
- GST_TOC_UPDATED = 2,
- GST_TOC_EXTENDUID = 3,
- GST_TOC_UID = 4,
- GST_TOC_TYPE = 5,
- GST_TOC_TAGS = 6,
- GST_TOC_SUBENTRIES = 7,
- GST_TOC_INFO = 8,
- GST_TOC_INFONAME = 9,
- GST_TOC_TIME = 10,
- GST_TOC_TIMENAME = 11,
- GST_TOC_TIME_START = 12,
- GST_TOC_TIME_STOP = 13,
- GST_TOC_LAST = 14
-};
-
-static GQuark gst_toc_fields[GST_TOC_LAST] = { 0 };
-
-void
-priv_gst_toc_initialize (void)
-{
- static gboolean inited = FALSE;
-
- if (G_LIKELY (!inited)) {
- gst_toc_fields[GST_TOC_TOC] = g_quark_from_static_string (GST_TOC_TOC_NAME);
- gst_toc_fields[GST_TOC_ENTRY] =
- g_quark_from_static_string (GST_TOC_ENTRY_NAME);
-
- gst_toc_fields[GST_TOC_UPDATED] =
- g_quark_from_static_string (GST_TOC_TOC_UPDATED_FIELD);
- gst_toc_fields[GST_TOC_EXTENDUID] =
- g_quark_from_static_string (GST_TOC_TOC_EXTENDUID_FIELD);
- gst_toc_fields[GST_TOC_INFO] =
- g_quark_from_static_string (GST_TOC_INFO_FIELD);
-
- gst_toc_fields[GST_TOC_UID] =
- g_quark_from_static_string (GST_TOC_ENTRY_UID_FIELD);
- gst_toc_fields[GST_TOC_TYPE] =
- g_quark_from_static_string (GST_TOC_ENTRY_TYPE_FIELD);
- gst_toc_fields[GST_TOC_TAGS] =
- g_quark_from_static_string (GST_TOC_ENTRY_TAGS_FIELD);
-
- gst_toc_fields[GST_TOC_SUBENTRIES] =
- g_quark_from_static_string (GST_TOC_TOC_ENTRIES_FIELD);
-
- gst_toc_fields[GST_TOC_INFONAME] =
- g_quark_from_static_string (GST_TOC_INFO_NAME);
- gst_toc_fields[GST_TOC_TIME] =
- g_quark_from_static_string (GST_TOC_INFO_TIME_FIELD);
- gst_toc_fields[GST_TOC_TIMENAME] =
- g_quark_from_static_string (GST_TOC_TIME_NAME);
- gst_toc_fields[GST_TOC_TIME_START] =
- g_quark_from_static_string (GST_TOC_TIME_START_FIELD);
- gst_toc_fields[GST_TOC_TIME_STOP] =
- g_quark_from_static_string (GST_TOC_TIME_STOP_FIELD);
-
- inited = TRUE;
- }
-}
-
-/**
- * gst_toc_new:
- *
- * Create new #GstToc structure.
- *
- * Returns: newly allocated #GstToc structure, free it with gst_toc_free().
- *
- * Since: 0.10.37
- */
-GstToc *
-gst_toc_new (void)
-{
- GstToc *toc;
-
- toc = g_slice_new0 (GstToc);
- toc->tags = gst_tag_list_new ();
- toc->info = gst_structure_id_empty_new (gst_toc_fields[GST_TOC_INFONAME]);
-
- return toc;
-}
-
-/**
- * gst_toc_entry_new:
- * @type: entry type.
- * @uid: unique ID (UID) in the whole TOC.
- *
- * Create new #GstTocEntry structure.
- *
- * Returns: newly allocated #GstTocEntry structure, free it with gst_toc_entry_free().
- *
- * Since: 0.10.37
- */
-GstTocEntry *
-gst_toc_entry_new (GstTocEntryType type, const gchar * uid)
-{
- GstTocEntry *entry;
-
- g_return_val_if_fail (uid != NULL, NULL);
-
- entry = g_slice_new0 (GstTocEntry);
- entry->uid = g_strdup (uid);
- entry->type = type;
- entry->tags = gst_tag_list_new ();
- entry->info = gst_structure_id_empty_new (gst_toc_fields[GST_TOC_INFONAME]);
-
- return entry;
-}
-
-/**
- * gst_toc_entry_new_with_pad:
- * @type: entry type.
- * @uid: unique ID (UID) in the whole TOC.
- * @pad: #GstPad related to this entry.
- *
- * Create new #GstTocEntry structure with #GstPad related.
- *
- * Returns: newly allocated #GstTocEntry structure, free it with gst_toc_entry_free()
- * when done.
- *
- * Since: 0.10.37
- */
-GstTocEntry *
-gst_toc_entry_new_with_pad (GstTocEntryType type, const gchar * uid,
- gpointer pad)
-{
- GstTocEntry *entry;
-
- g_return_val_if_fail (uid != NULL, NULL);
-
- entry = g_slice_new0 (GstTocEntry);
- entry->uid = g_strdup (uid);
- entry->type = type;
- entry->tags = gst_tag_list_new ();
- entry->info = gst_structure_id_empty_new (gst_toc_fields[GST_TOC_INFONAME]);
-
- if (pad != NULL && GST_IS_PAD (pad))
- entry->pads = g_list_append (entry->pads, gst_object_ref (pad));
-
- return entry;
-}
-
-/**
- * gst_toc_free:
- * @toc: #GstToc structure to free.
- *
- * Free unused #GstToc structure.
- *
- * Since: 0.10.37
- */
-void
-gst_toc_free (GstToc * toc)
-{
- g_return_if_fail (toc != NULL);
-
- g_list_foreach (toc->entries, (GFunc) gst_toc_entry_free, NULL);
- g_list_free (toc->entries);
-
- if (toc->tags != NULL)
- gst_tag_list_free (toc->tags);
-
- if (toc->info != NULL)
- gst_structure_free (toc->info);
-
- g_slice_free (GstToc, toc);
-}
-
-/**
- * gst_toc_entry_free:
- * @entry: #GstTocEntry structure to free.
- *
- * Free unused #GstTocEntry structure. Note that #GstTocEntry.uid will
- * be freed with g_free() and all #GstPad objects in the #GstTocEntry.pads
- * list will be unrefed with gst_object_unref().
- *
- * Since: 0.10.37
- */
-void
-gst_toc_entry_free (GstTocEntry * entry)
-{
- GList *cur;
-
- g_return_if_fail (entry != NULL);
-
- g_list_foreach (entry->subentries, (GFunc) gst_toc_entry_free, NULL);
- g_list_free (entry->subentries);
-
- g_free (entry->uid);
-
- if (entry->tags != NULL)
- gst_tag_list_free (entry->tags);
-
- if (entry->info != NULL)
- gst_structure_free (entry->info);
-
- cur = entry->pads;
- while (cur != NULL) {
- if (GST_IS_PAD (cur->data))
- gst_object_unref (cur->data);
- cur = cur->next;
- }
-
- g_list_free (entry->pads);
-
- g_slice_free (GstTocEntry, entry);
-}
-
-static GstStructure *
-gst_toc_structure_new (GstTagList * tags, GstStructure * info)
-{
- GstStructure *ret;
- GValue val = { 0 };
-
- ret = gst_structure_id_empty_new (gst_toc_fields[GST_TOC_TOC]);
-
- if (tags != NULL) {
- g_value_init (&val, GST_TYPE_STRUCTURE);
- gst_value_set_structure (&val, GST_STRUCTURE (tags));
- gst_structure_id_set_value (ret, gst_toc_fields[GST_TOC_TAGS], &val);
- g_value_unset (&val);
- }
-
- if (info != NULL) {
- g_value_init (&val, GST_TYPE_STRUCTURE);
- gst_value_set_structure (&val, info);
- gst_structure_id_set_value (ret, gst_toc_fields[GST_TOC_INFO], &val);
- g_value_unset (&val);
- }
-
- return ret;
-}
-
-static GstStructure *
-gst_toc_entry_structure_new (GstTocEntryType type, const gchar * uid,
- GstTagList * tags, GstStructure * info)
-{
- GValue val = { 0 };
- GstStructure *ret;
-
- ret = gst_structure_id_empty_new (gst_toc_fields[GST_TOC_ENTRY]);
-
- gst_structure_id_set (ret, gst_toc_fields[GST_TOC_TYPE],
- GST_TYPE_TOC_ENTRY_TYPE, type, NULL);
-
- g_value_init (&val, G_TYPE_STRING);
- g_value_set_string (&val, uid);
- gst_structure_id_set_value (ret, gst_toc_fields[GST_TOC_UID], &val);
- g_value_unset (&val);
-
- if (tags != NULL) {
- g_value_init (&val, GST_TYPE_STRUCTURE);
- gst_value_set_structure (&val, GST_STRUCTURE (tags));
- gst_structure_id_set_value (ret, gst_toc_fields[GST_TOC_TAGS], &val);
- g_value_unset (&val);
- }
-
- if (info != NULL) {
- g_value_init (&val, GST_TYPE_STRUCTURE);
- gst_value_set_structure (&val, info);
- gst_structure_id_set_value (ret, gst_toc_fields[GST_TOC_INFO], &val);
- g_value_unset (&val);
- }
-
- return ret;
-}
-
-static guint
-gst_toc_entry_structure_n_subentries (const GstStructure * entry)
-{
- if (G_UNLIKELY (!gst_structure_id_has_field_typed (entry,
- gst_toc_fields[GST_TOC_SUBENTRIES], GST_TYPE_ARRAY)))
- return 0;
- else
- return gst_value_array_get_size ((gst_structure_id_get_value (entry,
- gst_toc_fields[GST_TOC_SUBENTRIES])));
-}
-
-static const GstStructure *
-gst_toc_entry_structure_nth_subentry (const GstStructure * entry, guint nth)
-{
- guint count;
- const GValue *array;
-
- count = gst_toc_entry_structure_n_subentries (entry);
-
- if (count < nth)
- return NULL;
-
- if (G_UNLIKELY (!gst_structure_id_has_field_typed (entry,
- gst_toc_fields[GST_TOC_SUBENTRIES], GST_TYPE_ARRAY)))
- return NULL;
- else {
- array =
- gst_value_array_get_value (gst_structure_id_get_value (entry,
- gst_toc_fields[GST_TOC_SUBENTRIES]), nth);
- return gst_value_get_structure (array);
- }
-}
-
-static GstTocEntry *
-gst_toc_entry_from_structure (const GstStructure * entry, guint level)
-{
- GstTocEntry *ret, *subentry;
- const GValue *val;
- const GstStructure *subentry_struct;
- GstTagList *list;
- GstStructure *st;
- gint count, i;
- const gchar *uid;
- guint chapters_count = 0, editions_count = 0;
-
- g_return_val_if_fail (entry != NULL, NULL);
- g_return_val_if_fail (gst_structure_id_has_field_typed (entry,
- gst_toc_fields[GST_TOC_UID], G_TYPE_STRING), NULL);
- g_return_val_if_fail (gst_structure_id_has_field_typed (entry,
- gst_toc_fields[GST_TOC_TYPE], GST_TYPE_TOC_ENTRY_TYPE), NULL);
-
- val = gst_structure_id_get_value (entry, gst_toc_fields[GST_TOC_UID]);
- uid = g_value_get_string (val);
-
- ret = gst_toc_entry_new (GST_TOC_ENTRY_TYPE_CHAPTER, uid);
-
- gst_structure_get_enum (entry, GST_TOC_ENTRY_TYPE_FIELD,
- GST_TYPE_TOC_ENTRY_TYPE, (gint *) & (ret->type));
-
- if (gst_structure_id_has_field_typed (entry,
- gst_toc_fields[GST_TOC_SUBENTRIES], GST_TYPE_ARRAY)) {
- count = gst_toc_entry_structure_n_subentries (entry);
-
- for (i = 0; i < count; ++i) {
- subentry_struct = gst_toc_entry_structure_nth_subentry (entry, i);
- subentry = gst_toc_entry_from_structure (subentry_struct, level + 1);
-
- /* skip empty editions */
- if (G_UNLIKELY (subentry->type == GST_TOC_ENTRY_TYPE_EDITION
- && subentry->subentries == NULL)) {
- g_warning
- ("Empty edition found while deserializing TOC from GstStructure, skipping");
- continue;
- }
-
- if (subentry->type == GST_TOC_ENTRY_TYPE_EDITION)
- ++editions_count;
- else
- ++chapters_count;
-
- /* check for mixed content */
- if (G_UNLIKELY (chapters_count > 0 && editions_count > 0)) {
- g_critical
- ("Mixed editions and chapters in the TOC contents, the TOC is broken");
- gst_toc_entry_free (subentry);
- gst_toc_entry_free (ret);
- return NULL;
- }
-
- if (G_UNLIKELY (subentry == NULL)) {
- gst_toc_entry_free (ret);
- return NULL;
- }
-
- ret->subentries = g_list_prepend (ret->subentries, subentry);
- }
-
- ret->subentries = g_list_reverse (ret->subentries);
- }
-
- if (gst_structure_id_has_field_typed (entry,
- gst_toc_fields[GST_TOC_TAGS], GST_TYPE_STRUCTURE)) {
- val = gst_structure_id_get_value (entry, gst_toc_fields[GST_TOC_TAGS]);
-
- if (G_LIKELY (GST_IS_TAG_LIST (gst_value_get_structure (val)))) {
- list = gst_tag_list_copy (GST_TAG_LIST (gst_value_get_structure (val)));
- gst_tag_list_free (ret->tags);
- ret->tags = list;
- }
- }
-
- if (gst_structure_id_has_field_typed (entry,
- gst_toc_fields[GST_TOC_INFO], GST_TYPE_STRUCTURE)) {
- val = gst_structure_id_get_value (entry, gst_toc_fields[GST_TOC_INFO]);
-
- if (G_LIKELY (GST_IS_STRUCTURE (gst_value_get_structure (val)))) {
- st = gst_structure_copy (gst_value_get_structure (val));
- gst_structure_free (ret->info);
- ret->info = st;
- }
- }
-
- return ret;
-}
-
-GstToc *
-priv_gst_toc_from_structure (const GstStructure * toc)
-{
- GstToc *ret;
- GstTocEntry *subentry;
- const GstStructure *subentry_struct;
- const GValue *val;
- GstTagList *list;
- GstStructure *st;
- guint count, i;
- guint editions_count = 0, chapters_count = 0;
-
- g_return_val_if_fail (toc != NULL, NULL);
-
- ret = gst_toc_new ();
-
- if (gst_structure_id_has_field_typed (toc,
- gst_toc_fields[GST_TOC_SUBENTRIES], GST_TYPE_ARRAY)) {
- count = gst_toc_entry_structure_n_subentries (toc);
-
- for (i = 0; i < count; ++i) {
- subentry_struct = gst_toc_entry_structure_nth_subentry (toc, i);
- subentry = gst_toc_entry_from_structure (subentry_struct, 0);
-
- /* skip empty editions */
- if (G_UNLIKELY (subentry->type == GST_TOC_ENTRY_TYPE_EDITION
- && subentry->subentries == NULL)) {
- g_warning
- ("Empty edition found while deserializing TOC from GstStructure, skipping");
- continue;
- }
-
- /* check for success */
- if (G_UNLIKELY (subentry == NULL)) {
- g_critical ("Couldn't serialize deserializing TOC from GstStructure");
- gst_toc_free (ret);
- return NULL;
- }
-
- if (subentry->type == GST_TOC_ENTRY_TYPE_EDITION)
- ++editions_count;
- else
- ++chapters_count;
-
- /* check for mixed content */
- if (G_UNLIKELY (chapters_count > 0 && editions_count > 0)) {
- g_critical
- ("Mixed editions and chapters in the TOC contents, the TOC is broken");
- gst_toc_entry_free (subentry);
- gst_toc_free (ret);
- return NULL;
- }
-
- ret->entries = g_list_prepend (ret->entries, subentry);
- }
-
- ret->entries = g_list_reverse (ret->entries);
- }
-
- if (gst_structure_id_has_field_typed (toc,
- gst_toc_fields[GST_TOC_TAGS], GST_TYPE_STRUCTURE)) {
- val = gst_structure_id_get_value (toc, gst_toc_fields[GST_TOC_TAGS]);
-
- if (G_LIKELY (GST_IS_TAG_LIST (gst_value_get_structure (val)))) {
- list = gst_tag_list_copy (GST_TAG_LIST (gst_value_get_structure (val)));
- gst_tag_list_free (ret->tags);
- ret->tags = list;
- }
- }
-
- if (gst_structure_id_has_field_typed (toc,
- gst_toc_fields[GST_TOC_INFO], GST_TYPE_STRUCTURE)) {
- val = gst_structure_id_get_value (toc, gst_toc_fields[GST_TOC_INFO]);
-
- if (G_LIKELY (GST_IS_STRUCTURE (gst_value_get_structure (val)))) {
- st = gst_structure_copy (gst_value_get_structure (val));
- gst_structure_free (ret->info);
- ret->info = st;
- }
- }
-
- if (G_UNLIKELY (ret->entries == NULL)) {
- gst_toc_free (ret);
- return NULL;
- }
-
- return ret;
-}
-
-static GstStructure *
-gst_toc_entry_to_structure (const GstTocEntry * entry, guint level)
-{
- GstStructure *ret, *subentry_struct;
- GstTocEntry *subentry;
- GList *cur;
- GValue subentries_val = { 0 };
- GValue entry_val = { 0 };
- guint chapters_count = 0, editions_count = 0;
-
- g_return_val_if_fail (entry != NULL, NULL);
-
- ret =
- gst_toc_entry_structure_new (entry->type, entry->uid, entry->tags,
- entry->info);
-
- g_value_init (&subentries_val, GST_TYPE_ARRAY);
- g_value_init (&entry_val, GST_TYPE_STRUCTURE);
-
- cur = entry->subentries;
- while (cur != NULL) {
- subentry = cur->data;
-
- if (subentry->type == GST_TOC_ENTRY_TYPE_EDITION)
- ++editions_count;
- else
- ++chapters_count;
-
- /* check for mixed content */
- if (G_UNLIKELY (chapters_count > 0 && editions_count > 0)) {
- g_critical
- ("Mixed editions and chapters in the TOC contents, the TOC is broken");
- gst_structure_free (ret);
- g_value_unset (&entry_val);
- g_value_unset (&subentries_val);
- return NULL;
- }
-
- /* skip empty editions */
- if (G_UNLIKELY (subentry->type == GST_TOC_ENTRY_TYPE_EDITION
- && subentry->subentries == NULL)) {
- g_warning
- ("Empty edition found while serializing TOC to GstStructure, skipping");
- cur = cur->next;
- continue;
- }
-
- subentry_struct = gst_toc_entry_to_structure (subentry, level + 1);
-
- /* check for success */
- if (G_UNLIKELY (subentry_struct == NULL)) {
- gst_structure_free (ret);
- g_value_unset (&subentries_val);
- g_value_unset (&entry_val);
- return NULL;
- }
-
- /* skip empty editions */
- if (G_UNLIKELY (subentry->type == GST_TOC_ENTRY_TYPE_EDITION
- && subentry->subentries == NULL)) {
- g_warning
- ("Empty edition found while serializing TOC to GstStructure, skipping");
- cur = cur->next;
- continue;
- }
-
- gst_value_set_structure (&entry_val, subentry_struct);
- gst_value_array_append_value (&subentries_val, &entry_val);
- gst_structure_free (subentry_struct);
-
- cur = cur->next;
- }
-
- gst_structure_id_set_value (ret, gst_toc_fields[GST_TOC_SUBENTRIES],
- &subentries_val);
-
- g_value_unset (&subentries_val);
- g_value_unset (&entry_val);
- return ret;
-}
-
-GstStructure *
-priv_gst_toc_to_structure (const GstToc * toc)
-{
- GValue val = { 0 };
- GValue subentries_val = { 0 };
- GstStructure *ret, *subentry_struct;
- GstTocEntry *subentry;
- GList *cur;
- guint editions_count = 0, chapters_count = 0;
-
- g_return_val_if_fail (toc != NULL, NULL);
- g_return_val_if_fail (toc->entries != NULL, NULL);
-
- ret = gst_toc_structure_new (toc->tags, toc->info);
-
- g_value_init (&val, GST_TYPE_STRUCTURE);
- g_value_init (&subentries_val, GST_TYPE_ARRAY);
- cur = toc->entries;
-
- while (cur != NULL) {
- subentry = cur->data;
-
- if (subentry->type == GST_TOC_ENTRY_TYPE_EDITION)
- ++editions_count;
- else
- ++chapters_count;
-
- /* check for mixed content */
- if (G_UNLIKELY (chapters_count > 0 && editions_count > 0)) {
- g_critical
- ("Mixed editions and chapters in the TOC contents, the TOC is broken");
- gst_structure_free (ret);
- g_value_unset (&val);
- g_value_unset (&subentries_val);
- return NULL;
- }
-
- /* skip empty editions */
- if (G_UNLIKELY (subentry->type == GST_TOC_ENTRY_TYPE_EDITION
- && subentry->subentries == NULL)) {
- g_warning
- ("Empty edition found while serializing TOC to GstStructure, skipping");
- cur = cur->next;
- continue;
- }
-
- subentry_struct = gst_toc_entry_to_structure (subentry, 0);
-
- /* check for success */
- if (G_UNLIKELY (subentry_struct == NULL)) {
- g_critical ("Couldn't serialize TOC to GstStructure");
- gst_structure_free (ret);
- g_value_unset (&val);
- g_value_unset (&subentries_val);
- return NULL;
- }
-
- gst_value_set_structure (&val, subentry_struct);
- gst_value_array_append_value (&subentries_val, &val);
- gst_structure_free (subentry_struct);
-
- cur = cur->next;
- }
-
- gst_structure_id_set_value (ret, gst_toc_fields[GST_TOC_SUBENTRIES],
- &subentries_val);
-
- g_value_unset (&val);
- g_value_unset (&subentries_val);
- return ret;
-}
-
-static gboolean
-gst_toc_check_entry_for_uid (const GstTocEntry * entry, const gchar * uid)
-{
- GList *cur;
-
- g_return_val_if_fail (entry != NULL, FALSE);
- g_return_val_if_fail (uid != NULL, FALSE);
-
- if (g_strcmp0 (entry->uid, uid) == 0)
- return TRUE;
-
- cur = entry->subentries;
- while (cur != NULL) {
- if (gst_toc_check_entry_for_uid (cur->data, uid))
- return TRUE;
- cur = cur->next;
- }
-
- return FALSE;
-}
-
-/**
- * gst_toc_find_entry:
- * @toc: #GstToc to search in.
- * @uid: UID to find #GstTocEntry with.
- *
- * Find #GstTocEntry with given @uid in the @toc.
- *
- * Returns: #GstTocEntry with specified @uid from the @toc, or NULL if not found.
- *
- * Since: 0.10.37
- */
-GstTocEntry *
-gst_toc_find_entry (const GstToc * toc, const gchar * uid)
-{
- GList *cur;
-
- g_return_val_if_fail (toc != NULL, NULL);
- g_return_val_if_fail (uid != NULL, NULL);
-
- cur = toc->entries;
- while (cur != NULL) {
- if (gst_toc_check_entry_for_uid (cur->data, uid))
- return cur->data;
- cur = cur->next;
- }
-
- return NULL;
-}
-
-/**
- * gst_toc_entry_copy:
- * @entry: #GstTocEntry to copy.
- *
- * Copy #GstTocEntry with all subentries (deep copy).
- *
- * Returns: newly allocated #GstTocEntry in case of success, NULL otherwise;
- * free it when done with gst_toc_entry_free().
- *
- * Since: 0.10.37
- */
-GstTocEntry *
-gst_toc_entry_copy (const GstTocEntry * entry)
-{
- GstTocEntry *ret, *sub;
- GList *cur;
- GstTagList *list;
- GstStructure *st;
-
- g_return_val_if_fail (entry != NULL, NULL);
-
- ret = gst_toc_entry_new (entry->type, entry->uid);
-
- if (GST_IS_STRUCTURE (entry->info)) {
- st = gst_structure_copy (entry->info);
- gst_structure_free (ret->info);
- ret->info = st;
- }
-
- if (GST_IS_TAG_LIST (entry->tags)) {
- list = gst_tag_list_copy (entry->tags);
- gst_tag_list_free (ret->tags);
- ret->tags = list;
- }
-
- cur = entry->pads;
- while (cur != NULL) {
- if (GST_IS_PAD (cur->data))
- ret->pads = g_list_prepend (ret->pads, gst_object_ref (cur->data));
- cur = cur->next;
- }
- ret->pads = g_list_reverse (ret->pads);
-
- cur = entry->subentries;
- while (cur != NULL) {
- sub = gst_toc_entry_copy (cur->data);
-
- if (sub != NULL)
- ret->subentries = g_list_prepend (ret->subentries, sub);
-
- cur = cur->next;
- }
- ret->subentries = g_list_reverse (ret->subentries);
-
- return ret;
-}
-
-/**
- * gst_toc_copy:
- * @toc: #GstToc to copy.
- *
- * Copy #GstToc with all subentries (deep copy).
- *
- * Returns: newly allocated #GstToc in case of success, NULL otherwise;
- * free it when done with gst_toc_free().
- *
- * Since: 0.10.37
- */
-GstToc *
-gst_toc_copy (const GstToc * toc)
-{
- GstToc *ret;
- GstTocEntry *entry;
- GList *cur;
- GstTagList *list;
- GstStructure *st;
-
- g_return_val_if_fail (toc != NULL, NULL);
-
- ret = gst_toc_new ();
-
- if (GST_IS_STRUCTURE (toc->info)) {
- st = gst_structure_copy (toc->info);
- gst_structure_free (ret->info);
- ret->info = st;
- }
-
- if (GST_IS_TAG_LIST (toc->tags)) {
- list = gst_tag_list_copy (toc->tags);
- gst_tag_list_free (ret->tags);
- ret->tags = list;
- }
-
- cur = toc->entries;
- while (cur != NULL) {
- entry = gst_toc_entry_copy (cur->data);
-
- if (entry != NULL)
- ret->entries = g_list_prepend (ret->entries, entry);
-
- cur = cur->next;
- }
- ret->entries = g_list_reverse (ret->entries);
-
- return ret;
-}
-
-/**
- * gst_toc_entry_set_start_stop:
- * @entry: #GstTocEntry to set values.
- * @start: start value to set.
- * @stop: stop value to set.
- *
- * Set @start and @stop values for the @entry.
- *
- * Since: 0.10.37
- */
-void
-gst_toc_entry_set_start_stop (GstTocEntry * entry, gint64 start, gint64 stop)
-{
- const GValue *val;
- GstStructure *structure = NULL;
-
- g_return_if_fail (entry != NULL);
- g_return_if_fail (GST_IS_STRUCTURE (entry->info));
-
- if (gst_structure_id_has_field_typed (entry->info,
- gst_toc_fields[GST_TOC_TIME], GST_TYPE_STRUCTURE)) {
- val =
- gst_structure_id_get_value (entry->info, gst_toc_fields[GST_TOC_TIME]);
- structure = gst_structure_copy (gst_value_get_structure (val));
- }
-
- if (structure == NULL)
- structure = gst_structure_id_empty_new (gst_toc_fields[GST_TOC_TIMENAME]);
-
- gst_structure_id_set (structure, gst_toc_fields[GST_TOC_TIME_START],
- G_TYPE_INT64, start, gst_toc_fields[GST_TOC_TIME_STOP], G_TYPE_INT64,
- stop, NULL);
-
- gst_structure_id_set (entry->info, gst_toc_fields[GST_TOC_TIME],
- GST_TYPE_STRUCTURE, structure, NULL);
-
- gst_structure_free (structure);
-}
-
-/**
- * gst_toc_entry_get_start_stop:
- * @entry: #GstTocEntry to get values from.
- * @start: (out): the storage for the start value, leave #NULL if not need.
- * @stop: (out): the storage for the stop value, leave #NULL if not need.
- *
- * Get start and stop values from the @entry and write them into appropriate storages.
- *
- * Returns: TRUE if all non-NULL storage pointers were filled with appropriate values,
- * FALSE otherwise.
- *
- * Since: 0.10.37
- */
-gboolean
-gst_toc_entry_get_start_stop (const GstTocEntry * entry, gint64 * start,
- gint64 * stop)
-{
- gboolean ret = TRUE;
- const GValue *val;
- const GstStructure *structure;
-
- g_return_val_if_fail (entry != NULL, FALSE);
- g_return_val_if_fail (GST_IS_STRUCTURE (entry->info), FALSE);
-
- if (!gst_structure_id_has_field_typed (entry->info,
- gst_toc_fields[GST_TOC_TIME], GST_TYPE_STRUCTURE))
- return FALSE;
-
- val = gst_structure_id_get_value (entry->info, gst_toc_fields[GST_TOC_TIME]);
- structure = gst_value_get_structure (val);
-
- if (start != NULL) {
- if (gst_structure_id_has_field_typed (structure,
- gst_toc_fields[GST_TOC_TIME_START], G_TYPE_INT64))
- *start =
- g_value_get_int64 (gst_structure_id_get_value (structure,
- gst_toc_fields[GST_TOC_TIME_START]));
- else
- ret = FALSE;
- }
-
- if (stop != NULL) {
- if (gst_structure_id_has_field_typed (structure,
- gst_toc_fields[GST_TOC_TIME_STOP], G_TYPE_INT64))
- *stop =
- g_value_get_int64 (gst_structure_id_get_value (structure,
- gst_toc_fields[GST_TOC_TIME_STOP]));
- else
- ret = FALSE;
- }
-
- return ret;
-}
-
-gboolean
-priv_gst_toc_structure_get_updated (const GstStructure * toc)
-{
- const GValue *val;
-
- g_return_val_if_fail (GST_IS_STRUCTURE (toc), FALSE);
-
- if (G_LIKELY (gst_structure_id_has_field_typed (toc,
- gst_toc_fields[GST_TOC_UPDATED], G_TYPE_BOOLEAN))) {
- val = gst_structure_id_get_value (toc, gst_toc_fields[GST_TOC_UPDATED]);
- return g_value_get_boolean (val);
- }
-
- return FALSE;
-}
-
-void
-priv_gst_toc_structure_set_updated (GstStructure * toc, gboolean updated)
-{
- GValue val = { 0 };
-
- g_return_if_fail (toc != NULL);
-
- g_value_init (&val, G_TYPE_BOOLEAN);
- g_value_set_boolean (&val, updated);
- gst_structure_id_set_value (toc, gst_toc_fields[GST_TOC_UPDATED], &val);
- g_value_unset (&val);
-}
-
-gchar *
-priv_gst_toc_structure_get_extend_uid (const GstStructure * toc)
-{
- const GValue *val;
-
- g_return_val_if_fail (GST_IS_STRUCTURE (toc), NULL);
-
- if (G_LIKELY (gst_structure_id_has_field_typed (toc,
- gst_toc_fields[GST_TOC_EXTENDUID], G_TYPE_STRING))) {
- val = gst_structure_id_get_value (toc, gst_toc_fields[GST_TOC_EXTENDUID]);
- return g_strdup (g_value_get_string (val));
- }
-
- return NULL;
-}
-
-void
-priv_gst_toc_structure_set_extend_uid (GstStructure * toc,
- const gchar * extend_uid)
-{
- GValue val = { 0 };
-
- g_return_if_fail (toc != NULL);
- g_return_if_fail (extend_uid != NULL);
-
- g_value_init (&val, G_TYPE_STRING);
- g_value_set_string (&val, extend_uid);
- gst_structure_id_set_value (toc, gst_toc_fields[GST_TOC_EXTENDUID], &val);
- g_value_unset (&val);
-}
diff --git a/gst/gsttoc.h b/gst/gsttoc.h
deleted file mode 100644
index a817efecfe..0000000000
--- a/gst/gsttoc.h
+++ /dev/null
@@ -1,111 +0,0 @@
-/* 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/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__ */
-
diff --git a/gst/gsttocsetter.c b/gst/gsttocsetter.c
deleted file mode 100644
index bee9b34ff1..0000000000
--- a/gst/gsttocsetter.c
+++ /dev/null
@@ -1,362 +0,0 @@
-/* GStreamer
- * Copyright (C) 2010, 2012 Alexander Saprykin <xelfium@gmail.com>
- *
- * gsttocsetter.c: interface for TOC setting on elements
- *
- * 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.
- */
-
-/**
- * SECTION:gsttocsetter
- * @short_description: Element interface that allows setting and retrieval
- * of the TOC
- *
- * Element interface that allows setting of the TOC.
- *
- * Elements that support some kind of chapters or editions (or tracks like in
- * the FLAC cue sheet) will implement this interface.
- *
- * If you just want to retrieve the TOC in your application then all you
- * need to do is watch for TOC messages on your pipeline's bus (or you can
- * perform TOC query). This interface is only for setting TOC data, not for
- * extracting it. To set TOC from the application, find proper tocsetter element
- * and set TOC using gst_toc_setter_set_toc().
- *
- * Elements implementing the #GstTocSetter interface can extend existing TOC
- * by getting extend UID for that (you can use gst_toc_find_entry() to retrieve it)
- * with any TOC entries received from downstream.
- */
-
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include "gst_private.h"
-#include "gsttocsetter.h"
-#include <gobject/gvaluecollector.h>
-#include <string.h>
-
-GST_DEBUG_CATEGORY_STATIC (gst_toc_interface_debug);
-#define GST_CAT_DEFAULT tag_toc_interface_debug
-
-static GQuark gst_toc_key;
-
-typedef struct
-{
- GstToc *toc;
- GStaticMutex lock;
-} GstTocData;
-
-GType
-gst_toc_setter_get_type (void)
-{
- static volatile gsize toc_setter_type = 0;
-
- if (g_once_init_enter (&toc_setter_type)) {
- GType _type;
- static const GTypeInfo toc_setter_info = {
- sizeof (GstTocSetterIFace), /* class_size */
- NULL, /* base_init */
- NULL, /* base_finalize */
- NULL,
- NULL, /* class_finalize */
- NULL, /* class_data */
- 0,
- 0,
- NULL
- };
-
- GST_DEBUG_CATEGORY_INIT (gst_toc_interface_debug, "GstTocInterface", 0,
- "interfaces for the TOC");
-
- _type = g_type_register_static (G_TYPE_INTERFACE, "GstTocSetter",
- &toc_setter_info, 0);
-
- g_type_interface_add_prerequisite (_type, GST_TYPE_ELEMENT);
-
- gst_toc_key = g_quark_from_static_string ("GST_TOC_SETTER");
- g_once_init_leave (&toc_setter_type, _type);
- }
-
- return toc_setter_type;
-}
-
-static void
-gst_toc_data_free (gpointer p)
-{
- GstTocData *data = (GstTocData *) p;
-
- if (data->toc)
- gst_toc_free (data->toc);
-
- g_static_mutex_free (&data->lock);
-
- g_slice_free (GstTocData, data);
-}
-
-static GstTocData *
-gst_toc_setter_get_data (GstTocSetter * setter)
-{
- GstTocData *data;
-
- data = g_object_get_qdata (G_OBJECT (setter), gst_toc_key);
- if (!data) {
- static GStaticMutex create_mutex = G_STATIC_MUTEX_INIT;
-
- /* make sure no other thread is creating a GstTocData at the same time */
- g_static_mutex_lock (&create_mutex);
- data = g_object_get_qdata (G_OBJECT (setter), gst_toc_key);
- if (!data) {
- data = g_slice_new (GstTocData);
- g_static_mutex_init (&data->lock);
- data->toc = NULL;
- g_object_set_qdata_full (G_OBJECT (setter), gst_toc_key, data,
- gst_toc_data_free);
- }
- g_static_mutex_unlock (&create_mutex);
- }
-
- return data;
-}
-
-/**
- * gst_toc_setter_reset_toc:
- * @setter: a #GstTocSetter.
- *
- * Reset the internal TOC. Elements should call this from within the
- * state-change handler.
- *
- * Since: 0.10.37
- */
-void
-gst_toc_setter_reset_toc (GstTocSetter * setter)
-{
- GstTocData *data;
-
- g_return_if_fail (GST_IS_TOC_SETTER (setter));
-
- data = gst_toc_setter_get_data (setter);
-
- g_static_mutex_lock (&data->lock);
- if (data->toc) {
- gst_toc_free (data->toc);
- data->toc = NULL;
- }
- g_static_mutex_unlock (&data->lock);
-}
-
-/**
- * gst_toc_setter_get_toc:
- * @setter: a #GstTocSetter.
- *
- * Return current TOC the setter uses. The TOC should not be
- * modified or freed.
- *
- * This function is not thread-safe. Use gst_toc_setter_get_toc_copy() instead.
- *
- * Returns: a current snapshot of the TOC used in the setter
- * or NULL if none is used.
- *
- * Since: 0.10.37
- */
-const GstToc *
-gst_toc_setter_get_toc (GstTocSetter * setter)
-{
- g_return_val_if_fail (GST_IS_TOC_SETTER (setter), NULL);
-
- return gst_toc_setter_get_data (setter)->toc;
-}
-
-/**
- * gst_toc_setter_get_toc_copy:
- * @setter: a #GstTocSetter.
- *
- * Return current TOC the setter uses. The difference between this
- * function and gst_toc_setter_get_toc() is that this function returns deep
- * copy of the TOC, so you can modify it in any way. This function is thread-safe.
- * Free it when done with gst_toc_free().
- *
- * Returns: a copy of the current snapshot of the TOC used in the setter
- * or NULL if none is used.
- *
- * Since: 0.10.37
- */
-GstToc *
-gst_toc_setter_get_toc_copy (GstTocSetter * setter)
-{
- GstTocData *data;
- GstToc *ret = NULL;
-
- g_return_val_if_fail (GST_IS_TOC_SETTER (setter), NULL);
-
- data = gst_toc_setter_get_data (setter);
- g_static_mutex_lock (&data->lock);
-
- if (data->toc != NULL)
- ret = gst_toc_copy (data->toc);
-
- g_static_mutex_unlock (&data->lock);
-
- return ret;
-}
-
-/**
- * gst_toc_setter_set_toc:
- * @setter: a #GstTocSetter.
- * @toc: a #GstToc to set.
- *
- * Set the given TOC on the setter. Previously setted TOC will be
- * freed before setting a new one.
- *
- * Since: 0.10.37
- */
-void
-gst_toc_setter_set_toc (GstTocSetter * setter, const GstToc * toc)
-{
- GstTocData *data;
-
- g_return_if_fail (GST_IS_TOC_SETTER (setter));
-
- data = gst_toc_setter_get_data (setter);
-
- g_static_mutex_lock (&data->lock);
- if (data->toc)
- gst_toc_free (data->toc);
-
- data->toc = gst_toc_copy (toc);
-
- g_static_mutex_unlock (&data->lock);
-}
-
-/**
- * gst_toc_setter_get_toc_entry:
- * @setter: a #GstTocSetter.
- * @uid: UID to find entry with.
- *
- * Return #GstTocEntry (if any) with given @uid. Returned entry should
- * not be modified or freed.
- *
- * This function is not thread-safe. Use gst_toc_setter_get_toc_entry_copy() instead.
- *
- * Returns: a TOC entry with given @uid from the TOC in the setter
- * or NULL if none entry with such @uid was found.
- *
- * Since: 0.10.37
- */
-const GstTocEntry *
-gst_toc_setter_get_toc_entry (GstTocSetter * setter, const gchar * uid)
-{
- GstTocData *data;
- const GstTocEntry *ret;
-
- g_return_val_if_fail (GST_IS_TOC_SETTER (setter), NULL);
- g_return_val_if_fail (uid != NULL, NULL);
-
- data = gst_toc_setter_get_data (setter);
-
- g_static_mutex_lock (&data->lock);
-
- ret = gst_toc_find_entry (data->toc, uid);
-
- g_static_mutex_unlock (&data->lock);
-
- return ret;
-}
-
-/**
- * gst_toc_setter_get_toc_entry_copy:
- * @setter: a #GstTocSetter.
- * @uid: UID to find entry with.
- *
- * Return #GstTocEntry (if any) with given @uid. It perform a deep copying,
- * so you can modify returned value. Free it when done with gst_toc_entry_free().
- * This function is thread-safe.
- *
- * Returns: a TOC entry with given @uid from the TOC in the setter
- * or NULL if none entry with such @uid was found.
- *
- * Since: 0.10.37
- */
-GstTocEntry *
-gst_toc_setter_get_toc_entry_copy (GstTocSetter * setter, const gchar * uid)
-{
- GstTocData *data;
- GstTocEntry *ret = NULL;
- const GstTocEntry *search;
-
- g_return_val_if_fail (GST_IS_TOC_SETTER (setter), NULL);
- g_return_val_if_fail (uid != NULL, NULL);
-
- data = gst_toc_setter_get_data (setter);
-
- g_static_mutex_lock (&data->lock);
-
- search = gst_toc_find_entry (data->toc, uid);
- if (search != NULL)
- ret = gst_toc_entry_copy (search);
-
- g_static_mutex_unlock (&data->lock);
-
- return ret;
-}
-
-/**
- * gst_toc_setter_add_toc_entry:
- * @setter: a #GstTocSetter.
- * @parent_uid: UID of the parent entry to append given @entry. Use 0 for the TOC root level.
- * @entry: #GstTocEntry to append.
- *
- * Try to find entry with given @parent_uid and append an @entry to that #GstTocEntry.
- *
- * Returns: TRUE if entry with @parent_uid was found, FALSE otherwise.
- *
- * Since: 0.10.37
- */
-gboolean
-gst_toc_setter_add_toc_entry (GstTocSetter * setter, const gchar * parent_uid,
- const GstTocEntry * entry)
-{
- GstTocData *data;
- GstTocEntry *parent;
- GstTocEntry *copy_entry;
- gboolean ret = FALSE;
-
- g_return_val_if_fail (GST_IS_TOC_SETTER (setter), FALSE);
- g_return_val_if_fail (parent_uid != NULL, FALSE);
- g_return_val_if_fail (entry != NULL, FALSE);
-
- data = gst_toc_setter_get_data (setter);
-
- g_static_mutex_lock (&data->lock);
-
- copy_entry = gst_toc_entry_copy (entry);
-
- if (g_strcmp0 (parent_uid, "0") == 0)
- data->toc->entries = g_list_append (data->toc->entries, copy_entry);
- else {
- parent = gst_toc_find_entry (data->toc, parent_uid);
-
- if (parent != NULL) {
- parent->subentries = g_list_append (parent->subentries, copy_entry);
- ret = TRUE;
- }
- }
-
- g_static_mutex_unlock (&data->lock);
-
- return ret;
-}
diff --git a/gst/gsttocsetter.h b/gst/gsttocsetter.h
deleted file mode 100644
index 2174e0d00f..0000000000
--- a/gst/gsttocsetter.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/* GStreamer
- * Copyright (C) 2010, 2012 Alexander Saprykin <xelfium@gmail.com>
- *
- * gsttocsetter.h: Interfaces for TOC
- *
- * 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_SETTER_H__
-#define __GST_TOC_SETTER_H__
-
-#include <gst/gst.h>
-
-G_BEGIN_DECLS
-#define GST_TYPE_TOC_SETTER (gst_toc_setter_get_type ())
-#define GST_TOC_SETTER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_TOC_SETTER, GstTocSetter))
-#define GST_IS_TOC_SETTER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_TOC_SETTER))
-#define GST_TOC_SETTER_GET_IFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GST_TYPE_TOC_SETTER, GstTocSetterIFace))
-/**
- * GstTocSetter:
- *
- * Opaque #GstTocSetter data structure.
- */
-typedef struct _GstTocSetter GstTocSetter;
-typedef struct _GstTocSetterIFace GstTocSetterIFace;
-
-/**
- * GstTocSetterIFace:
- * @g_iface: parent interface type.
- *
- * #GstTocSetterIFace interface.
- */
-
-struct _GstTocSetterIFace
-{
- GTypeInterface g_iface;
-
- /* signals */
-
- /* virtual table */
-};
-
-GType gst_toc_setter_get_type (void);
-void gst_toc_setter_reset_toc (GstTocSetter *setter);
-const GstToc * gst_toc_setter_get_toc (GstTocSetter *setter);
-GstToc * gst_toc_setter_get_toc_copy (GstTocSetter *setter);
-void gst_toc_setter_set_toc (GstTocSetter *setter, const GstToc *toc);
-const GstTocEntry * gst_toc_setter_get_toc_entry (GstTocSetter *setter, const gchar *uid);
-GstTocEntry * gst_toc_setter_get_toc_entry_copy (GstTocSetter *setter, const gchar *uid);
-gboolean gst_toc_setter_add_toc_entry (GstTocSetter *setter, const gchar *parent_uid, const GstTocEntry *entry);
-
-G_END_DECLS
-#endif /* __GST_TOC_SETTER_H__ */
-