From b5e55a648f12cea229f49c00730ef11a8583b66b Mon Sep 17 00:00:00 2001 From: Warren Dukes Date: Tue, 8 Mar 2005 01:53:13 +0000 Subject: we ne allow audioOutput plugins to set the final outAudioFormat that will be used. we now use alsa's _near functions to detect what to use. git-svn-id: https://svn.musicpd.org/mpd/trunk@3038 09075e82-0dd4-0310-85a5-a0d7c8717e4f --- src/audioOutputs/audioOutput_alsa.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'src/audioOutputs/audioOutput_alsa.c') diff --git a/src/audioOutputs/audioOutput_alsa.c b/src/audioOutputs/audioOutput_alsa.c index 0cf453ffe..d804720b0 100644 --- a/src/audioOutputs/audioOutput_alsa.c +++ b/src/audioOutputs/audioOutput_alsa.c @@ -93,6 +93,7 @@ static int alsa_openDevice(AudioOutput * audioOutput) snd_pcm_hw_params_t * hwparams; snd_pcm_sw_params_t * swparams; unsigned int sampleRate = audioFormat->sampleRate; + unsigned int channels = audioFormat->channels; snd_pcm_uframes_t alsa_buffer_size; snd_pcm_uframes_t alsa_period_size; unsigned int alsa_buffer_time = MPD_ALSA_BUFFER_TIME; @@ -107,10 +108,10 @@ static int alsa_openDevice(AudioOutput * audioOutput) bitformat = SND_PCM_FORMAT_S16; break; case 24: - bitformat = SND_PCM_FORMAT_S16; + bitformat = SND_PCM_FORMAT_S24; break; case 32: - bitformat = SND_PCM_FORMAT_S16; + bitformat = SND_PCM_FORMAT_S32; break; default: ERROR("Alsa device \"%s\" doesn't support %i bit audio\n", @@ -162,14 +163,15 @@ static int alsa_openDevice(AudioOutput * audioOutput) goto fail; } - err = snd_pcm_hw_params_set_channels(ad->pcmHandle, hwparams, - audioFormat->channels); + err = snd_pcm_hw_params_set_channels_near(ad->pcmHandle, hwparams, + &channels); if(err < 0) { ERROR("Alsa device \"%s\" does not support %i channels: " "%s\n", ad->device, (int)audioFormat->channels, snd_strerror(-err)); goto fail; } + audioFormat->channels = channels; err = snd_pcm_hw_params_set_rate_near(ad->pcmHandle, hwparams, &sampleRate, 0); @@ -178,6 +180,7 @@ static int alsa_openDevice(AudioOutput * audioOutput) ad->device, (int)audioFormat->sampleRate); goto fail; } + audioFormat->sampleRate = sampleRate; err = snd_pcm_hw_params_set_buffer_time_near(ad->pcmHandle, hwparams, &alsa_buffer_time, 0); @@ -214,6 +217,9 @@ static int alsa_openDevice(AudioOutput * audioOutput) audioOutput->open = 1; + DEBUG("alsa device \"%s\" will be playing %i channel audio at %i Hz\n", + ad->device, channels, sampleRate); + return 0; error: -- cgit v1.2.3