aboutsummaryrefslogtreecommitdiff
path: root/pcm.c
diff options
context:
space:
mode:
Diffstat (limited to 'pcm.c')
-rw-r--r--pcm.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/pcm.c b/pcm.c
index af175f2..00befe3 100644
--- a/pcm.c
+++ b/pcm.c
@@ -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;
}