snd_pcm_t *handle;
/** Determined and set by alsa_init(). */
int bytes_per_frame;
- /**
- * The sample rate given by command line option or the decoder
- * of the writer node group.
+ /*
+ * If the sample rate is not given at the command line and no wav
+ * header was detected, the btr exec mechanism is employed to query the
+ * ancestor buffer tree nodes for this information. In a typical setup
+ * the decoder passes the sample rate back to the alsa writer.
+ *
+ * \sa \ref btr_exec_up().
*/
unsigned sample_rate;
- snd_pcm_format_t sample_format;
- /**
- * The number of channels, given by command line option or the
- * decoder of the writer node group.
+ /*
+ * The sample format (8/16 bit, signed/unsigned, little/big endian) is
+ * determined in the same way as the \a sample_rate.
*/
+ snd_pcm_format_t sample_format;
+ /* The number of channels, again determined like \a sample_rate. */
unsigned channels;
struct timeval drain_barrier;
/* File descriptor for select(). */
goto fail;
ret = snd_output_buffer_open(&output_log);
if (ret == 0) {
- char *buf;
- PARA_INFO_LOG("dumping alsa configuration\n");
+ char *buf, *p;
+ size_t sz;
+ PARA_DEBUG_LOG("dumping alsa configuration\n");
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 */
+ snd_pcm_hw_params_dump(hwparams, output_log);
+ sz = snd_output_buffer_string(output_log, &buf);
+ for (p = buf; p < buf + sz;) {
+ char *q = memchr(p, '\n', buf + sz - p);
+ if (!q)
break;
- *p = '\0';
- PARA_INFO_LOG("%s\n", buf);
- buf = p + 1;
+ *q = '\0';
+ PARA_DEBUG_LOG("%s\n", p);
+ p = q + 1;
}
snd_output_close(output_log);
}
if (ret < 0) {
PARA_ERROR_LOG("could not get alsa poll fd: %s\n",
snd_strerror(-ret));
- t->error = -E_ALSA;
return;
}
pad->poll_fd = pfd.fd;
w->post_select = alsa_write_post_select;
w->parse_config_or_die = alsa_parse_config_or_die;
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
- };
+ w->help = (struct ggo_help)DEFINE_GGO_HELP(alsa_write);
alsa_write_cmdline_parser_free(&dummy);
}