X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;f=alsa_write.c;h=73c9b8232679bde7b4ea910011ba648202761e9b;hb=8fa50e3e39b4f65dea2a694dc064038a41036642;hp=a4863a59a5bc3a426a08e6a69d333bded736d780;hpb=9de1287d67c9562e9140c6dc7deb0c01c4e10cc0;p=paraslash.git diff --git a/alsa_write.c b/alsa_write.c index a4863a59..73c9b823 100644 --- a/alsa_write.c +++ b/alsa_write.c @@ -72,7 +72,7 @@ static int alsa_init(struct private_alsa_write_data *pad, snd_pcm_sw_params_t *swparams; snd_pcm_uframes_t start_threshold, stop_threshold; snd_pcm_uframes_t buffer_size, period_size; - snd_output_t *log; + snd_output_t *output_log; unsigned buffer_time; int ret; const char *msg; @@ -113,6 +113,8 @@ static int alsa_init(struct private_alsa_write_data *pad, NULL); if (ret < 0 || buffer_time == 0) goto fail; + /* buffer at most 500 milliseconds */ + buffer_time = PARA_MIN(buffer_time, 500U * 1000U); msg = "could not set buffer time"; ret = snd_pcm_hw_params_set_buffer_time_near(pad->handle, hwparams, &buffer_time, NULL); @@ -161,12 +163,12 @@ static int alsa_init(struct private_alsa_write_data *pad, ret = snd_pcm_nonblock(pad->handle, 1); if (ret < 0) goto fail; - ret = snd_output_buffer_open(&log); + ret = snd_output_buffer_open(&output_log); if (ret == 0) { char *buf; PARA_INFO_LOG("dumping alsa configuration\n"); - snd_pcm_dump(pad->handle, log); - snd_output_buffer_string(log, &buf); + snd_pcm_dump(pad->handle, output_log); + snd_output_buffer_string(output_log, &buf); for (;;) { char *p = strchr(buf, '\n'); if (!p) /* omit last output line, it's empty */ @@ -175,7 +177,7 @@ static int alsa_init(struct private_alsa_write_data *pad, PARA_INFO_LOG("%s\n", buf); buf = p + 1; } - snd_output_close(log); + snd_output_close(output_log); } return 1; fail: @@ -322,16 +324,16 @@ again: ret = -E_ALSA; err: assert(ret < 0); - btr_remove_node(btrn); + btr_remove_node(&wn->btrn); t->error = ret; } -__malloc static void *alsa_parse_config_or_die(const char *options) +__malloc static void *alsa_parse_config_or_die(int argc, char **argv) { struct alsa_write_args_info *conf = para_calloc(sizeof(*conf)); /* exits on errors */ - alsa_cmdline_parser_string(options, conf, "alsa_write"); + alsa_cmdline_parser(argc, argv, conf); return conf; } @@ -356,7 +358,6 @@ void alsa_write_init(struct writer *w) w->pre_select = alsa_write_pre_select; w->post_select = alsa_write_post_select; w->parse_config_or_die = alsa_parse_config_or_die; - w->shutdown = NULL; /* nothing to do */ w->free_config = alsa_free_config; w->help = (struct ggo_help) { .short_help = alsa_write_args_info_help,