Warn about ALSA errors

always set the smaple rate
set buffer size
This commit is contained in:
Glenn Maynard
2003-12-30 08:13:44 +00:00
parent c1522bff10
commit 34e1486550
3 changed files with 20 additions and 9 deletions
+1
View File
@@ -16,6 +16,7 @@
#define dsnd_pcm_sw_params_alloca(ptr) { assert(ptr); *ptr = (snd_pcm_sw_params_t *) alloca(dsnd_pcm_sw_params_sizeof()); memset(*ptr, 0, dsnd_pcm_sw_params_sizeof()); }
#define dsnd_pcm_info_alloca(ptr) { assert(ptr); *ptr = (snd_pcm_info_t *) alloca(dsnd_pcm_info_sizeof()); memset(*ptr, 0, dsnd_pcm_info_sizeof()); }
#define dsnd_ctl_card_info_alloca(ptr) { assert(ptr); *ptr = (snd_ctl_card_info_t *) alloca(dsnd_ctl_card_info_sizeof()); memset(*ptr, 0, dsnd_ctl_card_info_sizeof()); }
#define dsnd_pcm_status_alloca(ptr) do { assert(ptr); *ptr = (snd_pcm_status_t *) alloca(dsnd_pcm_status_sizeof()); memset(*ptr, 0, dsnd_pcm_status_sizeof()); } while (0)
CString LoadALSA();
void UnloadALSA();
@@ -28,6 +28,10 @@ FUNC(int, snd_pcm_hw_params_set_access, (snd_pcm_t *pcm, snd_pcm_hw_params_t *pa
FUNC(int, snd_pcm_hw_params_set_channels, (snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int val));
FUNC(int, snd_pcm_hw_params_set_format, (snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_format_t val));
FUNC(int, snd_pcm_hw_params_set_rate_near, (snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val, int *dir));
FUNC(int, snd_pcm_hw_params_set_buffer_size_near, (snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_uframes_t *val));
FUNC(int, snd_pcm_status, (snd_pcm_t *pcm, snd_pcm_status_t *status));
FUNC(snd_pcm_uframes_t, snd_pcm_status_get_avail, (const snd_pcm_status_t *obj));
FUNC(size_t, snd_pcm_status_sizeof, (void));
FUNC(int, snd_pcm_hwsync, (snd_pcm_t *pcm));
FUNC(int, snd_ctl_pcm_next_device, (snd_ctl_t *ctl, int *device));
FUNC(int, snd_ctl_pcm_info, (snd_ctl_t *ctl, snd_pcm_info_t * info));
+15 -9
View File
@@ -9,7 +9,7 @@
#define ALSA_CHECK(x) \
if ( err < 0 ) { LOG->Info("ALSA9: %s: %s", x, dsnd_strerror(err)); return false; }
#define ALSA_ASSERT(x) \
if (err < 0) { LOG->Trace("ALSA9: %s: %s", x, dsnd_strerror(err)); }
if (err < 0) { LOG->Warn("ALSA9: %s: %s", x, dsnd_strerror(err)); }
bool Alsa9Buf::SetHWParams()
{
@@ -45,15 +45,21 @@ bool Alsa9Buf::SetHWParams()
err = dsnd_pcm_hw_params_set_channels(pcm, hwparams, 2);
ALSA_CHECK("dsnd_pcm_hw_params_set_channels");
if( samplerate != Alsa9Buf::DYNAMIC_SAMPLERATE )
{
unsigned int rate = samplerate;
err = dsnd_pcm_hw_params_set_rate_near(pcm, hwparams, &rate, 0);
ALSA_CHECK("dsnd_pcm_hw_params_set_rate_near");
/* Set the sample rate. We shouldn't need to set it if rate is DYNAMIC_SAMPLERATE,
* but I've had alsalib crashes if I don't. */
if( samplerate == Alsa9Buf::DYNAMIC_SAMPLERATE )
samplerate = 44100;
unsigned int rate = samplerate;
err = dsnd_pcm_hw_params_set_rate_near(pcm, hwparams, &rate, 0);
ALSA_CHECK("dsnd_pcm_hw_params_set_rate_near");
if( (int) rate != samplerate )
LOG->Warn("Alsa9Buf::SetHWParams: Couldn't get %ihz (got %ihz instead)", samplerate, rate);
}
if( (int) rate != samplerate )
LOG->Warn("Alsa9Buf::SetHWParams: Couldn't get %ihz (got %ihz instead)", samplerate, rate);
snd_pcm_uframes_t buffersize = 1024*32;
err = dsnd_pcm_hw_params_set_buffer_size_near( pcm, hwparams, &buffersize );
ALSA_CHECK("dsnd_pcm_hw_params_set_buffer_size_near");
/* write the hardware parameters to the device */
err = dsnd_pcm_hw_params( pcm, hwparams );