diff options
Diffstat (limited to 'pcm.c')
-rw-r--r-- | pcm.c | 17 |
1 files changed, 11 insertions, 6 deletions
@@ -189,6 +189,10 @@ static unsigned int pcm_format_to_alsa(enum pcm_format format) switch (format) { case PCM_FORMAT_S32_LE: return SNDRV_PCM_FORMAT_S32_LE; + case PCM_FORMAT_S8: + return SNDRV_PCM_FORMAT_S8; + case PCM_FORMAT_S24_LE: + return SNDRV_PCM_FORMAT_S24_LE; default: case PCM_FORMAT_S16_LE: return SNDRV_PCM_FORMAT_S16_LE; @@ -538,10 +542,13 @@ struct pcm *pcm_open(unsigned int card, unsigned int device, sparams.period_step = 1; sparams.avail_min = 1; - if (!config->start_threshold) - pcm->config.start_threshold = sparams.start_threshold = - config->period_count * config->period_size / 2; - else + if (!config->start_threshold) { + if (pcm->flags & PCM_IN) + pcm->config.start_threshold = sparams.start_threshold = 1; + else + pcm->config.start_threshold = sparams.start_threshold = + config->period_count * config->period_size / 2; + } else sparams.start_threshold = config->start_threshold; /* pick a high stop threshold - todo: does this need further tuning */ @@ -712,7 +719,6 @@ int pcm_state(struct pcm *pcm) int pcm_wait(struct pcm *pcm, int timeout) { struct pollfd pfd; - unsigned short revents = 0; int err; pfd.fd = pcm->fd; @@ -825,6 +831,5 @@ int pcm_mmap_write(struct pcm *pcm, const void *buffer, unsigned int bytes) count -= frames; } -_end: return 0; } |