mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-20 04:56:24 +00:00
gst-launch: add -c, --toc to print the toc
Print the nested chapter and edition structure of the chapters message.
This commit is contained in:
parent
7d88015650
commit
ea9cc8c871
1 changed files with 54 additions and 0 deletions
|
@ -69,6 +69,7 @@ static GstElement *pipeline;
|
||||||
static EventLoopResult caught_error = ELR_NO_ERROR;
|
static EventLoopResult caught_error = ELR_NO_ERROR;
|
||||||
static gboolean quiet = FALSE;
|
static gboolean quiet = FALSE;
|
||||||
static gboolean tags = FALSE;
|
static gboolean tags = FALSE;
|
||||||
|
static gboolean toc = FALSE;
|
||||||
static gboolean messages = FALSE;
|
static gboolean messages = FALSE;
|
||||||
static gboolean is_live = FALSE;
|
static gboolean is_live = FALSE;
|
||||||
static gboolean waiting_eos = FALSE;
|
static gboolean waiting_eos = FALSE;
|
||||||
|
@ -507,6 +508,35 @@ print_tag (const GstTagList * list, const gchar * tag, gpointer unused)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
print_toc_entry (gpointer data, gpointer user_data)
|
||||||
|
{
|
||||||
|
GstTocEntry *entry = (GstTocEntry *) data;
|
||||||
|
const guint max_indent = 40;
|
||||||
|
const gchar spc[max_indent + 1] = " ";
|
||||||
|
const gchar *entry_types[] = { "chapter", "edition" };
|
||||||
|
guint indent = MIN (GPOINTER_TO_UINT (user_data), max_indent);
|
||||||
|
gint64 start, stop;
|
||||||
|
|
||||||
|
gst_toc_entry_get_start_stop (entry, &start, &stop);
|
||||||
|
|
||||||
|
PRINT ("%s%s:", &spc[max_indent - indent], entry_types[entry->type]);
|
||||||
|
if (GST_CLOCK_TIME_IS_VALID (start)) {
|
||||||
|
PRINT (" start: %" GST_TIME_FORMAT, GST_TIME_ARGS (start));
|
||||||
|
}
|
||||||
|
if (GST_CLOCK_TIME_IS_VALID (stop)) {
|
||||||
|
PRINT (" stop: %" GST_TIME_FORMAT, GST_TIME_ARGS (stop));
|
||||||
|
}
|
||||||
|
PRINT ("\n");
|
||||||
|
indent += 2;
|
||||||
|
|
||||||
|
/* TODO: print tags */
|
||||||
|
|
||||||
|
/* loop over sub-toc entries */
|
||||||
|
g_list_foreach (entry->subentries, print_toc_entry,
|
||||||
|
GUINT_TO_POINTER (indent));
|
||||||
|
}
|
||||||
|
|
||||||
#ifndef DISABLE_FAULT_HANDLER
|
#ifndef DISABLE_FAULT_HANDLER
|
||||||
/* we only use sighandler here because the registers are not important */
|
/* we only use sighandler here because the registers are not important */
|
||||||
static void
|
static void
|
||||||
|
@ -709,6 +739,28 @@ event_loop (GstElement * pipeline, gboolean blocking, GstState target_state)
|
||||||
gst_tag_list_free (tag_list);
|
gst_tag_list_free (tag_list);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case GST_MESSAGE_TOC:
|
||||||
|
if (toc) {
|
||||||
|
GstToc *toc_msg;
|
||||||
|
gboolean updated;
|
||||||
|
|
||||||
|
if (GST_IS_ELEMENT (GST_MESSAGE_SRC (message))) {
|
||||||
|
PRINT (_("FOUND TOC : found by element \"%s\".\n"),
|
||||||
|
GST_MESSAGE_SRC_NAME (message));
|
||||||
|
} else if (GST_IS_OBJECT (GST_MESSAGE_SRC (message))) {
|
||||||
|
PRINT (_("FOUND TOC : found by object \"%s\".\n"),
|
||||||
|
GST_MESSAGE_SRC_NAME (message));
|
||||||
|
} else {
|
||||||
|
PRINT (_("FOUND TOC\n"));
|
||||||
|
}
|
||||||
|
|
||||||
|
gst_message_parse_toc (message, &toc_msg, &updated);
|
||||||
|
/* recursively loop over toc entries */
|
||||||
|
g_list_foreach (toc_msg->entries, print_toc_entry,
|
||||||
|
GUINT_TO_POINTER (0));
|
||||||
|
gst_toc_free (toc_msg);
|
||||||
|
}
|
||||||
|
break;
|
||||||
case GST_MESSAGE_INFO:{
|
case GST_MESSAGE_INFO:{
|
||||||
GError *gerror;
|
GError *gerror;
|
||||||
gchar *debug;
|
gchar *debug;
|
||||||
|
@ -929,6 +981,8 @@ main (int argc, char *argv[])
|
||||||
GOptionEntry options[] = {
|
GOptionEntry options[] = {
|
||||||
{"tags", 't', 0, G_OPTION_ARG_NONE, &tags,
|
{"tags", 't', 0, G_OPTION_ARG_NONE, &tags,
|
||||||
N_("Output tags (also known as metadata)"), NULL},
|
N_("Output tags (also known as metadata)"), NULL},
|
||||||
|
{"toc", 'c', 0, G_OPTION_ARG_NONE, &toc,
|
||||||
|
N_("Ouput TOC (chapters and editions)"), NULL},
|
||||||
{"verbose", 'v', 0, G_OPTION_ARG_NONE, &verbose,
|
{"verbose", 'v', 0, G_OPTION_ARG_NONE, &verbose,
|
||||||
N_("Output status information and property notifications"), NULL},
|
N_("Output status information and property notifications"), NULL},
|
||||||
{"quiet", 'q', 0, G_OPTION_ARG_NONE, &quiet,
|
{"quiet", 'q', 0, G_OPTION_ARG_NONE, &quiet,
|
||||||
|
|
Loading…
Reference in a new issue