/*
- * Copyright (C) 2005-2011 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2005-2012 Andre Noll <maan@systemlinux.org>
*
* Licensed under the GPL v2. For licencing details see COPYING.
*/
#include <sys/types.h>
#include <alsa/asoundlib.h>
#include <sys/time.h>
-#include <stdbool.h>
#include "para.h"
#include "fd.h"
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;
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);
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 */
PARA_INFO_LOG("%s\n", buf);
buf = p + 1;
}
- snd_output_close(log);
+ snd_output_close(output_log);
}
return 1;
fail:
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_write_cmdline_parser(argc, argv, conf);
return conf;
}
static void alsa_free_config(void *conf)
{
- alsa_cmdline_parser_free(conf);
+ alsa_write_cmdline_parser_free(conf);
}
/**
{
struct alsa_write_args_info dummy;
- alsa_cmdline_parser_init(&dummy);
+ alsa_write_cmdline_parser_init(&dummy);
w->close = alsa_close;
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,
.detailed_help = alsa_write_args_info_detailed_help
};
- alsa_cmdline_parser_free(&dummy);
+ alsa_write_cmdline_parser_free(&dummy);
}