[vlc-devel] [PATCH 1/2] core: add an option to print the list of audio devices

Thomas Guillem thomas at gllm.fr
Wed Mar 22 09:57:13 CET 2017



On Wed, Mar 22, 2017, at 09:50, Thomas Guillem wrote:
> Add config_PrintAdvancedHelp() to deal with such help messages (see
> function
> comment). This function could be used to print other useful lists in the
> future.
> ---
>  src/config/configuration.h |  1 +
>  src/config/help.c          | 60
>  ++++++++++++++++++++++++++++++++++++++++++++++
>  src/libvlc-module.c        |  4 ++++
>  src/libvlc.c               |  6 +++++
>  4 files changed, 71 insertions(+)
> 
> diff --git a/src/config/configuration.h b/src/config/configuration.h
> index dd02c7f4af..d292588def 100644
> --- a/src/config/configuration.h
> +++ b/src/config/configuration.h
> @@ -37,6 +37,7 @@ int config_LoadConfigFile( vlc_object_t * );
>  #define config_LoadCmdLine(a,b,c,d)
>  config_LoadCmdLine(VLC_OBJECT(a),b,c,d)
>  #define config_LoadConfigFile(a) config_LoadConfigFile(VLC_OBJECT(a))
>  bool config_PrintHelp (vlc_object_t *);
> +bool config_PrintAdvancedHelp (vlc_object_t *);
>  
>  int config_SortConfig (void);
>  void config_UnsortConfig (void);
> diff --git a/src/config/help.c b/src/config/help.c
> index 5298f15ec3..663bf0630b 100644
> --- a/src/config/help.c
> +++ b/src/config/help.c
> @@ -34,8 +34,10 @@
>  #include <vlc_modules.h>
>  #include <vlc_plugin.h>
>  #include <vlc_charset.h>
> +#include <vlc_aout.h>
>  #include "modules/modules.h"
>  #include "config/configuration.h"
> +#include "audio_output/aout_internal.h"
>  #include "libvlc.h"
>  
>  #if defined( _WIN32 )
> @@ -59,6 +61,7 @@ static void Help (vlc_object_t *, const char *);
>  static void Usage (vlc_object_t *, const char *);
>  static void Version (void);
>  static void ListModules (vlc_object_t *, bool);
> +static void ListAoutDevices (vlc_object_t *);
>  
>  /**
>   * Returns the console width or a best guess.
> @@ -153,6 +156,28 @@ bool config_PrintHelp (vlc_object_t *obj)
>      return false;
>  }
>  
> +/**
> + * Checks for help command line options that need a valid libvlc
> instance
> + *
> + * Contrary to config_PrintHelp that is called in an early state (used
> to print
> + * a help message before libvlc initialisation can fail), this function
> need a
> + * fully initialized libvlc.
> + *
> + * If one help is found, print the corresponding text.
> + * \return true if a command line options caused some help message to be
> + * printed, false otherwise.
> + */
> +bool config_PrintAdvancedHelp (vlc_object_t *obj)
> +{
> +    if (var_InheritBool (obj, "list-audio-devices"))
> +    {
> +        ListAoutDevices (obj);
> +        return true;
> +    }
> +
> +    return false;
> +}
> +
>  /*****************************************************************************
>   * Help: print program help
>   *****************************************************************************
> @@ -682,6 +707,41 @@ static void ListModules (vlc_object_t *p_this, bool
> b_verbose)
>      PauseConsole();
>  }
>  
> +static void ListAoutDevices (vlc_object_t *obj)
> +{
> +    ShowConsole();
> +
> +    var_Create (obj, "mute", VLC_VAR_BOOL);
> +    audio_output_t *aout = aout_New(obj);
> +    if (!aout)
> +    {
> +        printf("couldn't find any audio outputs\n");
> +        return;
> +    }
> +    aout_owner_t *owner = aout_owner (aout);
> +
> +    char **ids, **names;
> +    int count = aout_DevicesList(aout, &ids, &names);
> +    if (count > 0)
> +    {
> +        printf("\nThe '%s' aout module has %d audio device%s:\n\n",
> +               module_get_name(owner->module, false),
> +               count, count > 1 ? "s" : "");
> +        for (int i = 0; i < count; ++i)
> +        {
> +            printf("device[%d]:\n  id: [%s]\n  name: \"%s\"\n\n", i,
> ids[i],
> +                   names[i]);
> +            free(ids[i]);
> +            free(names[i]);
> +        }
> +        free(ids);
> +        free(names);
> +    }
> +    aout_Destroy(aout);
> +
> +    PauseConsole();
> +}
> +
>  /*****************************************************************************
>   * Version: print complete program version
>   *****************************************************************************
> diff --git a/src/libvlc-module.c b/src/libvlc-module.c
> index 6d60e807af..cd52b77d87 100644
> --- a/src/libvlc-module.c
> +++ b/src/libvlc-module.c
> @@ -2693,6 +2693,8 @@ vlc_module_begin ()
>      N_("print a list of available modules")
>  #define LIST_VERBOSE_TEXT \
>      N_("print a list of available modules with extra detail")
> +#define LIST_AOUT_DEVICE_TEXT \
> +    N_("print a list of available audio devices")
>  #define MODULE_TEXT \
>      N_("print help on a specific module (can be combined with --advanced
>      " \
>         "and --help-verbose). Prefix the module name with = for strict "
>         \
> @@ -2725,6 +2727,8 @@ vlc_module_begin ()
>      add_bool( "list-verbose", false, LIST_VERBOSE_TEXT, "",
>                false )
>          change_volatile ()
> +    add_bool( "list-audio-devices", false, LIST_AOUT_DEVICE_TEXT, "",
> false )

oops, this should be an advanced option, and maybe not translated then ?

> +        change_volatile ()
>      add_string( "module", NULL, MODULE_TEXT, "", false )
>          change_short( 'p' )
>          change_volatile ()
> diff --git a/src/libvlc.c b/src/libvlc.c
> index 34f24baf7f..879ba257b3 100644
> --- a/src/libvlc.c
> +++ b/src/libvlc.c
> @@ -492,6 +492,12 @@ dbus_out:
>          free( psz_val );
>      }
>  
> +    if (config_PrintAdvancedHelp (VLC_OBJECT(p_libvlc)))
> +    {
> +        libvlc_InternalCleanup (p_libvlc);
> +        exit(0);
> +    }
> +
>      return VLC_SUCCESS;
>  
>  error:
> -- 
> 2.11.0
> 
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel


More information about the vlc-devel mailing list