X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;f=alsa_writer.c;h=d13ea3a8b2ec71eaf85310603d437f60b9a39e15;hb=714a9c3600ca1446e18fbce3911ac50e1338ec56;hp=5c3290731dd3aff35ddc9b4a9929236e9b0df36e;hpb=eedc9eafd60b670dd2b90fcbcc380f3f9a333f93;p=paraslash.git diff --git a/alsa_writer.c b/alsa_writer.c index 5c329073..d13ea3a8 100644 --- a/alsa_writer.c +++ b/alsa_writer.c @@ -83,7 +83,7 @@ static int alsa_open(struct writer_node *w) w->private_data = pad; snd_pcm_info_alloca(&info); err = snd_pcm_open(&pad->handle, conf->device_arg, - SND_PCM_STREAM_PLAYBACK, 0); + SND_PCM_STREAM_PLAYBACK, SND_PCM_NONBLOCK); if (err < 0) return -E_PCM_OPEN; if ((err = snd_pcm_info(pad->handle, info)) < 0) @@ -154,14 +154,14 @@ static void alsa_write_pre_select(struct sched *s, struct task *t) struct timeval diff; t->ret = 1; - if (*wng->input_eof && *wng->loaded < pad->bytes_per_frame) + if (*wng->loaded < pad->bytes_per_frame) return; if (tv_diff(&s->now, &pad->next_chunk, &diff) < 0) { if (tv_diff(&s->timeout, &diff, NULL) > 0) s->timeout = diff; } else { s->timeout.tv_sec = 0; - s->timeout.tv_usec = 1000; + s->timeout.tv_usec = 1; } // PARA_INFO_LOG("timeout: %lu\n", tv2ms(&s->timeout)); } @@ -206,6 +206,7 @@ static void alsa_write_post_select(struct sched *s, struct task *t) static void alsa_close(struct writer_node *wn) { struct private_alsa_data *pad = wn->private_data; + PARA_INFO_LOG("closing writer node %p\n", wn); snd_pcm_drain(pad->handle); snd_pcm_close(pad->handle); snd_config_update_free_global();