[Pkg-allegro-maintainers] Bug#462810: liballegro4.2: alsa plugin doesn't work with many sound cards -- the patch
Peter De Wachter
pdewacht at gmail.com
Sun Jan 27 22:01:33 UTC 2008
Ok, I didn't attach the patch. Sorry.
-------------- next part --------------
Index: allegro4.2-4.2.2/src/unix/alsa9.c
===================================================================
--- allegro4.2-4.2.2.orig/src/unix/alsa9.c 2008-01-27 16:01:06.000000000 +0100
+++ allegro4.2-4.2.2/src/unix/alsa9.c 2008-01-27 16:22:56.000000000 +0100
@@ -353,26 +353,47 @@
alsa_bits = (_sound_bits == 8) ? 8 : 16;
alsa_stereo = (_sound_stereo) ? 1 : 0;
alsa_rate = (_sound_freq > 0) ? _sound_freq : 44100;
- alsa_signed = 0;
- format = ((alsa_bits == 16) ? SND_PCM_FORMAT_U16_NE : SND_PCM_FORMAT_U8);
-
- switch (format) {
+ snd_pcm_hw_params_malloc(&hwparams);
+ ALSA9_CHECK(snd_pcm_hw_params_any(pcm_handle, hwparams));
- case SND_PCM_FORMAT_U8:
- alsa_bits = 8;
- break;
-
- case SND_PCM_FORMAT_U16_NE:
- if (sizeof(short) != 2) {
- ustrzcpy(allegro_error, ALLEGRO_ERROR_SIZE, get_config_text("Unsupported sample format"));
- goto Error;
- }
- break;
-
- default:
- ustrzcpy(allegro_error, ALLEGRO_ERROR_SIZE, get_config_text("Unsupported sample format"));
- goto Error;
+ if (alsa_bits == 8) {
+ if (snd_pcm_hw_params_test_format(pcm_handle, hwparams, SND_PCM_FORMAT_U8) == 0) {
+ format = SND_PCM_FORMAT_U8;
+ alsa_signed = 0;
+ }
+ else if (snd_pcm_hw_params_test_format(pcm_handle, hwparams, SND_PCM_FORMAT_S8) == 0) {
+ format = SND_PCM_FORMAT_S8;
+ alsa_signed = 1;
+ }
+ else {
+ ustrzcpy(allegro_error, ALLEGRO_ERROR_SIZE, get_config_text("Unsupported sample format"));
+ goto Error;
+ }
+ }
+ else if (alsa_bits == 16)
+ {
+ if (sizeof(short) != 2)
+ {
+ ustrzcpy(allegro_error, ALLEGRO_ERROR_SIZE, get_config_text("Unsupported sample format"));
+ goto Error;
+ }
+
+ if (snd_pcm_hw_params_test_format(pcm_handle, hwparams, SND_PCM_FORMAT_U16_NE) == 0)
+ {
+ format = SND_PCM_FORMAT_U16_NE;
+ alsa_signed = 0;
+ }
+ else if (snd_pcm_hw_params_test_format(pcm_handle, hwparams, SND_PCM_FORMAT_S16_NE) == 0)
+ {
+ format = SND_PCM_FORMAT_S16_NE;
+ alsa_signed = 1;
+ }
+ else
+ {
+ ustrzcpy(allegro_error, ALLEGRO_ERROR_SIZE, get_config_text("Unsupported sample format"));
+ goto Error;
+ }
}
alsa_sample_size = (alsa_bits / 8) * (alsa_stereo ? 2 : 1);
@@ -384,10 +405,6 @@
fragsize <<= 1;
}
- snd_pcm_hw_params_malloc(&hwparams);
- snd_pcm_sw_params_malloc(&swparams);
-
- ALSA9_CHECK(snd_pcm_hw_params_any(pcm_handle, hwparams));
ALSA9_CHECK(snd_pcm_hw_params_set_access(pcm_handle, hwparams, SND_PCM_ACCESS_RW_INTERLEAVED));
ALSA9_CHECK(snd_pcm_hw_params_set_format(pcm_handle, hwparams, format));
ALSA9_CHECK(snd_pcm_hw_params_set_channels(pcm_handle, hwparams, alsa_stereo + 1));
@@ -403,6 +420,7 @@
TRACE (PREFIX_I "alsa_bufsize = %ld, alsa_fragments = %d\n", alsa_bufsize, alsa_fragments);
+ snd_pcm_sw_params_malloc(&swparams);
ALSA9_CHECK(snd_pcm_sw_params_current(pcm_handle, swparams));
ALSA9_CHECK(snd_pcm_sw_params_set_start_threshold(pcm_handle, swparams, alsa_bufsize));
ALSA9_CHECK(snd_pcm_sw_params_set_avail_min(pcm_handle, swparams, fragsize));
More information about the Pkg-allegro-maintainers
mailing list