--- pulse.c 2008-09-18 22:03:35.000000000 +0100 +++ vlc-0.9.4/modules/audio_output/pulse.c 2008-12-04 11:43:43.000000000 +0000 @@ -123,13 +123,52 @@ PULSE_DEBUG( "Pulse start initialization"); - ss.rate = p_aout->output.output.i_rate; - ss.channels = 2; + ss.channels = aout_FormatNbChannels( &p_aout->output.output ); /* Get the input stream channel count */ + + /* Setup the pulse audio stream based on the input stream count */ + switch(ss.channels) + { + case 8: + p_aout->output.output.i_physical_channels + = AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT | AOUT_CHAN_CENTER + | AOUT_CHAN_MIDDLELEFT | AOUT_CHAN_MIDDLERIGHT + | AOUT_CHAN_REARLEFT | AOUT_CHAN_REARRIGHT + | AOUT_CHAN_LFE; + break; + + case 6: + p_aout->output.output.i_physical_channels + = AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT | AOUT_CHAN_CENTER + | AOUT_CHAN_REARLEFT | AOUT_CHAN_REARRIGHT + | AOUT_CHAN_LFE; + break; + + case 4: + p_aout->output.output.i_physical_channels + = AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT + | AOUT_CHAN_REARLEFT | AOUT_CHAN_REARRIGHT; + break; + + case 2: + p_aout->output.output.i_physical_channels + = AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT; + break; + + case 1: + p_aout->output.output.i_physical_channels = AOUT_CHAN_CENTER; + break; + + default: + msg_Err(p_aout,"Invalid number of channels"); + goto fail; + } + + /* Add a quick command line info message */ + msg_Info(p_aout, "No. of Audio Channels: %d", ss.channels); - ss.format = PA_SAMPLE_S16LE; - p_aout->output.output.i_physical_channels = - AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT; - p_aout->output.output.i_format = AOUT_FMT_S16_NE; + ss.rate = p_aout->output.output.i_rate; + ss.format = PA_SAMPLE_FLOAT32NE; + p_aout->output.output.i_format = VLC_FOURCC('f','l','3','2'); if (!pa_sample_spec_valid(&ss)) { msg_Err(p_aout,"Invalid sample spec"); @@ -148,8 +187,8 @@ p_sys->buffer_size = a.minreq; - pa_channel_map_init_stereo(&map); - + /* Initialise the speaker map setup above */ + pa_channel_map_init_auto(&map, ss.channels, PA_CHANNEL_MAP_ALSA); if (!(p_sys->mainloop = pa_threaded_mainloop_new())) { msg_Err(p_aout, "Failed to allocate main loop");