Ktam3874/pitx software guide – Kontron KTAM3874-pITX User Manual
Page 97

KTD-S0057-I
Page 93 Linux® Programming Examples (DebianTM)
KTAM3874/pITX Software Guide
static int set_swparams (snd_pcm_t *handle, snd_pcm_sw_params_t *swparams)
{
int
err;
/* get the current swparams */
err = snd_pcm_sw_params_current (handle, swparams);
if (err < 0)
{
printf ("Unable to determine current swparams for playback: %s\n", snd_strerror (err));
return
err;
}
/* start the transfer when the buffer is almost full: (buffer_size / avail_min) * avail_min */
err = snd_pcm_sw_params_set_start_threshold (handle, swparams, (buffer_size / period_size) * period_size);
if (err < 0)
{
printf ("Unable to set start threshold mode for playback: %s\n", snd_strerror (err));
return
err;
}
/* allow the transfer when at least period_size samples can be processed */
/* or disable this mechanism when period event is enabled (aka interrupt like style processing) */
err = snd_pcm_sw_params_set_avail_min (handle, swparams, period_event ? buffer_size : period_size);
if (err < 0)
{
printf ("Unable to set avail min for playback: %s\n", snd_strerror (err));
return
err;
}
/* enable period events when requested */
if
(period_event)
{
err = snd_pcm_sw_params_set_period_event (handle, swparams, 1);
if (err < 0)
{
printf ("Unable to set period event: %s\n", snd_strerror (err));
return
err;
}
}
/* write the parameters to the playback device */
err = snd_pcm_sw_params (handle, swparams);
if (err < 0)
{
printf ("Unable to set sw params for playback: %s\n", snd_strerror (err));
return
err;
}
return
0;
}