2001-01-07 04:00:30 +00:00
|
|
|
/* GStreamer
|
|
|
|
* Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
|
|
|
|
* 2000 Wim Taymans <wtay@chello.be>
|
2002-04-11 20:35:18 +00:00
|
|
|
* 2002 Andy Wingo <wingo@pobox.com>
|
API: gst_parse_launch_full()
Original commit message from CVS:
* docs/gst/gstreamer-sections.txt:
* gst/gst.c: (init_post):
* gst/gst_private.h: (_GstParseContext):
* gst/gstparse.c: (gst_parse_error_quark), (gst_parse_context_new),
(gst_parse_context_free), (gst_parse_context_get_missing_elements),
(gst_parse_launchv), (gst_parse_launchv_full), (gst_parse_launch),
(gst_parse_launch_full):
* gst/gstparse.h: (GST_PARSE_FLAG_NONE), (GST_PARSE_FLAG_FATAL_ERRORS),
(GstParseFlags), (GstParseContext):
* gst/gstutils.c: (gst_parse_bin_from_description),
(gst_parse_bin_from_description_full):
* gst/gstutils.h:
* gst/parse/grammar.y:
* gst/parse/types.h:
* win32/common/libgstreamer.def:
Add new gst_parse_*_full API (#528178):
API: gst_parse_launch_full()
API: gst_parse_launchv_full()
API: gst_parse_bin_from_description_full()
API: gst_parse_context_new()
API: gst_parse_context_free()
API: gst_parse_context_get_missing_elements()
2008-05-24 15:33:53 +00:00
|
|
|
* 2008 Tim-Philipp Müller <tim centricular net>
|
2001-01-07 04:00:30 +00:00
|
|
|
*
|
2002-04-11 20:35:18 +00:00
|
|
|
* gstparse.c: get a pipeline from a text pipeline description
|
2001-01-07 04:00:30 +00:00
|
|
|
*
|
|
|
|
* 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
|
2012-11-03 20:44:48 +00:00
|
|
|
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
|
|
|
|
* Boston, MA 02110-1301, USA.
|
2001-01-07 04:00:30 +00:00
|
|
|
*/
|
2005-10-15 16:01:57 +00:00
|
|
|
|
2005-09-06 22:03:01 +00:00
|
|
|
/**
|
|
|
|
* SECTION:gstparse
|
|
|
|
* @short_description: Get a pipeline from a text pipeline description
|
|
|
|
*
|
|
|
|
* These function allow to create a pipeline based on the syntax used in the
|
2015-05-08 13:08:42 +00:00
|
|
|
* gst-launch-1.0 utility (see man-page for syntax documentation).
|
2010-07-06 11:29:39 +00:00
|
|
|
*
|
2010-10-16 15:53:49 +00:00
|
|
|
* Please note that these functions take several measures to create
|
2010-07-06 11:29:39 +00:00
|
|
|
* somewhat dynamic pipelines. Due to that such pipelines are not always
|
2011-09-07 11:14:38 +00:00
|
|
|
* reusable (set the state to NULL and back to PLAYING).
|
2005-09-06 22:03:01 +00:00
|
|
|
*/
|
2001-01-07 04:00:30 +00:00
|
|
|
|
2003-06-29 14:05:49 +00:00
|
|
|
#include "gst_private.h"
|
2006-05-04 15:20:14 +00:00
|
|
|
#include <string.h>
|
2003-06-29 14:05:49 +00:00
|
|
|
|
2001-01-07 04:00:30 +00:00
|
|
|
#include "gstparse.h"
|
2007-05-09 16:32:07 +00:00
|
|
|
#include "gsterror.h"
|
2002-04-11 20:35:18 +00:00
|
|
|
#include "gstinfo.h"
|
2010-03-02 21:58:06 +00:00
|
|
|
#ifndef GST_DISABLE_PARSE
|
|
|
|
#include "parse/types.h"
|
|
|
|
#endif
|
2002-04-07 23:32:16 +00:00
|
|
|
|
2011-04-14 13:59:28 +00:00
|
|
|
static GstParseContext *
|
|
|
|
gst_parse_context_copy (const GstParseContext * context)
|
|
|
|
{
|
|
|
|
GstParseContext *ret = NULL;
|
|
|
|
#ifndef GST_DISABLE_PARSE
|
|
|
|
|
|
|
|
ret = gst_parse_context_new ();
|
|
|
|
if (context) {
|
2011-11-12 14:55:07 +00:00
|
|
|
GQueue missing_copy = G_QUEUE_INIT;
|
|
|
|
GList *l;
|
|
|
|
|
|
|
|
for (l = context->missing_elements; l != NULL; l = l->next)
|
|
|
|
g_queue_push_tail (&missing_copy, g_strdup ((const gchar *) l->data));
|
|
|
|
|
|
|
|
ret->missing_elements = missing_copy.head;
|
2011-04-14 13:59:28 +00:00
|
|
|
}
|
|
|
|
#endif
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
2012-01-28 14:35:51 +00:00
|
|
|
G_DEFINE_BOXED_TYPE (GstParseContext, gst_parse_context,
|
|
|
|
(GBoxedCopyFunc) gst_parse_context_copy,
|
|
|
|
(GBoxedFreeFunc) gst_parse_context_free);
|
2011-04-14 13:59:28 +00:00
|
|
|
|
2005-10-20 20:46:17 +00:00
|
|
|
/**
|
|
|
|
* gst_parse_error_quark:
|
|
|
|
*
|
|
|
|
* Get the error quark used by the parsing subsystem.
|
|
|
|
*
|
|
|
|
* Returns: the quark of the parse errors.
|
|
|
|
*/
|
2004-03-13 15:27:01 +00:00
|
|
|
GQuark
|
2002-04-07 23:32:16 +00:00
|
|
|
gst_parse_error_quark (void)
|
|
|
|
{
|
|
|
|
static GQuark quark = 0;
|
2004-03-13 15:27:01 +00:00
|
|
|
|
2002-04-07 23:32:16 +00:00
|
|
|
if (!quark)
|
|
|
|
quark = g_quark_from_static_string ("gst_parse_error");
|
|
|
|
return quark;
|
|
|
|
}
|
|
|
|
|
API: gst_parse_launch_full()
Original commit message from CVS:
* docs/gst/gstreamer-sections.txt:
* gst/gst.c: (init_post):
* gst/gst_private.h: (_GstParseContext):
* gst/gstparse.c: (gst_parse_error_quark), (gst_parse_context_new),
(gst_parse_context_free), (gst_parse_context_get_missing_elements),
(gst_parse_launchv), (gst_parse_launchv_full), (gst_parse_launch),
(gst_parse_launch_full):
* gst/gstparse.h: (GST_PARSE_FLAG_NONE), (GST_PARSE_FLAG_FATAL_ERRORS),
(GstParseFlags), (GstParseContext):
* gst/gstutils.c: (gst_parse_bin_from_description),
(gst_parse_bin_from_description_full):
* gst/gstutils.h:
* gst/parse/grammar.y:
* gst/parse/types.h:
* win32/common/libgstreamer.def:
Add new gst_parse_*_full API (#528178):
API: gst_parse_launch_full()
API: gst_parse_launchv_full()
API: gst_parse_bin_from_description_full()
API: gst_parse_context_new()
API: gst_parse_context_free()
API: gst_parse_context_get_missing_elements()
2008-05-24 15:33:53 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* gst_parse_context_new:
|
|
|
|
*
|
|
|
|
* Allocates a parse context for use with gst_parse_launch_full() or
|
|
|
|
* gst_parse_launchv_full().
|
|
|
|
*
|
2010-12-07 18:35:04 +00:00
|
|
|
* Free-function: gst_parse_context_free
|
|
|
|
*
|
|
|
|
* Returns: (transfer full): a newly-allocated parse context. Free with
|
|
|
|
* gst_parse_context_free() when no longer needed.
|
API: gst_parse_launch_full()
Original commit message from CVS:
* docs/gst/gstreamer-sections.txt:
* gst/gst.c: (init_post):
* gst/gst_private.h: (_GstParseContext):
* gst/gstparse.c: (gst_parse_error_quark), (gst_parse_context_new),
(gst_parse_context_free), (gst_parse_context_get_missing_elements),
(gst_parse_launchv), (gst_parse_launchv_full), (gst_parse_launch),
(gst_parse_launch_full):
* gst/gstparse.h: (GST_PARSE_FLAG_NONE), (GST_PARSE_FLAG_FATAL_ERRORS),
(GstParseFlags), (GstParseContext):
* gst/gstutils.c: (gst_parse_bin_from_description),
(gst_parse_bin_from_description_full):
* gst/gstutils.h:
* gst/parse/grammar.y:
* gst/parse/types.h:
* win32/common/libgstreamer.def:
Add new gst_parse_*_full API (#528178):
API: gst_parse_launch_full()
API: gst_parse_launchv_full()
API: gst_parse_bin_from_description_full()
API: gst_parse_context_new()
API: gst_parse_context_free()
API: gst_parse_context_get_missing_elements()
2008-05-24 15:33:53 +00:00
|
|
|
*/
|
|
|
|
GstParseContext *
|
|
|
|
gst_parse_context_new (void)
|
|
|
|
{
|
|
|
|
#ifndef GST_DISABLE_PARSE
|
|
|
|
GstParseContext *ctx;
|
|
|
|
|
|
|
|
ctx = g_slice_new (GstParseContext);
|
|
|
|
ctx->missing_elements = NULL;
|
|
|
|
|
|
|
|
return ctx;
|
|
|
|
#else
|
|
|
|
return NULL;
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* gst_parse_context_free:
|
2010-12-07 18:35:04 +00:00
|
|
|
* @context: (transfer full): a #GstParseContext
|
API: gst_parse_launch_full()
Original commit message from CVS:
* docs/gst/gstreamer-sections.txt:
* gst/gst.c: (init_post):
* gst/gst_private.h: (_GstParseContext):
* gst/gstparse.c: (gst_parse_error_quark), (gst_parse_context_new),
(gst_parse_context_free), (gst_parse_context_get_missing_elements),
(gst_parse_launchv), (gst_parse_launchv_full), (gst_parse_launch),
(gst_parse_launch_full):
* gst/gstparse.h: (GST_PARSE_FLAG_NONE), (GST_PARSE_FLAG_FATAL_ERRORS),
(GstParseFlags), (GstParseContext):
* gst/gstutils.c: (gst_parse_bin_from_description),
(gst_parse_bin_from_description_full):
* gst/gstutils.h:
* gst/parse/grammar.y:
* gst/parse/types.h:
* win32/common/libgstreamer.def:
Add new gst_parse_*_full API (#528178):
API: gst_parse_launch_full()
API: gst_parse_launchv_full()
API: gst_parse_bin_from_description_full()
API: gst_parse_context_new()
API: gst_parse_context_free()
API: gst_parse_context_get_missing_elements()
2008-05-24 15:33:53 +00:00
|
|
|
*
|
|
|
|
* Frees a parse context previously allocated with gst_parse_context_new().
|
|
|
|
*/
|
|
|
|
void
|
|
|
|
gst_parse_context_free (GstParseContext * context)
|
|
|
|
{
|
|
|
|
#ifndef GST_DISABLE_PARSE
|
|
|
|
if (context) {
|
|
|
|
g_list_foreach (context->missing_elements, (GFunc) g_free, NULL);
|
|
|
|
g_list_free (context->missing_elements);
|
|
|
|
g_slice_free (GstParseContext, context);
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* gst_parse_context_get_missing_elements:
|
|
|
|
* @context: a #GstParseContext
|
|
|
|
*
|
|
|
|
* Retrieve missing elements from a previous run of gst_parse_launch_full()
|
|
|
|
* or gst_parse_launchv_full(). Will only return results if an error code
|
|
|
|
* of %GST_PARSE_ERROR_NO_SUCH_ELEMENT was returned.
|
|
|
|
*
|
2010-12-07 18:35:04 +00:00
|
|
|
* Returns: (transfer full) (array zero-terminated=1) (element-type gchar*): a
|
2014-05-29 21:54:34 +00:00
|
|
|
* %NULL-terminated array of element factory name strings of missing
|
2010-12-07 18:35:04 +00:00
|
|
|
* elements. Free with g_strfreev() when no longer needed.
|
API: gst_parse_launch_full()
Original commit message from CVS:
* docs/gst/gstreamer-sections.txt:
* gst/gst.c: (init_post):
* gst/gst_private.h: (_GstParseContext):
* gst/gstparse.c: (gst_parse_error_quark), (gst_parse_context_new),
(gst_parse_context_free), (gst_parse_context_get_missing_elements),
(gst_parse_launchv), (gst_parse_launchv_full), (gst_parse_launch),
(gst_parse_launch_full):
* gst/gstparse.h: (GST_PARSE_FLAG_NONE), (GST_PARSE_FLAG_FATAL_ERRORS),
(GstParseFlags), (GstParseContext):
* gst/gstutils.c: (gst_parse_bin_from_description),
(gst_parse_bin_from_description_full):
* gst/gstutils.h:
* gst/parse/grammar.y:
* gst/parse/types.h:
* win32/common/libgstreamer.def:
Add new gst_parse_*_full API (#528178):
API: gst_parse_launch_full()
API: gst_parse_launchv_full()
API: gst_parse_bin_from_description_full()
API: gst_parse_context_new()
API: gst_parse_context_free()
API: gst_parse_context_get_missing_elements()
2008-05-24 15:33:53 +00:00
|
|
|
*/
|
|
|
|
gchar **
|
|
|
|
gst_parse_context_get_missing_elements (GstParseContext * context)
|
|
|
|
{
|
|
|
|
#ifndef GST_DISABLE_PARSE
|
|
|
|
gchar **arr;
|
|
|
|
GList *l;
|
|
|
|
guint len, i;
|
|
|
|
|
|
|
|
g_return_val_if_fail (context != NULL, NULL);
|
|
|
|
|
|
|
|
len = g_list_length (context->missing_elements);
|
|
|
|
|
|
|
|
if (G_UNLIKELY (len == 0))
|
|
|
|
return NULL;
|
|
|
|
|
|
|
|
arr = g_new (gchar *, len + 1);
|
|
|
|
|
|
|
|
for (i = 0, l = context->missing_elements; l != NULL; l = l->next, ++i)
|
|
|
|
arr[i] = g_strdup (l->data);
|
|
|
|
|
|
|
|
arr[i] = NULL;
|
|
|
|
|
|
|
|
return arr;
|
|
|
|
#else
|
|
|
|
return NULL;
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
|
2007-05-09 16:32:07 +00:00
|
|
|
#ifndef GST_DISABLE_PARSE
|
2004-03-13 15:27:01 +00:00
|
|
|
static gchar *
|
|
|
|
_gst_parse_escape (const gchar * str)
|
2002-04-07 23:32:16 +00:00
|
|
|
{
|
2003-04-08 21:59:44 +00:00
|
|
|
GString *gstr = NULL;
|
2012-07-17 07:48:00 +00:00
|
|
|
gboolean in_quotes;
|
2004-03-13 15:27:01 +00:00
|
|
|
|
2003-04-08 21:59:44 +00:00
|
|
|
g_return_val_if_fail (str != NULL, NULL);
|
2004-03-13 15:27:01 +00:00
|
|
|
|
2003-04-08 21:59:44 +00:00
|
|
|
gstr = g_string_sized_new (strlen (str));
|
2004-03-13 15:27:01 +00:00
|
|
|
|
2012-07-17 07:48:00 +00:00
|
|
|
in_quotes = FALSE;
|
|
|
|
|
2003-04-08 21:59:44 +00:00
|
|
|
while (*str) {
|
2012-07-17 07:48:00 +00:00
|
|
|
if (*str == '"' && (!in_quotes || (in_quotes && *(str - 1) != '\\')))
|
|
|
|
in_quotes = !in_quotes;
|
|
|
|
|
|
|
|
if (*str == ' ' && !in_quotes)
|
2003-04-08 21:59:44 +00:00
|
|
|
g_string_append_c (gstr, '\\');
|
2012-07-17 07:48:00 +00:00
|
|
|
|
2003-04-08 21:59:44 +00:00
|
|
|
g_string_append_c (gstr, *str);
|
|
|
|
str++;
|
2001-01-07 04:00:30 +00:00
|
|
|
}
|
2004-03-13 15:27:01 +00:00
|
|
|
|
2008-05-22 15:38:54 +00:00
|
|
|
return g_string_free (gstr, FALSE);
|
2001-01-20 02:57:46 +00:00
|
|
|
}
|
2007-05-09 16:32:07 +00:00
|
|
|
#endif /* !GST_DISABLE_PARSE */
|
2004-03-13 15:27:01 +00:00
|
|
|
|
2002-01-14 04:09:56 +00:00
|
|
|
/**
|
|
|
|
* gst_parse_launchv:
|
2010-12-07 18:35:04 +00:00
|
|
|
* @argv: (in) (array zero-terminated=1): null-terminated array of arguments
|
2003-04-08 21:59:44 +00:00
|
|
|
* @error: pointer to a #GError
|
2002-01-14 04:09:56 +00:00
|
|
|
*
|
2003-04-08 21:59:44 +00:00
|
|
|
* Create a new element based on command line syntax.
|
2013-12-07 14:38:19 +00:00
|
|
|
* @error will contain an error message if an erroneous pipeline is specified.
|
2003-04-10 01:45:36 +00:00
|
|
|
* An error does not mean that the pipeline could not be constructed.
|
2002-01-14 04:09:56 +00:00
|
|
|
*
|
2013-10-12 05:16:09 +00:00
|
|
|
* Returns: (transfer floating): a new element on success and %NULL on failure.
|
2002-01-14 04:09:56 +00:00
|
|
|
*/
|
2003-04-08 21:59:44 +00:00
|
|
|
GstElement *
|
2004-03-13 15:27:01 +00:00
|
|
|
gst_parse_launchv (const gchar ** argv, GError ** error)
|
API: gst_parse_launch_full()
Original commit message from CVS:
* docs/gst/gstreamer-sections.txt:
* gst/gst.c: (init_post):
* gst/gst_private.h: (_GstParseContext):
* gst/gstparse.c: (gst_parse_error_quark), (gst_parse_context_new),
(gst_parse_context_free), (gst_parse_context_get_missing_elements),
(gst_parse_launchv), (gst_parse_launchv_full), (gst_parse_launch),
(gst_parse_launch_full):
* gst/gstparse.h: (GST_PARSE_FLAG_NONE), (GST_PARSE_FLAG_FATAL_ERRORS),
(GstParseFlags), (GstParseContext):
* gst/gstutils.c: (gst_parse_bin_from_description),
(gst_parse_bin_from_description_full):
* gst/gstutils.h:
* gst/parse/grammar.y:
* gst/parse/types.h:
* win32/common/libgstreamer.def:
Add new gst_parse_*_full API (#528178):
API: gst_parse_launch_full()
API: gst_parse_launchv_full()
API: gst_parse_bin_from_description_full()
API: gst_parse_context_new()
API: gst_parse_context_free()
API: gst_parse_context_get_missing_elements()
2008-05-24 15:33:53 +00:00
|
|
|
{
|
2011-08-25 20:48:54 +00:00
|
|
|
return gst_parse_launchv_full (argv, NULL, GST_PARSE_FLAG_NONE, error);
|
API: gst_parse_launch_full()
Original commit message from CVS:
* docs/gst/gstreamer-sections.txt:
* gst/gst.c: (init_post):
* gst/gst_private.h: (_GstParseContext):
* gst/gstparse.c: (gst_parse_error_quark), (gst_parse_context_new),
(gst_parse_context_free), (gst_parse_context_get_missing_elements),
(gst_parse_launchv), (gst_parse_launchv_full), (gst_parse_launch),
(gst_parse_launch_full):
* gst/gstparse.h: (GST_PARSE_FLAG_NONE), (GST_PARSE_FLAG_FATAL_ERRORS),
(GstParseFlags), (GstParseContext):
* gst/gstutils.c: (gst_parse_bin_from_description),
(gst_parse_bin_from_description_full):
* gst/gstutils.h:
* gst/parse/grammar.y:
* gst/parse/types.h:
* win32/common/libgstreamer.def:
Add new gst_parse_*_full API (#528178):
API: gst_parse_launch_full()
API: gst_parse_launchv_full()
API: gst_parse_bin_from_description_full()
API: gst_parse_context_new()
API: gst_parse_context_free()
API: gst_parse_context_get_missing_elements()
2008-05-24 15:33:53 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* gst_parse_launchv_full:
|
2010-12-07 18:35:04 +00:00
|
|
|
* @argv: (in) (array zero-terminated=1): null-terminated array of arguments
|
|
|
|
* @context: (allow-none): a parse context allocated with
|
|
|
|
* gst_parse_context_new(), or %NULL
|
API: gst_parse_launch_full()
Original commit message from CVS:
* docs/gst/gstreamer-sections.txt:
* gst/gst.c: (init_post):
* gst/gst_private.h: (_GstParseContext):
* gst/gstparse.c: (gst_parse_error_quark), (gst_parse_context_new),
(gst_parse_context_free), (gst_parse_context_get_missing_elements),
(gst_parse_launchv), (gst_parse_launchv_full), (gst_parse_launch),
(gst_parse_launch_full):
* gst/gstparse.h: (GST_PARSE_FLAG_NONE), (GST_PARSE_FLAG_FATAL_ERRORS),
(GstParseFlags), (GstParseContext):
* gst/gstutils.c: (gst_parse_bin_from_description),
(gst_parse_bin_from_description_full):
* gst/gstutils.h:
* gst/parse/grammar.y:
* gst/parse/types.h:
* win32/common/libgstreamer.def:
Add new gst_parse_*_full API (#528178):
API: gst_parse_launch_full()
API: gst_parse_launchv_full()
API: gst_parse_bin_from_description_full()
API: gst_parse_context_new()
API: gst_parse_context_free()
API: gst_parse_context_get_missing_elements()
2008-05-24 15:33:53 +00:00
|
|
|
* @flags: parsing options, or #GST_PARSE_FLAG_NONE
|
|
|
|
* @error: pointer to a #GError (which must be initialised to %NULL)
|
|
|
|
*
|
|
|
|
* Create a new element based on command line syntax.
|
|
|
|
* @error will contain an error message if an erroneous pipeline is specified.
|
|
|
|
* An error does not mean that the pipeline could not be constructed.
|
|
|
|
*
|
2013-10-12 05:16:09 +00:00
|
|
|
* Returns: (transfer floating): a new element on success; on failure, either %NULL
|
2010-12-07 18:35:04 +00:00
|
|
|
* or a partially-constructed bin or element will be returned and @error will
|
|
|
|
* be set (unless you passed #GST_PARSE_FLAG_FATAL_ERRORS in @flags, then
|
|
|
|
* %NULL will always be returned on failure)
|
API: gst_parse_launch_full()
Original commit message from CVS:
* docs/gst/gstreamer-sections.txt:
* gst/gst.c: (init_post):
* gst/gst_private.h: (_GstParseContext):
* gst/gstparse.c: (gst_parse_error_quark), (gst_parse_context_new),
(gst_parse_context_free), (gst_parse_context_get_missing_elements),
(gst_parse_launchv), (gst_parse_launchv_full), (gst_parse_launch),
(gst_parse_launch_full):
* gst/gstparse.h: (GST_PARSE_FLAG_NONE), (GST_PARSE_FLAG_FATAL_ERRORS),
(GstParseFlags), (GstParseContext):
* gst/gstutils.c: (gst_parse_bin_from_description),
(gst_parse_bin_from_description_full):
* gst/gstutils.h:
* gst/parse/grammar.y:
* gst/parse/types.h:
* win32/common/libgstreamer.def:
Add new gst_parse_*_full API (#528178):
API: gst_parse_launch_full()
API: gst_parse_launchv_full()
API: gst_parse_bin_from_description_full()
API: gst_parse_context_new()
API: gst_parse_context_free()
API: gst_parse_context_get_missing_elements()
2008-05-24 15:33:53 +00:00
|
|
|
*/
|
|
|
|
GstElement *
|
|
|
|
gst_parse_launchv_full (const gchar ** argv, GstParseContext * context,
|
|
|
|
GstParseFlags flags, GError ** error)
|
2002-01-14 04:09:56 +00:00
|
|
|
{
|
2007-05-09 16:32:07 +00:00
|
|
|
#ifndef GST_DISABLE_PARSE
|
2003-04-08 21:59:44 +00:00
|
|
|
GstElement *element;
|
2002-04-13 17:11:42 +00:00
|
|
|
GString *str;
|
|
|
|
const gchar **argvp, *arg;
|
|
|
|
gchar *tmp;
|
2002-01-14 04:09:56 +00:00
|
|
|
|
2002-08-31 18:17:02 +00:00
|
|
|
g_return_val_if_fail (argv != NULL, NULL);
|
2008-05-22 15:38:54 +00:00
|
|
|
g_return_val_if_fail (error == NULL || *error == NULL, NULL);
|
2002-08-31 18:17:02 +00:00
|
|
|
|
2002-04-13 17:11:42 +00:00
|
|
|
/* let's give it a nice size. */
|
|
|
|
str = g_string_sized_new (1024);
|
|
|
|
|
|
|
|
argvp = argv;
|
|
|
|
while (*argvp) {
|
|
|
|
arg = *argvp;
|
2012-07-17 07:57:47 +00:00
|
|
|
GST_DEBUG ("escaping argument %s", arg);
|
2002-04-13 17:11:42 +00:00
|
|
|
tmp = _gst_parse_escape (arg);
|
|
|
|
g_string_append (str, tmp);
|
|
|
|
g_free (tmp);
|
2007-12-28 14:15:53 +00:00
|
|
|
g_string_append_c (str, ' ');
|
2002-04-13 17:11:42 +00:00
|
|
|
argvp++;
|
|
|
|
}
|
2004-03-13 15:27:01 +00:00
|
|
|
|
API: gst_parse_launch_full()
Original commit message from CVS:
* docs/gst/gstreamer-sections.txt:
* gst/gst.c: (init_post):
* gst/gst_private.h: (_GstParseContext):
* gst/gstparse.c: (gst_parse_error_quark), (gst_parse_context_new),
(gst_parse_context_free), (gst_parse_context_get_missing_elements),
(gst_parse_launchv), (gst_parse_launchv_full), (gst_parse_launch),
(gst_parse_launch_full):
* gst/gstparse.h: (GST_PARSE_FLAG_NONE), (GST_PARSE_FLAG_FATAL_ERRORS),
(GstParseFlags), (GstParseContext):
* gst/gstutils.c: (gst_parse_bin_from_description),
(gst_parse_bin_from_description_full):
* gst/gstutils.h:
* gst/parse/grammar.y:
* gst/parse/types.h:
* win32/common/libgstreamer.def:
Add new gst_parse_*_full API (#528178):
API: gst_parse_launch_full()
API: gst_parse_launchv_full()
API: gst_parse_bin_from_description_full()
API: gst_parse_context_new()
API: gst_parse_context_free()
API: gst_parse_context_get_missing_elements()
2008-05-24 15:33:53 +00:00
|
|
|
element = gst_parse_launch_full (str->str, context, flags, error);
|
2002-04-13 17:11:42 +00:00
|
|
|
|
|
|
|
g_string_free (str, TRUE);
|
2002-01-14 04:09:56 +00:00
|
|
|
|
2003-04-08 21:59:44 +00:00
|
|
|
return element;
|
2007-05-09 16:32:07 +00:00
|
|
|
#else
|
API: gst_parse_launch_full()
Original commit message from CVS:
* docs/gst/gstreamer-sections.txt:
* gst/gst.c: (init_post):
* gst/gst_private.h: (_GstParseContext):
* gst/gstparse.c: (gst_parse_error_quark), (gst_parse_context_new),
(gst_parse_context_free), (gst_parse_context_get_missing_elements),
(gst_parse_launchv), (gst_parse_launchv_full), (gst_parse_launch),
(gst_parse_launch_full):
* gst/gstparse.h: (GST_PARSE_FLAG_NONE), (GST_PARSE_FLAG_FATAL_ERRORS),
(GstParseFlags), (GstParseContext):
* gst/gstutils.c: (gst_parse_bin_from_description),
(gst_parse_bin_from_description_full):
* gst/gstutils.h:
* gst/parse/grammar.y:
* gst/parse/types.h:
* win32/common/libgstreamer.def:
Add new gst_parse_*_full API (#528178):
API: gst_parse_launch_full()
API: gst_parse_launchv_full()
API: gst_parse_bin_from_description_full()
API: gst_parse_context_new()
API: gst_parse_context_free()
API: gst_parse_context_get_missing_elements()
2008-05-24 15:33:53 +00:00
|
|
|
/* gst_parse_launch_full() will set a GST_CORE_ERROR_DISABLED error for us */
|
|
|
|
return gst_parse_launch_full ("", NULL, 0, error);
|
2007-05-09 16:32:07 +00:00
|
|
|
#endif
|
2002-04-13 17:11:42 +00:00
|
|
|
}
|
|
|
|
|
2001-01-21 23:20:46 +00:00
|
|
|
/**
|
|
|
|
* gst_parse_launch:
|
2002-01-14 04:09:56 +00:00
|
|
|
* @pipeline_description: the command line describing the pipeline
|
2003-04-10 01:45:36 +00:00
|
|
|
* @error: the error message in case of an erroneous pipeline.
|
2001-01-21 23:20:46 +00:00
|
|
|
*
|
|
|
|
* Create a new pipeline based on command line syntax.
|
2005-09-06 22:03:01 +00:00
|
|
|
* Please note that you might get a return value that is not %NULL even though
|
|
|
|
* the @error is set. In this case there was a recoverable parsing error and you
|
2003-04-10 01:45:36 +00:00
|
|
|
* can try to play the pipeline.
|
2001-01-21 23:20:46 +00:00
|
|
|
*
|
2012-01-26 17:12:16 +00:00
|
|
|
* Returns: (transfer floating): a new element on success, %NULL on failure. If
|
2010-12-07 18:35:04 +00:00
|
|
|
* more than one toplevel element is specified by the @pipeline_description,
|
|
|
|
* all elements are put into a #GstPipeline, which than is returned.
|
2001-01-21 23:20:46 +00:00
|
|
|
*/
|
2003-04-08 21:59:44 +00:00
|
|
|
GstElement *
|
2004-03-13 15:27:01 +00:00
|
|
|
gst_parse_launch (const gchar * pipeline_description, GError ** error)
|
API: gst_parse_launch_full()
Original commit message from CVS:
* docs/gst/gstreamer-sections.txt:
* gst/gst.c: (init_post):
* gst/gst_private.h: (_GstParseContext):
* gst/gstparse.c: (gst_parse_error_quark), (gst_parse_context_new),
(gst_parse_context_free), (gst_parse_context_get_missing_elements),
(gst_parse_launchv), (gst_parse_launchv_full), (gst_parse_launch),
(gst_parse_launch_full):
* gst/gstparse.h: (GST_PARSE_FLAG_NONE), (GST_PARSE_FLAG_FATAL_ERRORS),
(GstParseFlags), (GstParseContext):
* gst/gstutils.c: (gst_parse_bin_from_description),
(gst_parse_bin_from_description_full):
* gst/gstutils.h:
* gst/parse/grammar.y:
* gst/parse/types.h:
* win32/common/libgstreamer.def:
Add new gst_parse_*_full API (#528178):
API: gst_parse_launch_full()
API: gst_parse_launchv_full()
API: gst_parse_bin_from_description_full()
API: gst_parse_context_new()
API: gst_parse_context_free()
API: gst_parse_context_get_missing_elements()
2008-05-24 15:33:53 +00:00
|
|
|
{
|
2011-08-25 20:48:54 +00:00
|
|
|
return gst_parse_launch_full (pipeline_description, NULL, GST_PARSE_FLAG_NONE,
|
|
|
|
error);
|
API: gst_parse_launch_full()
Original commit message from CVS:
* docs/gst/gstreamer-sections.txt:
* gst/gst.c: (init_post):
* gst/gst_private.h: (_GstParseContext):
* gst/gstparse.c: (gst_parse_error_quark), (gst_parse_context_new),
(gst_parse_context_free), (gst_parse_context_get_missing_elements),
(gst_parse_launchv), (gst_parse_launchv_full), (gst_parse_launch),
(gst_parse_launch_full):
* gst/gstparse.h: (GST_PARSE_FLAG_NONE), (GST_PARSE_FLAG_FATAL_ERRORS),
(GstParseFlags), (GstParseContext):
* gst/gstutils.c: (gst_parse_bin_from_description),
(gst_parse_bin_from_description_full):
* gst/gstutils.h:
* gst/parse/grammar.y:
* gst/parse/types.h:
* win32/common/libgstreamer.def:
Add new gst_parse_*_full API (#528178):
API: gst_parse_launch_full()
API: gst_parse_launchv_full()
API: gst_parse_bin_from_description_full()
API: gst_parse_context_new()
API: gst_parse_context_free()
API: gst_parse_context_get_missing_elements()
2008-05-24 15:33:53 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* gst_parse_launch_full:
|
|
|
|
* @pipeline_description: the command line describing the pipeline
|
2010-12-07 18:35:04 +00:00
|
|
|
* @context: (allow-none): a parse context allocated with
|
|
|
|
* gst_parse_context_new(), or %NULL
|
API: gst_parse_launch_full()
Original commit message from CVS:
* docs/gst/gstreamer-sections.txt:
* gst/gst.c: (init_post):
* gst/gst_private.h: (_GstParseContext):
* gst/gstparse.c: (gst_parse_error_quark), (gst_parse_context_new),
(gst_parse_context_free), (gst_parse_context_get_missing_elements),
(gst_parse_launchv), (gst_parse_launchv_full), (gst_parse_launch),
(gst_parse_launch_full):
* gst/gstparse.h: (GST_PARSE_FLAG_NONE), (GST_PARSE_FLAG_FATAL_ERRORS),
(GstParseFlags), (GstParseContext):
* gst/gstutils.c: (gst_parse_bin_from_description),
(gst_parse_bin_from_description_full):
* gst/gstutils.h:
* gst/parse/grammar.y:
* gst/parse/types.h:
* win32/common/libgstreamer.def:
Add new gst_parse_*_full API (#528178):
API: gst_parse_launch_full()
API: gst_parse_launchv_full()
API: gst_parse_bin_from_description_full()
API: gst_parse_context_new()
API: gst_parse_context_free()
API: gst_parse_context_get_missing_elements()
2008-05-24 15:33:53 +00:00
|
|
|
* @flags: parsing options, or #GST_PARSE_FLAG_NONE
|
|
|
|
* @error: the error message in case of an erroneous pipeline.
|
|
|
|
*
|
|
|
|
* Create a new pipeline based on command line syntax.
|
|
|
|
* Please note that you might get a return value that is not %NULL even though
|
|
|
|
* the @error is set. In this case there was a recoverable parsing error and you
|
|
|
|
* can try to play the pipeline.
|
|
|
|
*
|
2013-10-12 05:16:09 +00:00
|
|
|
* Returns: (transfer floating): a new element on success, %NULL on failure. If
|
2010-12-07 18:35:04 +00:00
|
|
|
* more than one toplevel element is specified by the @pipeline_description,
|
2016-03-11 08:23:04 +00:00
|
|
|
* all elements are put into a #GstPipeline, which then is returned (unless
|
|
|
|
* the GST_PARSE_FLAG_PLACE_IN_BIN flag is set, in which case they are put
|
|
|
|
* in a #GstBin instead).
|
API: gst_parse_launch_full()
Original commit message from CVS:
* docs/gst/gstreamer-sections.txt:
* gst/gst.c: (init_post):
* gst/gst_private.h: (_GstParseContext):
* gst/gstparse.c: (gst_parse_error_quark), (gst_parse_context_new),
(gst_parse_context_free), (gst_parse_context_get_missing_elements),
(gst_parse_launchv), (gst_parse_launchv_full), (gst_parse_launch),
(gst_parse_launch_full):
* gst/gstparse.h: (GST_PARSE_FLAG_NONE), (GST_PARSE_FLAG_FATAL_ERRORS),
(GstParseFlags), (GstParseContext):
* gst/gstutils.c: (gst_parse_bin_from_description),
(gst_parse_bin_from_description_full):
* gst/gstutils.h:
* gst/parse/grammar.y:
* gst/parse/types.h:
* win32/common/libgstreamer.def:
Add new gst_parse_*_full API (#528178):
API: gst_parse_launch_full()
API: gst_parse_launchv_full()
API: gst_parse_bin_from_description_full()
API: gst_parse_context_new()
API: gst_parse_context_free()
API: gst_parse_context_get_missing_elements()
2008-05-24 15:33:53 +00:00
|
|
|
*/
|
|
|
|
GstElement *
|
|
|
|
gst_parse_launch_full (const gchar * pipeline_description,
|
|
|
|
GstParseContext * context, GstParseFlags flags, GError ** error)
|
2001-01-21 23:20:46 +00:00
|
|
|
{
|
2007-05-09 16:32:07 +00:00
|
|
|
#ifndef GST_DISABLE_PARSE
|
2006-07-21 10:40:25 +00:00
|
|
|
GstElement *element;
|
2013-11-01 16:35:59 +00:00
|
|
|
GError *myerror = NULL;
|
2001-03-06 20:04:42 +00:00
|
|
|
|
2002-04-07 23:32:16 +00:00
|
|
|
g_return_val_if_fail (pipeline_description != NULL, NULL);
|
API: gst_parse_launch_full()
Original commit message from CVS:
* docs/gst/gstreamer-sections.txt:
* gst/gst.c: (init_post):
* gst/gst_private.h: (_GstParseContext):
* gst/gstparse.c: (gst_parse_error_quark), (gst_parse_context_new),
(gst_parse_context_free), (gst_parse_context_get_missing_elements),
(gst_parse_launchv), (gst_parse_launchv_full), (gst_parse_launch),
(gst_parse_launch_full):
* gst/gstparse.h: (GST_PARSE_FLAG_NONE), (GST_PARSE_FLAG_FATAL_ERRORS),
(GstParseFlags), (GstParseContext):
* gst/gstutils.c: (gst_parse_bin_from_description),
(gst_parse_bin_from_description_full):
* gst/gstutils.h:
* gst/parse/grammar.y:
* gst/parse/types.h:
* win32/common/libgstreamer.def:
Add new gst_parse_*_full API (#528178):
API: gst_parse_launch_full()
API: gst_parse_launchv_full()
API: gst_parse_bin_from_description_full()
API: gst_parse_context_new()
API: gst_parse_context_free()
API: gst_parse_context_get_missing_elements()
2008-05-24 15:33:53 +00:00
|
|
|
g_return_val_if_fail (error == NULL || *error == NULL, NULL);
|
2001-05-20 20:05:29 +00:00
|
|
|
|
API: gst_parse_launch_full()
Original commit message from CVS:
* docs/gst/gstreamer-sections.txt:
* gst/gst.c: (init_post):
* gst/gst_private.h: (_GstParseContext):
* gst/gstparse.c: (gst_parse_error_quark), (gst_parse_context_new),
(gst_parse_context_free), (gst_parse_context_get_missing_elements),
(gst_parse_launchv), (gst_parse_launchv_full), (gst_parse_launch),
(gst_parse_launch_full):
* gst/gstparse.h: (GST_PARSE_FLAG_NONE), (GST_PARSE_FLAG_FATAL_ERRORS),
(GstParseFlags), (GstParseContext):
* gst/gstutils.c: (gst_parse_bin_from_description),
(gst_parse_bin_from_description_full):
* gst/gstutils.h:
* gst/parse/grammar.y:
* gst/parse/types.h:
* win32/common/libgstreamer.def:
Add new gst_parse_*_full API (#528178):
API: gst_parse_launch_full()
API: gst_parse_launchv_full()
API: gst_parse_bin_from_description_full()
API: gst_parse_context_new()
API: gst_parse_context_free()
API: gst_parse_context_get_missing_elements()
2008-05-24 15:33:53 +00:00
|
|
|
GST_CAT_INFO (GST_CAT_PIPELINE, "parsing pipeline description '%s'",
|
2004-03-13 15:27:01 +00:00
|
|
|
pipeline_description);
|
2001-03-06 20:04:42 +00:00
|
|
|
|
2013-11-01 16:35:59 +00:00
|
|
|
element = priv_gst_parse_launch (pipeline_description, &myerror, context,
|
|
|
|
flags);
|
API: gst_parse_launch_full()
Original commit message from CVS:
* docs/gst/gstreamer-sections.txt:
* gst/gst.c: (init_post):
* gst/gst_private.h: (_GstParseContext):
* gst/gstparse.c: (gst_parse_error_quark), (gst_parse_context_new),
(gst_parse_context_free), (gst_parse_context_get_missing_elements),
(gst_parse_launchv), (gst_parse_launchv_full), (gst_parse_launch),
(gst_parse_launch_full):
* gst/gstparse.h: (GST_PARSE_FLAG_NONE), (GST_PARSE_FLAG_FATAL_ERRORS),
(GstParseFlags), (GstParseContext):
* gst/gstutils.c: (gst_parse_bin_from_description),
(gst_parse_bin_from_description_full):
* gst/gstutils.h:
* gst/parse/grammar.y:
* gst/parse/types.h:
* win32/common/libgstreamer.def:
Add new gst_parse_*_full API (#528178):
API: gst_parse_launch_full()
API: gst_parse_launchv_full()
API: gst_parse_bin_from_description_full()
API: gst_parse_context_new()
API: gst_parse_context_free()
API: gst_parse_context_get_missing_elements()
2008-05-24 15:33:53 +00:00
|
|
|
|
|
|
|
/* don't return partially constructed pipeline if FATAL_ERRORS was given */
|
2013-11-01 16:35:59 +00:00
|
|
|
if (G_UNLIKELY (myerror != NULL && element != NULL)) {
|
API: gst_parse_launch_full()
Original commit message from CVS:
* docs/gst/gstreamer-sections.txt:
* gst/gst.c: (init_post):
* gst/gst_private.h: (_GstParseContext):
* gst/gstparse.c: (gst_parse_error_quark), (gst_parse_context_new),
(gst_parse_context_free), (gst_parse_context_get_missing_elements),
(gst_parse_launchv), (gst_parse_launchv_full), (gst_parse_launch),
(gst_parse_launch_full):
* gst/gstparse.h: (GST_PARSE_FLAG_NONE), (GST_PARSE_FLAG_FATAL_ERRORS),
(GstParseFlags), (GstParseContext):
* gst/gstutils.c: (gst_parse_bin_from_description),
(gst_parse_bin_from_description_full):
* gst/gstutils.h:
* gst/parse/grammar.y:
* gst/parse/types.h:
* win32/common/libgstreamer.def:
Add new gst_parse_*_full API (#528178):
API: gst_parse_launch_full()
API: gst_parse_launchv_full()
API: gst_parse_bin_from_description_full()
API: gst_parse_context_new()
API: gst_parse_context_free()
API: gst_parse_context_get_missing_elements()
2008-05-24 15:33:53 +00:00
|
|
|
if ((flags & GST_PARSE_FLAG_FATAL_ERRORS)) {
|
|
|
|
gst_object_unref (element);
|
|
|
|
element = NULL;
|
|
|
|
}
|
|
|
|
}
|
2006-07-21 10:40:25 +00:00
|
|
|
|
2013-11-01 16:35:59 +00:00
|
|
|
if (myerror)
|
|
|
|
g_propagate_error (error, myerror);
|
|
|
|
|
2003-04-08 21:59:44 +00:00
|
|
|
return element;
|
2007-05-09 16:32:07 +00:00
|
|
|
#else
|
|
|
|
gchar *msg;
|
|
|
|
|
API: gst_parse_launch_full()
Original commit message from CVS:
* docs/gst/gstreamer-sections.txt:
* gst/gst.c: (init_post):
* gst/gst_private.h: (_GstParseContext):
* gst/gstparse.c: (gst_parse_error_quark), (gst_parse_context_new),
(gst_parse_context_free), (gst_parse_context_get_missing_elements),
(gst_parse_launchv), (gst_parse_launchv_full), (gst_parse_launch),
(gst_parse_launch_full):
* gst/gstparse.h: (GST_PARSE_FLAG_NONE), (GST_PARSE_FLAG_FATAL_ERRORS),
(GstParseFlags), (GstParseContext):
* gst/gstutils.c: (gst_parse_bin_from_description),
(gst_parse_bin_from_description_full):
* gst/gstutils.h:
* gst/parse/grammar.y:
* gst/parse/types.h:
* win32/common/libgstreamer.def:
Add new gst_parse_*_full API (#528178):
API: gst_parse_launch_full()
API: gst_parse_launchv_full()
API: gst_parse_bin_from_description_full()
API: gst_parse_context_new()
API: gst_parse_context_free()
API: gst_parse_context_get_missing_elements()
2008-05-24 15:33:53 +00:00
|
|
|
GST_WARNING ("Disabled API called");
|
2007-05-09 16:32:07 +00:00
|
|
|
|
|
|
|
msg = gst_error_get_message (GST_CORE_ERROR, GST_CORE_ERROR_DISABLED);
|
|
|
|
g_set_error (error, GST_CORE_ERROR, GST_CORE_ERROR_DISABLED, "%s", msg);
|
|
|
|
g_free (msg);
|
2006-07-21 10:40:25 +00:00
|
|
|
|
2007-05-09 16:32:07 +00:00
|
|
|
return NULL;
|
|
|
|
#endif
|
2001-01-07 04:00:30 +00:00
|
|
|
}
|