+ /* Now have a look at what we got. */
+ switch ( obtained.format )
+ {
+ case AUDIO_S16LSB:
+ p_aout->output.output.i_format = VLC_CODEC_S16L; break;
+ case AUDIO_S16MSB:
+ p_aout->output.output.i_format = VLC_CODEC_S16B; break;
+ case AUDIO_U16LSB:
+ p_aout->output.output.i_format = VLC_CODEC_U16L; break;
+ case AUDIO_U16MSB:
+ p_aout->output.output.i_format = VLC_CODEC_U16B; break;
+ case AUDIO_S8:
+ p_aout->output.output.i_format = VLC_CODEC_S8; break;
+ case AUDIO_U8:
+ p_aout->output.output.i_format = VLC_CODEC_U8; break;
+ }
+ /* Volume is entirely done in software. */
+ aout_VolumeSoftInit( p_aout );
+
+ if ( obtained.channels != i_nb_channels )
+ {
+ p_aout->output.output.i_physical_channels = (obtained.channels == 2 ?
+ AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT :
+ AOUT_CHAN_CENTER);
+
+ if ( var_Type( p_aout, "audio-device" ) == 0 )
+ {
+ var_Create( p_aout, "audio-device",
+ VLC_VAR_INTEGER | VLC_VAR_HASCHOICE );
+ text.psz_string = _("Audio Device");
+ var_Change( p_aout, "audio-device", VLC_VAR_SETTEXT, &text, NULL );
+
+ val.i_int = (obtained.channels == 2) ? AOUT_VAR_STEREO :
+ AOUT_VAR_MONO;
+ text.psz_string = (obtained.channels == 2) ? _("Stereo") :
+ _("Mono");
+ var_Change( p_aout, "audio-device",
+ VLC_VAR_ADDCHOICE, &val, &text );
+ var_AddCallback( p_aout, "audio-device", aout_ChannelsRestart,
+ NULL );
+ }
+ }
+ else if ( var_Type( p_aout, "audio-device" ) == 0 )
+ {
+ /* First launch. */
+ var_Create( p_aout, "audio-device",
+ VLC_VAR_INTEGER | VLC_VAR_HASCHOICE );
+ text.psz_string = _("Audio Device");
+ var_Change( p_aout, "audio-device", VLC_VAR_SETTEXT, &text, NULL );
+
+ val.i_int = AOUT_VAR_STEREO;
+ text.psz_string = _("Stereo");
+ var_Change( p_aout, "audio-device", VLC_VAR_ADDCHOICE, &val, &text );
+ val.i_int = AOUT_VAR_MONO;
+ text.psz_string = _("Mono");
+ var_Change( p_aout, "audio-device", VLC_VAR_ADDCHOICE, &val, &text );
+ if ( i_nb_channels == 2 )
+ {
+ val.i_int = AOUT_VAR_STEREO;
+ }
+ else
+ {
+ val.i_int = AOUT_VAR_MONO;
+ }
+ var_Change( p_aout, "audio-device", VLC_VAR_SETDEFAULT, &val, NULL );
+ var_AddCallback( p_aout, "audio-device", aout_ChannelsRestart, NULL );
+ }
+
+ var_SetBool( p_aout, "intf-change", true );
+
+ p_aout->output.output.i_rate = obtained.freq;
+ p_aout->output.i_nb_samples = obtained.samples;
+ p_aout->output.pf_play = Play;
+