+
+ if ( var_Type( p_aout, "audio-channels" ) ==
+ (VLC_VAR_INTEGER | VLC_VAR_HASCHOICE) )
+ {
+ /* The user may have selected a different channels configuration. */
+ var_Get( p_aout, "audio-channels", &val );
+
+ if ( val.i_int == AOUT_VAR_CHAN_RSTEREO )
+ {
+ p_aout->output.output.i_original_channels |=
+ AOUT_CHAN_REVERSESTEREO;
+ }
+ else if ( val.i_int == AOUT_VAR_CHAN_STEREO )
+ {
+ p_aout->output.output.i_original_channels =
+ AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT;
+ }
+ else if ( val.i_int == AOUT_VAR_CHAN_LEFT )
+ {
+ p_aout->output.output.i_original_channels = AOUT_CHAN_LEFT;
+ }
+ else if ( val.i_int == AOUT_VAR_CHAN_RIGHT )
+ {
+ p_aout->output.output.i_original_channels = AOUT_CHAN_RIGHT;
+ }
+ else if ( val.i_int == AOUT_VAR_CHAN_DOLBYS )
+ {
+ p_aout->output.output.i_original_channels
+ = AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT | AOUT_CHAN_DOLBYSTEREO;
+ }
+ }
+ else if ( p_aout->output.output.i_physical_channels == AOUT_CHAN_CENTER
+ && (p_aout->output.output.i_original_channels
+ & AOUT_CHAN_PHYSMASK) == (AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT) )
+ {
+ /* 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 );
+
+ 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->output.output.i_original_channels & AOUT_CHAN_DUALMONO )
+ {
+ /* Go directly to the left channel. */
+ p_aout->output.output.i_original_channels = AOUT_CHAN_LEFT;
+ val.i_int = AOUT_VAR_CHAN_LEFT;
+ var_Set( p_aout, "audio-channels", val );
+ }
+ var_AddCallback( p_aout, "audio-channels", aout_ChannelsRestart,
+ NULL );
+ }
+ else if ( p_aout->output.output.i_physical_channels ==
+ (AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT)
+ && (p_aout->output.output.i_original_channels &
+ (AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT)) )
+ {
+ /* 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->output.output.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->output.output.i_original_channels & AOUT_CHAN_DUALMONO )
+ {
+ /* Go directly to the left channel. */
+ p_aout->output.output.i_original_channels = AOUT_CHAN_LEFT;
+ val.i_int = AOUT_VAR_CHAN_LEFT;
+ var_Set( p_aout, "audio-channels", val );
+ }
+ var_AddCallback( p_aout, "audio-channels", aout_ChannelsRestart,
+ NULL );
+ }
+ val.b_bool = true;
+ var_Set( p_aout, "intf-change", val );
+