]> git.sesse.net Git - vlc/commitdiff
aout: add --stereo-mode to replace audio-channels variable (fixes #6)
authorRémi Denis-Courmont <remi@remlab.net>
Thu, 4 Oct 2012 19:13:15 +0000 (22:13 +0300)
committerRémi Denis-Courmont <remi@remlab.net>
Thu, 4 Oct 2012 19:13:31 +0000 (22:13 +0300)
Since audio-channels was not a configuration item, renaming is a mere
internal matter. This also fixes callback handling and factors code.

include/vlc_aout.h
lib/audio.c
modules/control/rc.c
modules/gui/macosx/MainMenu.m
modules/gui/qt4/menus.cpp
share/lua/intf/cli.lua
src/audio_output/dec.c
src/audio_output/intf.c
src/audio_output/output.c
src/libvlc-module.c

index f0567d2267ec53116cc94052ffcfcc17055c4884..81efcebbc48afd5dacf503790a64919e2dfd3f50 100644 (file)
@@ -115,6 +115,7 @@ typedef int32_t vlc_fixed_t;
 #define AOUT_VAR_7_1                8
 #define AOUT_VAR_SPDIF              10
 
+#define AOUT_VAR_CHAN_UNSET         0 /* must be zero */
 #define AOUT_VAR_CHAN_STEREO        1
 #define AOUT_VAR_CHAN_RSTEREO       2
 #define AOUT_VAR_CHAN_LEFT          3
index ba8f8534f752278f13e6bfdd8e03a52b860282db..e529954f95472993e96e9a44c5a1d44513f2c874 100644 (file)
@@ -392,7 +392,7 @@ int libvlc_audio_get_channel( libvlc_media_player_t *mp )
     if( !p_aout )
         return 0;
 
-    int val = var_GetInteger( p_aout, "audio-channels" );
+    int val = var_GetInteger( p_aout, "stereo-mode" );
     vlc_object_release( p_aout );
     return val;
 }
@@ -408,7 +408,7 @@ int libvlc_audio_set_channel( libvlc_media_player_t *mp, int channel )
     if( !p_aout )
         return -1;
 
-    if( var_SetInteger( p_aout, "audio-channels", channel ) < 0 )
+    if( var_SetInteger( p_aout, "stereo-mode", channel ) < 0 )
     {
         libvlc_printerr( "Audio channel out of range" );
         ret = -1;
index 38f675b49d0149b3234e90cf0c0594cd7919ec11..456a0e02a6ccdd293b1e613ff8a2636a885aee90 100644 (file)
@@ -1710,13 +1710,9 @@ static int AudioConfig( vlc_object_t *p_this, char const *psz_cmd,
          return VLC_ENOOBJ;
 
     if ( !strcmp( psz_cmd, "adev" ) )
-    {
         psz_variable = "audio-device";
-    }
     else
-    {
-        psz_variable = "audio-channels";
-    }
+        psz_variable = "stereo-mode";
 
     /* Get the descriptive name of the variable */
     var_Change( p_aout, psz_variable, VLC_VAR_GETTEXT,
index 68d69b7ac58bc4b7f9830d1c755ef592e163e4d5..2e1c4a15a7ac16ef2e7cd64bd807b1b3a5b1f9be 100644 (file)
@@ -498,7 +498,7 @@ static VLCMainMenu *_o_sharedInstance = nil;
         audio_output_t * p_aout = input_GetAout(p_input);
         if (p_aout != NULL) {
             [self setupVarMenuItem: o_mi_channels target: (vlc_object_t *)p_aout
-                                     var: "audio-channels" selector: @selector(toggleVar:)];
+                                     var: "stereo-mode" selector: @selector(toggleVar:)];
 
             [self setupVarMenuItem: o_mi_device target: (vlc_object_t *)p_aout
                                      var: "audio-device" selector: @selector(toggleVar:)];
index 04e88c7b5a96af06318206287a09e9a661eeb7e2..7278d27bbea2ae9ca11b4ebc7534b6592f84147a 100644 (file)
@@ -255,7 +255,7 @@ static int AudioAutoMenuBuilder( audio_output_t *p_object,
         QVector<const char *> &varnames )
 {
     PUSH_INPUTVAR( "audio-es" );
-    PUSH_VAR( "audio-channels" );
+    PUSH_VAR( "stereo-mode" );
     PUSH_VAR( "audio-device" );
     PUSH_VAR( "visual" );
     return VLC_SUCCESS;
@@ -596,7 +596,7 @@ QMenu *VLCMenuBar::AudioMenu( intf_thread_t *p_intf, QMenu * current )
     if( current->isEmpty() )
     {
         addActionWithSubmenu( current, "audio-es", qtr( "Audio &Track" ) );
-        addActionWithSubmenu( current, "audio-channels", qtr( "Audio &Channels" ) );
+        addActionWithSubmenu( current, "stereo-mode", qtr( "&Stereo Mode" ) );
         addActionWithSubmenu( current, "audio-device", qtr( "Audio &Device" ) );
         current->addSeparator();
 
index 9de1d7417f4170cb5dbcc5633dc90c93b548878b..db9e7954dbb52fc56792f1b18760bbbe5c2b356f 100644 (file)
@@ -569,7 +569,7 @@ commands_ordered = {
     { "volup"; { func = ret_print(vlc.volume.up,"( audio volume: "," )"); args = "[X]"; help = "raise audio volume X steps" } };
     { "voldown"; { func = ret_print(vlc.volume.down,"( audio volume: "," )"); args = "[X]"; help = "lower audio volume X steps" } };
     { "adev"; { func = skip(listvalue("aout","audio-device")); args = "[X]"; help = "set/get audio device" } };
-    { "achan"; { func = skip(listvalue("aout","audio-channels")); args = "[X]"; help = "set/get audio channels" } };
+    { "achan"; { func = skip(listvalue("aout","stereo-mode")); args = "[X]"; help = "set/get stereo audio output mode" } };
     { "atrack"; { func = skip(listvalue("input","audio-es")); args = "[X]"; help = "set/get audio track" } };
     { "vtrack"; { func = skip(listvalue("input","video-es")); args = "[X]"; help = "set/get video track" } };
     { "vratio"; { func = skip(listvalue("vout","aspect-ratio")); args = "[X]"; help = "set/get video aspect ratio" } };
index b7d102b73a687c4284fa8c818e846a28420954f1..4b455b52b16f266b2531444f3c2bd35f4fd6ed94 100644 (file)
@@ -91,7 +91,7 @@ int aout_DecNew( audio_output_t *p_aout,
 
     /* Create the audio output stream */
     var_Destroy( p_aout, "audio-device" );
-    var_Destroy( p_aout, "audio-channels" );
+    var_Destroy( p_aout, "stereo-mode" );
 
     owner->input_format = *p_format;
     vlc_atomic_set (&owner->restart, 0);
@@ -139,7 +139,7 @@ void aout_Shutdown (audio_output_t *p_aout)
         aout_volume_Delete (owner->volume);
     }
     var_Destroy( p_aout, "audio-device" );
-    var_Destroy( p_aout, "audio-channels" );
+    var_Destroy( p_aout, "stereo-mode" );
 
     aout_unlock( p_aout );
     free (input);
index 85d4d843291edf4c35fe80a92e1b8a1533bfd9c6..2c987d56c5c0106a1c37146c9ce76ed7db91737c 100644 (file)
@@ -181,7 +181,7 @@ int aout_ChannelsRestart( vlc_object_t * p_this, const char * psz_variable,
     {
         /* This is supposed to be a significant change and supposes
          * rebuilding the channel choices. */
-        var_Destroy( p_aout, "audio-channels" );
+        var_Destroy( p_aout, "stereo-mode" );
     }
     aout_RequestRestart (p_aout);
     return 0;
index a43473a307c587c840521ca2413ae61c8b078515..0367abbabcadb4e5184d623868da8cca0ea7a1df 100644 (file)
@@ -98,96 +98,69 @@ int aout_OutputNew( audio_output_t *p_aout,
         return -1;
     }
 
-    if ( var_Type( p_aout, "audio-channels" ) ==
-             (VLC_VAR_INTEGER | VLC_VAR_HASCHOICE) )
-    {
-        /* The user may have selected a different channels configuration. */
-        switch( var_InheritInteger( p_aout, "audio-channels" ) )
-        {
-            case AOUT_VAR_CHAN_RSTEREO:
-                p_aout->format.i_original_channels |= AOUT_CHAN_REVERSESTEREO;
-                break;
-            case AOUT_VAR_CHAN_STEREO:
-                p_aout->format.i_original_channels =
-                                              AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT;
-                break;
-            case AOUT_VAR_CHAN_LEFT:
-                p_aout->format.i_original_channels = AOUT_CHAN_LEFT;
-                break;
-            case AOUT_VAR_CHAN_RIGHT:
-                p_aout->format.i_original_channels = AOUT_CHAN_RIGHT;
-                break;
-            case AOUT_VAR_CHAN_DOLBYS:
-                p_aout->format.i_original_channels =
-                      AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT | AOUT_CHAN_DOLBYSTEREO;
-                break;
-        }
-    }
-    else if ( p_aout->format.i_physical_channels == AOUT_CHAN_CENTER
-              && (p_aout->format.i_original_channels
-                   & AOUT_CHAN_PHYSMASK) == (AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT) )
-    {
-        vlc_value_t val, text;
-
-        /* Mono - create the audio-channels variable. */
-        var_Create( p_aout, "audio-channels",
-                    VLC_VAR_INTEGER | VLC_VAR_HASCHOICE );
-        text.psz_string = _("Audio Channels");
-        var_Change( p_aout, "audio-channels", VLC_VAR_SETTEXT, &text, NULL );
+    if (!var_Type (p_aout, "stereo-mode"))
+        var_Create (p_aout, "stereo-mode",
+                    VLC_VAR_INTEGER | VLC_VAR_HASCHOICE | VLC_VAR_DOINHERIT);
 
-        val.i_int = AOUT_VAR_CHAN_STEREO; text.psz_string = _("Stereo");
-        var_Change( p_aout, "audio-channels", VLC_VAR_ADDCHOICE, &val, &text );
-        val.i_int = AOUT_VAR_CHAN_LEFT; text.psz_string = _("Left");
-        var_Change( p_aout, "audio-channels", VLC_VAR_ADDCHOICE, &val, &text );
-        val.i_int = AOUT_VAR_CHAN_RIGHT; text.psz_string = _("Right");
-        var_Change( p_aout, "audio-channels", VLC_VAR_ADDCHOICE, &val, &text );
-        if ( p_aout->format.i_original_channels & AOUT_CHAN_DUALMONO )
-        {
-            /* Go directly to the left channel. */
-            p_aout->format.i_original_channels = AOUT_CHAN_LEFT;
-            var_SetInteger( p_aout, "audio-channels", AOUT_VAR_CHAN_LEFT );
-        }
-        var_AddCallback( p_aout, "audio-channels", aout_ChannelsRestart,
-                         NULL );
-    }
-    else if ( p_aout->format.i_physical_channels ==
-               (AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT)
-                && (p_aout->format.i_original_channels &
-                     (AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT)) )
+    /* The user may have selected a different channels configuration. */
+    var_AddCallback (p_aout, "stereo-mode", aout_ChannelsRestart, NULL);
+    switch (var_GetInteger (p_aout, "stereo-mode"))
     {
-        vlc_value_t val, text;
-
-        /* Stereo - create the audio-channels variable. */
-        var_Create( p_aout, "audio-channels",
-                    VLC_VAR_INTEGER | VLC_VAR_HASCHOICE );
-        text.psz_string = _("Audio Channels");
-        var_Change( p_aout, "audio-channels", VLC_VAR_SETTEXT, &text, NULL );
-
-        if ( p_aout->format.i_original_channels & AOUT_CHAN_DOLBYSTEREO )
-        {
-            val.i_int = AOUT_VAR_CHAN_DOLBYS;
-            text.psz_string = _("Dolby Surround");
-        }
-        else
-        {
-            val.i_int = AOUT_VAR_CHAN_STEREO;
-            text.psz_string = _("Stereo");
-        }
-        var_Change( p_aout, "audio-channels", VLC_VAR_ADDCHOICE, &val, &text );
-        val.i_int = AOUT_VAR_CHAN_LEFT; text.psz_string = _("Left");
-        var_Change( p_aout, "audio-channels", VLC_VAR_ADDCHOICE, &val, &text );
-        val.i_int = AOUT_VAR_CHAN_RIGHT; text.psz_string = _("Right");
-        var_Change( p_aout, "audio-channels", VLC_VAR_ADDCHOICE, &val, &text );
-        val.i_int = AOUT_VAR_CHAN_RSTEREO; text.psz_string=_("Reverse stereo");
-        var_Change( p_aout, "audio-channels", VLC_VAR_ADDCHOICE, &val, &text );
-        if ( p_aout->format.i_original_channels & AOUT_CHAN_DUALMONO )
-        {
-            /* Go directly to the left channel. */
+        case AOUT_VAR_CHAN_RSTEREO:
+            p_aout->format.i_original_channels |= AOUT_CHAN_REVERSESTEREO;
+             break;
+        case AOUT_VAR_CHAN_STEREO:
+            p_aout->format.i_original_channels = AOUT_CHANS_STEREO;
+            break;
+        case AOUT_VAR_CHAN_LEFT:
             p_aout->format.i_original_channels = AOUT_CHAN_LEFT;
-            var_SetInteger( p_aout, "audio-channels", AOUT_VAR_CHAN_LEFT );
+            break;
+        case AOUT_VAR_CHAN_RIGHT:
+            p_aout->format.i_original_channels = AOUT_CHAN_RIGHT;
+            break;
+        case AOUT_VAR_CHAN_DOLBYS:
+            p_aout->format.i_original_channels =
+                                     AOUT_CHANS_STEREO | AOUT_CHAN_DOLBYSTEREO;
+            break;
+        default:
+        {
+            if ((p_aout->format.i_original_channels & AOUT_CHAN_PHYSMASK)
+                                                         != AOUT_CHANS_STEREO)
+                 break;
+
+            vlc_value_t val, txt;
+            val.i_int = 0;
+            var_Change (p_aout, "stereo-mode", VLC_VAR_DELCHOICE, &val, NULL);
+            txt.psz_string = _("Stereo audio mode");
+            var_Change (p_aout, "stereo-mode", VLC_VAR_SETTEXT, &txt, NULL);
+            if (p_aout->format.i_original_channels & AOUT_CHAN_DOLBYSTEREO)
+            {
+                val.i_int = AOUT_VAR_CHAN_DOLBYS;
+                txt.psz_string = _("Dolby Surround");
+            }
+            else
+            {
+                val.i_int = AOUT_VAR_CHAN_STEREO;
+                txt.psz_string = _("Stereo");
+            }
+            var_Change (p_aout, "stereo-mode", VLC_VAR_ADDCHOICE, &val, &txt);
+            var_Change (p_aout, "stereo-mode", VLC_VAR_SETVALUE, &val, NULL);
+            val.i_int = AOUT_VAR_CHAN_LEFT;
+            txt.psz_string = _("Left");
+            var_Change (p_aout, "stereo-mode", VLC_VAR_ADDCHOICE, &val, &txt);
+            if (p_aout->format.i_original_channels & AOUT_CHAN_DUALMONO)
+            {   /* Go directly to the left channel. */
+                p_aout->format.i_original_channels = AOUT_CHAN_LEFT;
+                var_Change (p_aout, "stereo-mode", VLC_VAR_SETVALUE, &val,
+                            NULL);
+            }
+            val.i_int = AOUT_VAR_CHAN_RIGHT;
+            txt.psz_string = _("Right");
+            var_Change (p_aout, "stereo-mode", VLC_VAR_ADDCHOICE, &val, &txt);
+            val.i_int = AOUT_VAR_CHAN_RSTEREO;
+            txt.psz_string = _("Reverse stereo");
+            var_Change (p_aout, "stereo-mode", VLC_VAR_ADDCHOICE, &val, &txt);
         }
-        var_AddCallback( p_aout, "audio-channels", aout_ChannelsRestart,
-                         NULL );
     }
 
     aout_FormatPrepare( &p_aout->format );
@@ -236,6 +209,7 @@ void aout_OutputDelete (audio_output_t *aout)
     if (owner->module == NULL)
         return;
 
+    var_DelCallback (aout, "stereo-mode", aout_ChannelsRestart, NULL);
     module_unneed (aout, owner->module);
     aout->volume_set = NULL;
     aout->mute_set = NULL;
index a18d312e528733aef2145f2a5858728d2bea9d25..d293be70b7740b2e808a5577eaa340ae16851f5c 100644 (file)
@@ -43,6 +43,7 @@
 //#define Nothing here, this is just to prevent update-po from being stupid
 #include "vlc_keys.h"
 #include "vlc_meta.h"
+#include <vlc_aout.h>
 
 static const char *const ppsz_snap_formats[] =
 { "png", "jpg", "tiff" };
@@ -202,6 +203,15 @@ static const int pi_force_dolby_values[] = { 0, 1, 2 };
 static const char *const ppsz_force_dolby_descriptions[] = {
     N_("Auto"), N_("On"), N_("Off") };
 
+#define STEREO_MODE_TEXT N_("Stereo audio output mode")
+static const int pi_stereo_mode_values[] = { AOUT_VAR_CHAN_UNSET,
+    AOUT_VAR_CHAN_STEREO, AOUT_VAR_CHAN_RSTEREO,
+    AOUT_VAR_CHAN_LEFT, AOUT_VAR_CHAN_RIGHT, AOUT_VAR_CHAN_DOLBYS
+};
+static const char *const ppsz_stereo_mode_texts[] = { N_("Unset"),
+    N_("Stereo"), N_("Reverse stereo"),
+    N_("Left"), N_("Right"), N_("Dolby Surround")
+};
 
 #define AUDIO_FILTER_TEXT N_("Audio filters")
 #define AUDIO_FILTER_LONGTEXT N_( \
@@ -1495,6 +1505,8 @@ vlc_module_begin ()
     add_integer( "force-dolby-surround", 0, FORCE_DOLBY_TEXT,
                  FORCE_DOLBY_LONGTEXT, false )
         change_integer_list( pi_force_dolby_values, ppsz_force_dolby_descriptions )
+    add_integer( "stereo-mode", 0, STEREO_MODE_TEXT, STEREO_MODE_TEXT, true )
+        change_integer_list( pi_stereo_mode_values, ppsz_stereo_mode_texts )
     add_integer( "audio-desync", 0, DESYNC_TEXT,
                  DESYNC_LONGTEXT, true )
         change_safe ()