- vlc_value_t val, text;
- int i_format;
- unsigned int i_physical_channels;
- DWORD ui_speaker_config;
- bool is_default_output_set = false;
-
- 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 );
-
- /* Test for 5.1 support */
- i_physical_channels = AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT |
- AOUT_CHAN_CENTER | AOUT_CHAN_REARLEFT |
- AOUT_CHAN_REARRIGHT | AOUT_CHAN_LFE;
- if( p_aout->output.output.i_physical_channels == i_physical_channels )
- {
- if( CreateDSBufferPCM( p_aout, &i_format, i_physical_channels, 6,
- p_aout->output.output.i_rate, true )
- == VLC_SUCCESS )
- {
- val.i_int = AOUT_VAR_5_1;
- text.psz_string = (char*) "5.1";
- var_Change( p_aout, "audio-device",
- VLC_VAR_ADDCHOICE, &val, &text );
- var_Change( p_aout, "audio-device", VLC_VAR_SETDEFAULT, &val, NULL );
- is_default_output_set = true;
- msg_Dbg( p_aout, "device supports 5.1 channels" );
- }
- }
-
- /* Test for 7.1 support */
- i_physical_channels = AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT |
- AOUT_CHAN_CENTER | AOUT_CHAN_REARLEFT |
- AOUT_CHAN_MIDDLELEFT | AOUT_CHAN_MIDDLERIGHT |
- AOUT_CHAN_REARRIGHT | AOUT_CHAN_LFE;
- if( p_aout->output.output.i_physical_channels == i_physical_channels )
- {
- if( CreateDSBufferPCM( p_aout, &i_format, i_physical_channels, 8,
- p_aout->output.output.i_rate, true )
- == VLC_SUCCESS )
- {
- val.i_int = AOUT_VAR_7_1;
- text.psz_string = (char*) "7.1";
- var_Change( p_aout, "audio-device",
- VLC_VAR_ADDCHOICE, &val, &text );
- var_Change( p_aout, "audio-device", VLC_VAR_SETDEFAULT, &val, NULL );
- is_default_output_set = true;
- msg_Dbg( p_aout, "device supports 7.1 channels" );
- }
- }
-
- /* Test for 3 Front 2 Rear support */
- i_physical_channels = AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT |
- AOUT_CHAN_CENTER | AOUT_CHAN_REARLEFT |
- AOUT_CHAN_REARRIGHT;
- if( p_aout->output.output.i_physical_channels == i_physical_channels )
- {
- if( CreateDSBufferPCM( p_aout, &i_format, i_physical_channels, 5,
- p_aout->output.output.i_rate, true )
- == VLC_SUCCESS )
- {
- val.i_int = AOUT_VAR_3F2R;
- text.psz_string = _("3 Front 2 Rear");
- var_Change( p_aout, "audio-device",
- VLC_VAR_ADDCHOICE, &val, &text );
- if(!is_default_output_set)
- {
- var_Change( p_aout, "audio-device", VLC_VAR_SETDEFAULT, &val, NULL );
- is_default_output_set = true;
- }
- msg_Dbg( p_aout, "device supports 5 channels" );
- }
- }
-
- /* Test for 2 Front 2 Rear support */
- i_physical_channels = AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT |
- AOUT_CHAN_REARLEFT | AOUT_CHAN_REARRIGHT;
- if( ( p_aout->output.output.i_physical_channels & i_physical_channels )
- == i_physical_channels )
- {
- if( CreateDSBufferPCM( p_aout, &i_format, i_physical_channels, 4,
- p_aout->output.output.i_rate, true )
- == VLC_SUCCESS )
- {
- val.i_int = AOUT_VAR_2F2R;
- text.psz_string = _("2 Front 2 Rear");
- var_Change( p_aout, "audio-device",
- VLC_VAR_ADDCHOICE, &val, &text );
- if(!is_default_output_set)
- {
- var_Change( p_aout, "audio-device", VLC_VAR_SETDEFAULT, &val, NULL );
- is_default_output_set = true;
- }
- msg_Dbg( p_aout, "device supports 4 channels" );
- }
- }
-
- /* Test for stereo support */
- i_physical_channels = AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT;
- if( CreateDSBufferPCM( p_aout, &i_format, i_physical_channels, 2,
- p_aout->output.output.i_rate, true )
- == VLC_SUCCESS )