mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-01-10 17:35:59 +00:00
first pass at integrating popt into gstreamer note: you will need popt 1.6.3 or greater (configure checks for this) -...
Original commit message from CVS: first pass at integrating popt into gstreamer note: you will need popt 1.6.3 or greater (configure checks for this) -- debian people will either need to patch popt 1.6.2 or install 1.6.3 by hand.
This commit is contained in:
parent
5c29019f9f
commit
e25cb1b156
3 changed files with 210 additions and 171 deletions
27
configure.ac
27
configure.ac
|
@ -1,4 +1,3 @@
|
||||||
dnl Note: this file is now the main autoconf file
|
|
||||||
AC_INIT
|
AC_INIT
|
||||||
AC_CANONICAL_TARGET([])
|
AC_CANONICAL_TARGET([])
|
||||||
|
|
||||||
|
@ -118,6 +117,11 @@ AC_SUBST(LIBXML_PKG)
|
||||||
AC_SUBST(XML_LIBS)
|
AC_SUBST(XML_LIBS)
|
||||||
AC_SUBST(XML_CFLAGS)
|
AC_SUBST(XML_CFLAGS)
|
||||||
|
|
||||||
|
GST_CHECK_LIBHEADER(POPT, popt, poptAddItem,, popt.h, POPT_LIBS="-lpopt",
|
||||||
|
AC_MSG_ERROR(
|
||||||
|
[popt 1.6.3 or newer is required to build gstreamer. You can download the latest
|
||||||
|
version from ftp://people.redhat.com/sopwith/popt/]))
|
||||||
|
|
||||||
dnl Check for atomic.h
|
dnl Check for atomic.h
|
||||||
dnl Note: use AC_CHECK_HEADER not AC_CHECK_HEADERS, because the latter
|
dnl Note: use AC_CHECK_HEADER not AC_CHECK_HEADERS, because the latter
|
||||||
dnl defines the wrong default symbol as well (HAVE_ASM_ATOMIC_H)
|
dnl defines the wrong default symbol as well (HAVE_ASM_ATOMIC_H)
|
||||||
|
@ -358,10 +362,8 @@ PLUGINS_BUILDDIR=`pwd`
|
||||||
AC_DEFINE_UNQUOTED(PLUGINS_BUILDDIR,"$PLUGINS_BUILDDIR")
|
AC_DEFINE_UNQUOTED(PLUGINS_BUILDDIR,"$PLUGINS_BUILDDIR")
|
||||||
AC_SUBST(PLUGINS_BUILDDIR)
|
AC_SUBST(PLUGINS_BUILDDIR)
|
||||||
|
|
||||||
dnl finalize _CFLAGS and _LIBS
|
dnl since glib and xml are package deps, there's no need to include their cflags
|
||||||
dnl add GLIB and XML if necessary to EXT_*
|
dnl in the pkg-config file
|
||||||
GST_EXT_CFLAGS="$GST_EXT_CFLAGS $XML_CFLAGS $GLIB_CFLAGS"
|
|
||||||
GST_EXT_LIBS="$GST_EXT_LIBS $XML_LIBS $GLIB_LIBS"
|
|
||||||
|
|
||||||
dnl for pkg-config
|
dnl for pkg-config
|
||||||
GST_PKG_CFLAGS=$GST_EXT_CFLAGS
|
GST_PKG_CFLAGS=$GST_EXT_CFLAGS
|
||||||
|
@ -369,18 +371,23 @@ GST_PKG_LIBS=$GST_EXT_LIBS
|
||||||
AC_SUBST(GST_PKG_CFLAGS)
|
AC_SUBST(GST_PKG_CFLAGS)
|
||||||
AC_SUBST(GST_PKG_LIBS)
|
AC_SUBST(GST_PKG_LIBS)
|
||||||
|
|
||||||
|
dnl finalize _CFLAGS and _LIBS
|
||||||
|
dnl add GLIB and XML if necessary to EXT_*
|
||||||
|
GST_CFLAGS="$GST_EXT_CFLAGS $XML_CFLAGS $GLIB_CFLAGS"
|
||||||
|
GST_LIBS="$GST_EXT_LIBS $XML_LIBS $GLIB_LIBS -lpopt"
|
||||||
|
|
||||||
dnl Private vars for libgst only
|
dnl Private vars for libgst only
|
||||||
LIBGST_LIBS="$GST_EXT_LIBS"
|
LIBGST_LIBS="$GST_LIBS"
|
||||||
LIBGST_CFLAGS="$GST_EXT_CFLAGS -I\$(top_srcdir)"
|
LIBGST_CFLAGS="$GST_CFLAGS -I\$(top_srcdir) -Wall"
|
||||||
AC_SUBST(LIBGST_LIBS)
|
AC_SUBST(LIBGST_LIBS)
|
||||||
AC_SUBST(LIBGST_CFLAGS)
|
AC_SUBST(LIBGST_CFLAGS)
|
||||||
|
|
||||||
dnl Vars for everyone else
|
dnl Vars for everyone else
|
||||||
GST_INT_LIBS="\$(top_builddir)/gst/libgstreamer.la"
|
GST_INT_LIBS="\$(top_builddir)/gst/libgstreamer.la"
|
||||||
GST_INT_CFLAGS="-I\$(top_srcdir)/libs -I\$(top_srcdir)/include -I\$(top_srcdir) -Wall"
|
GST_INT_CFLAGS="-I\$(top_srcdir)/libs -I\$(top_srcdir)/include"
|
||||||
|
|
||||||
AC_SUBST(GST_CFLAGS, "$GST_EXT_CFLAGS $GST_INT_CFLAGS")
|
AC_SUBST(GST_CFLAGS, "$LIBGST_CFLAGS $GST_INT_CFLAGS")
|
||||||
AC_SUBST(GST_LIBS, "$GST_EXT_LIBS $GST_INT_LIBS")
|
AC_SUBST(GST_LIBS, "$LIBGST_LIBS $GST_INT_LIBS")
|
||||||
|
|
||||||
AC_CONFIG_SUBDIRS(libs/ext/cothreads)
|
AC_CONFIG_SUBDIRS(libs/ext/cothreads)
|
||||||
|
|
||||||
|
|
346
gst/gst.c
346
gst/gst.c
|
@ -40,8 +40,9 @@ extern gint _gst_trace_on;
|
||||||
extern gboolean _gst_plugin_spew;
|
extern gboolean _gst_plugin_spew;
|
||||||
|
|
||||||
|
|
||||||
static gboolean gst_init_check (int *argc, gchar ***argv);
|
|
||||||
static void load_plugin_func (gpointer data, gpointer user_data);
|
static void load_plugin_func (gpointer data, gpointer user_data);
|
||||||
|
static void init_popt_callback (poptContext context, enum poptCallbackReason reason,
|
||||||
|
const struct poptOption *option, const char *arg, void *data);
|
||||||
|
|
||||||
static GSList *preload_plugins = NULL;
|
static GSList *preload_plugins = NULL;
|
||||||
|
|
||||||
|
@ -57,6 +58,50 @@ debug_log_handler (const gchar *log_domain,
|
||||||
g_on_error_query(NULL);
|
g_on_error_query(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum {
|
||||||
|
ARG_INFO_MASK=1,
|
||||||
|
ARG_DEBUG_MASK,
|
||||||
|
ARG_MASK,
|
||||||
|
ARG_PLUGIN_SPEW,
|
||||||
|
ARG_PLUGIN_PATH,
|
||||||
|
ARG_PLUGIN_LOAD,
|
||||||
|
ARG_SCHEDULER
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifndef NUL
|
||||||
|
#define NUL '\0'
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* FIXME: put in the extended mask help */
|
||||||
|
static const struct poptOption options[] = {
|
||||||
|
{NULL, NUL, POPT_ARG_CALLBACK|POPT_CBFLAG_PRE|POPT_CBFLAG_POST, &init_popt_callback, 0, NULL, NULL},
|
||||||
|
{NULL, NUL, POPT_ARG_INCLUDE_TABLE, poptHelpOptions, 0, "Help options:", NULL},
|
||||||
|
{"gst-info-mask", NUL, POPT_ARG_INT|POPT_ARGFLAG_STRIP, NULL, ARG_INFO_MASK, "info bitmask", "MASK"},
|
||||||
|
{"gst-debug-mask", NUL, POPT_ARG_INT|POPT_ARGFLAG_STRIP, NULL, ARG_DEBUG_MASK, "debugging bitmask", "MASK"},
|
||||||
|
{"gst-mask", NUL, POPT_ARG_INT|POPT_ARGFLAG_STRIP, NULL, ARG_MASK, "bitmask for both info and debugging", "MASK"},
|
||||||
|
{"gst-plugin-spew", NUL, POPT_ARG_NONE|POPT_ARGFLAG_STRIP, NULL, ARG_PLUGIN_SPEW, "enable verbose plugin loading diagnostics", NULL},
|
||||||
|
{"gst-plugin-path", NUL, POPT_ARG_STRING|POPT_ARGFLAG_STRIP, NULL, ARG_PLUGIN_PATH, "'" G_SEARCHPATH_SEPARATOR_S "'--separated path list for loading plugins", "PATHS"},
|
||||||
|
{"gst-plugin-load", NUL, POPT_ARG_STRING|POPT_ARGFLAG_STRIP, NULL, ARG_PLUGIN_LOAD, "comma-separated list of plugins to preload", "PLUGINS"},
|
||||||
|
{"gst-scheduler", NUL, POPT_ARG_STRING|POPT_ARGFLAG_STRIP, NULL, ARG_SCHEDULER, "scheduler to use ('basic' is the default)", "SCHEDULER"},
|
||||||
|
POPT_TABLEEND
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gst_init_get_popt_table:
|
||||||
|
*
|
||||||
|
* Returns a popt option table with GStreamer's argument specifications. The
|
||||||
|
* table is set up to use popt's callback method, so whenever the parsing is
|
||||||
|
* actually performed (via a poptGetContext()), the GStreamer libraries will
|
||||||
|
* be initialized.
|
||||||
|
*
|
||||||
|
* Returns: a pointer to the static GStreamer option table. No free is necessary.
|
||||||
|
*/
|
||||||
|
const struct poptOption *
|
||||||
|
gst_init_get_popt_table (void)
|
||||||
|
{
|
||||||
|
return options;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gst_init:
|
* gst_init:
|
||||||
* @argc: pointer to application's argc
|
* @argc: pointer to application's argc
|
||||||
|
@ -67,26 +112,101 @@ debug_log_handler (const gchar *log_domain,
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
gst_init (int *argc, char **argv[])
|
gst_init (int *argc, char **argv[])
|
||||||
|
{
|
||||||
|
poptContext context;
|
||||||
|
gint nextopt;
|
||||||
|
const struct poptOption *options = gst_init_get_popt_table ();
|
||||||
|
|
||||||
|
context = poptGetContext ("GStreamer", *argc, (const char**)*argv, options, 0);
|
||||||
|
|
||||||
|
while ((nextopt = poptGetNextOpt (context)) > 0 || nextopt == POPT_ERROR_BADOPT)
|
||||||
|
/* do nothing */ ;
|
||||||
|
|
||||||
|
if (nextopt != -1) {
|
||||||
|
g_print ("Error on option %s: %s.\nRun '%s --help' to see a full list of available command line options.\n",
|
||||||
|
poptBadOption (context, 0),
|
||||||
|
poptStrerror (nextopt),
|
||||||
|
(*argv)[0]);
|
||||||
|
exit (1);
|
||||||
|
}
|
||||||
|
*argc = poptStrippedArgv (context, *argc, *argv);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
add_path_func (gpointer data, gpointer user_data)
|
||||||
|
{
|
||||||
|
GST_INFO (GST_CAT_GST_INIT, "Adding plugin path: \"%s\"", (gchar *)data);
|
||||||
|
gst_plugin_add_path ((gchar *)data);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
prepare_for_load_plugin_func (gpointer data, gpointer user_data)
|
||||||
|
{
|
||||||
|
preload_plugins = g_slist_prepend (preload_plugins, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
load_plugin_func (gpointer data, gpointer user_data)
|
||||||
|
{
|
||||||
|
gboolean ret;
|
||||||
|
ret = gst_plugin_load ((gchar *)data);
|
||||||
|
if (ret)
|
||||||
|
GST_INFO (GST_CAT_GST_INIT, "Loaded plugin: \"%s\"", (gchar *)data);
|
||||||
|
else
|
||||||
|
GST_INFO (GST_CAT_GST_INIT, "Failed to load plugin: \"%s\"", (gchar *)data);
|
||||||
|
|
||||||
|
g_free (data);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
parse_number (const gchar *number, guint32 *val)
|
||||||
|
{
|
||||||
|
/* handle either 0xHEX or dec */
|
||||||
|
if (*(number+1) == 'x') {
|
||||||
|
sscanf (number+2, "%08x", val);
|
||||||
|
} else {
|
||||||
|
sscanf (number, "%d", val);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
split_and_iterate (const gchar *stringlist, gchar *separator, GFunc iterator)
|
||||||
|
{
|
||||||
|
gchar **strings;
|
||||||
|
gint j = 0;
|
||||||
|
gchar *lastlist = g_strdup (stringlist);
|
||||||
|
|
||||||
|
while (lastlist) {
|
||||||
|
strings = g_strsplit (lastlist, separator, MAX_PATH_SPLIT);
|
||||||
|
g_free (lastlist);
|
||||||
|
lastlist = NULL;
|
||||||
|
|
||||||
|
while (strings[j]) {
|
||||||
|
iterator (strings[j], NULL);
|
||||||
|
if (++j == MAX_PATH_SPLIT) {
|
||||||
|
lastlist = g_strdup (strings[j]);
|
||||||
|
g_strfreev (strings);
|
||||||
|
j=0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
init_post (void)
|
||||||
{
|
{
|
||||||
GLogLevelFlags llf;
|
GLogLevelFlags llf;
|
||||||
|
gboolean showhelp = FALSE;
|
||||||
#ifndef GST_DISABLE_TRACE
|
#ifndef GST_DISABLE_TRACE
|
||||||
GstTrace *gst_trace;
|
GstTrace *gst_trace;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (!g_thread_supported ())
|
|
||||||
g_thread_init (NULL);
|
|
||||||
|
|
||||||
g_type_init();
|
|
||||||
|
|
||||||
if (!gst_init_check (argc,argv)) {
|
|
||||||
exit (0); /* FIXME! */
|
|
||||||
}
|
|
||||||
|
|
||||||
llf = G_LOG_LEVEL_CRITICAL | G_LOG_LEVEL_ERROR | G_LOG_FLAG_FATAL;
|
llf = G_LOG_LEVEL_CRITICAL | G_LOG_LEVEL_ERROR | G_LOG_FLAG_FATAL;
|
||||||
g_log_set_handler(g_log_domain_gstreamer, llf, debug_log_handler, NULL);
|
g_log_set_handler(g_log_domain_gstreamer, llf, debug_log_handler, NULL);
|
||||||
|
|
||||||
GST_INFO (GST_CAT_GST_INIT, "Initializing GStreamer Core Library");
|
GST_INFO (GST_CAT_GST_INIT, "Initializing GStreamer Core Library");
|
||||||
|
|
||||||
gst_object_get_type ();
|
gst_object_get_type ();
|
||||||
gst_pad_get_type ();
|
gst_pad_get_type ();
|
||||||
gst_real_pad_get_type ();
|
gst_real_pad_get_type ();
|
||||||
|
@ -99,7 +219,7 @@ gst_init (int *argc, char **argv[])
|
||||||
#ifndef GST_DISABLE_AUTOPLUG
|
#ifndef GST_DISABLE_AUTOPLUG
|
||||||
gst_autoplugfactory_get_type ();
|
gst_autoplugfactory_get_type ();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
_gst_cpu_initialize ();
|
_gst_cpu_initialize ();
|
||||||
_gst_props_initialize ();
|
_gst_props_initialize ();
|
||||||
_gst_caps_initialize ();
|
_gst_caps_initialize ();
|
||||||
|
@ -131,157 +251,17 @@ gst_init (int *argc, char **argv[])
|
||||||
gst_trace_set_default (gst_trace);
|
gst_trace_set_default (gst_trace);
|
||||||
}
|
}
|
||||||
#endif /* GST_DISABLE_TRACE */
|
#endif /* GST_DISABLE_TRACE */
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
split_and_iterate (const gchar *stringlist, gchar *separator, GFunc iterator)
|
|
||||||
{
|
|
||||||
gchar **strings;
|
|
||||||
gint j = 0;
|
|
||||||
gchar *lastlist = g_strdup (stringlist);
|
|
||||||
|
|
||||||
while (lastlist) {
|
|
||||||
strings = g_strsplit (lastlist, separator, MAX_PATH_SPLIT);
|
|
||||||
g_free (lastlist);
|
|
||||||
lastlist = NULL;
|
|
||||||
|
|
||||||
while (strings[j]) {
|
|
||||||
iterator (strings[j], NULL);
|
|
||||||
if (++j == MAX_PATH_SPLIT) {
|
|
||||||
lastlist = g_strdup (strings[j]);
|
|
||||||
g_strfreev (strings);
|
|
||||||
j=0;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
add_path_func (gpointer data, gpointer user_data)
|
|
||||||
{
|
|
||||||
GST_INFO (GST_CAT_GST_INIT, "Adding plugin path: \"%s\"", (gchar *)data);
|
|
||||||
gst_plugin_add_path ((gchar *)data);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
prepare_for_load_plugin_func (gpointer data, gpointer user_data)
|
|
||||||
{
|
|
||||||
preload_plugins = g_slist_prepend (preload_plugins, data);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
load_plugin_func (gpointer data, gpointer user_data)
|
|
||||||
{
|
|
||||||
gboolean ret;
|
|
||||||
ret = gst_plugin_load ((gchar *)data);
|
|
||||||
if (ret)
|
|
||||||
GST_INFO (GST_CAT_GST_INIT, "Loaded plugin: \"%s\"", (gchar *)data);
|
|
||||||
else
|
|
||||||
GST_INFO (GST_CAT_GST_INIT, "Failed to load plugin: \"%s\"", (gchar *)data);
|
|
||||||
|
|
||||||
g_free (data);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
parse_number (gchar *number, guint32 *val)
|
|
||||||
{
|
|
||||||
/* handle either 0xHEX or dec */
|
|
||||||
if (*(number+1) == 'x') {
|
|
||||||
sscanf (number+2, "%08x", val);
|
|
||||||
} else {
|
|
||||||
sscanf (number, "%d", val);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* returns FALSE if the program can be aborted */
|
|
||||||
static gboolean
|
|
||||||
gst_init_check (int *argc,
|
|
||||||
gchar ***argv)
|
|
||||||
{
|
|
||||||
gboolean ret = TRUE;
|
|
||||||
gboolean showhelp = FALSE;
|
|
||||||
|
|
||||||
_gst_progname = NULL;
|
|
||||||
|
|
||||||
if (argc && argv) {
|
|
||||||
gint i, j, k;
|
|
||||||
|
|
||||||
_gst_progname = g_strdup(*argv[0]);
|
|
||||||
|
|
||||||
for (i=1; i< *argc; i++) {
|
|
||||||
if (!strncmp ("--gst-info-mask=", (*argv)[i], 16)) {
|
|
||||||
guint32 val;
|
|
||||||
|
|
||||||
parse_number ((*argv)[i]+16, &val);
|
|
||||||
gst_info_set_categories (val);
|
|
||||||
|
|
||||||
(*argv)[i] = NULL;
|
|
||||||
}
|
|
||||||
else if (!strncmp ("--gst-debug-mask=", (*argv)[i], 17)) {
|
|
||||||
guint32 val;
|
|
||||||
|
|
||||||
parse_number ((*argv)[i]+17, &val);
|
|
||||||
gst_debug_set_categories (val);
|
|
||||||
|
|
||||||
(*argv)[i] = NULL;
|
|
||||||
}
|
|
||||||
else if (!strncmp ("--gst-mask=", (*argv)[i], 11)) {
|
|
||||||
guint32 val;
|
|
||||||
|
|
||||||
parse_number ((*argv)[i]+11, &val);
|
|
||||||
gst_debug_set_categories (val);
|
|
||||||
gst_info_set_categories (val);
|
|
||||||
|
|
||||||
(*argv)[i] = NULL;
|
|
||||||
}
|
|
||||||
else if (!strncmp ("--gst-plugin-spew", (*argv)[i], 17)) {
|
|
||||||
_gst_plugin_spew = TRUE;
|
|
||||||
|
|
||||||
(*argv)[i] = NULL;
|
|
||||||
}
|
|
||||||
else if (!strncmp ("--gst-plugin-path=", (*argv)[i], 17)) {
|
|
||||||
split_and_iterate ((*argv)[i]+18, G_SEARCHPATH_SEPARATOR_S, add_path_func);
|
|
||||||
|
|
||||||
(*argv)[i] = NULL;
|
|
||||||
}
|
|
||||||
else if (!strncmp ("--gst-plugin-load=", (*argv)[i], 17)) {
|
|
||||||
split_and_iterate ((*argv)[i]+18, ",", prepare_for_load_plugin_func);
|
|
||||||
|
|
||||||
(*argv)[i] = NULL;
|
|
||||||
}
|
|
||||||
else if (!strncmp ("--help", (*argv)[i], 6)) {
|
|
||||||
showhelp = TRUE;
|
|
||||||
|
|
||||||
(*argv)[i] = NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 1; i < *argc; i++) {
|
|
||||||
for (k = i; k < *argc; k++)
|
|
||||||
if ((*argv)[k] != NULL)
|
|
||||||
break;
|
|
||||||
|
|
||||||
if (k > i) {
|
|
||||||
k -= i;
|
|
||||||
for (j = i + k; j < *argc; j++)
|
|
||||||
(*argv)[j-k] = (*argv)[j];
|
|
||||||
*argc -= k;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_gst_progname == NULL) {
|
if (_gst_progname == NULL) {
|
||||||
_gst_progname = g_strdup("gstprog");
|
_gst_progname = g_strdup("gstprog");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* check for ENV variables */
|
/* check for ENV variables */
|
||||||
{
|
{
|
||||||
const gchar *plugin_path = g_getenv("GST_PLUGIN_PATH");
|
const gchar *plugin_path = g_getenv("GST_PLUGIN_PATH");
|
||||||
split_and_iterate (plugin_path, G_SEARCHPATH_SEPARATOR_S, add_path_func);
|
split_and_iterate (plugin_path, G_SEARCHPATH_SEPARATOR_S, add_path_func);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* FIXME: this is never true... */
|
||||||
if (showhelp) {
|
if (showhelp) {
|
||||||
guint i;
|
guint i;
|
||||||
|
|
||||||
|
@ -293,9 +273,10 @@ gst_init_check (int *argc,
|
||||||
g_print (" --gst-mask=FLAGS GST info *and* debug flags to set\n");
|
g_print (" --gst-mask=FLAGS GST info *and* debug flags to set\n");
|
||||||
g_print (" --gst-plugin-spew Enable printout of errors while loading GST plugins\n");
|
g_print (" --gst-plugin-spew Enable printout of errors while loading GST plugins\n");
|
||||||
g_print (" --gst-plugin-path=PATH Add directories separated with '%s' to the plugin search path\n",
|
g_print (" --gst-plugin-path=PATH Add directories separated with '%s' to the plugin search path\n",
|
||||||
G_SEARCHPATH_SEPARATOR_S);
|
G_SEARCHPATH_SEPARATOR_S);
|
||||||
g_print (" --gst-plugin-load=PLUGINS Load plugins separated with '%s'\n",
|
g_print (" --gst-plugin-load=PLUGINS Load plugins separated with '%s'\n",
|
||||||
GST_PLUGIN_SEPARATOR);
|
GST_PLUGIN_SEPARATOR);
|
||||||
|
g_print (" --gst-scheduler=NAME Use a nonstandard scheduler\n");
|
||||||
|
|
||||||
g_print ("\n Mask (to be OR'ed) info/debug FLAGS \n");
|
g_print ("\n Mask (to be OR'ed) info/debug FLAGS \n");
|
||||||
g_print ("--------------------------------------------------------\n");
|
g_print ("--------------------------------------------------------\n");
|
||||||
|
@ -316,8 +297,57 @@ gst_init_check (int *argc,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return ret;
|
static void
|
||||||
|
init_popt_callback (poptContext context, enum poptCallbackReason reason,
|
||||||
|
const struct poptOption *option, const char *arg, void *data)
|
||||||
|
{
|
||||||
|
gint val = 0;
|
||||||
|
|
||||||
|
switch (reason) {
|
||||||
|
case POPT_CALLBACK_REASON_PRE:
|
||||||
|
if (!g_thread_supported ())
|
||||||
|
g_thread_init (NULL);
|
||||||
|
|
||||||
|
g_type_init();
|
||||||
|
break;
|
||||||
|
case POPT_CALLBACK_REASON_OPTION:
|
||||||
|
switch (option->val) {
|
||||||
|
case ARG_INFO_MASK:
|
||||||
|
parse_number (arg, &val);
|
||||||
|
gst_info_set_categories (val);
|
||||||
|
break;
|
||||||
|
case ARG_DEBUG_MASK:
|
||||||
|
parse_number (arg, &val);
|
||||||
|
gst_debug_set_categories (val);
|
||||||
|
break;
|
||||||
|
case ARG_MASK:
|
||||||
|
parse_number (arg, &val);
|
||||||
|
gst_debug_set_categories (val);
|
||||||
|
gst_info_set_categories (val);
|
||||||
|
break;
|
||||||
|
case ARG_PLUGIN_SPEW:
|
||||||
|
_gst_plugin_spew = TRUE;
|
||||||
|
break;
|
||||||
|
case ARG_PLUGIN_PATH:
|
||||||
|
split_and_iterate (arg, G_SEARCHPATH_SEPARATOR_S, add_path_func);
|
||||||
|
break;
|
||||||
|
case ARG_PLUGIN_LOAD:
|
||||||
|
split_and_iterate (arg, ",", prepare_for_load_plugin_func);
|
||||||
|
break;
|
||||||
|
case ARG_SCHEDULER:
|
||||||
|
gst_schedulerfactory_set_default_name (arg);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
g_warning ("option %d not recognized", option->val);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case POPT_CALLBACK_REASON_POST:
|
||||||
|
init_post();
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static GSList *mainloops = NULL;
|
static GSList *mainloops = NULL;
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
#define __GST_H__
|
#define __GST_H__
|
||||||
|
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
|
#include <popt.h>
|
||||||
|
|
||||||
#include <gst/gstversion.h>
|
#include <gst/gstversion.h>
|
||||||
#include <gst/gsttypes.h>
|
#include <gst/gsttypes.h>
|
||||||
|
@ -59,10 +60,11 @@ extern "C" {
|
||||||
#endif /* __cplusplus */
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
/* initialize GST */
|
/* initialize GST */
|
||||||
void gst_init (int *argc, char **argv[]);
|
void gst_init (int *argc, char **argv[]);
|
||||||
|
const struct poptOption *gst_init_get_popt_table (void);
|
||||||
|
|
||||||
void gst_main (void);
|
void gst_main (void);
|
||||||
void gst_main_quit (void);
|
void gst_main_quit (void);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue