if (!pad->handle)
return 1;
if (wn->btrn) {
- size_t sz = btr_get_input_queue_size(wn->btrn);
- if (sz < pad->bytes_per_frame) {
- if (!btr_no_parent(wn->btrn))
- return 1;
+ int ret = btr_node_status(wn->btrn, wn->min_iqs);
+ if (ret == 0)
+ return 1;
+ if (ret < 0) {
underrun = 10;
goto timeout;
}
static void alsa_write_pre_select_btr(struct sched *s, struct task *t)
{
struct writer_node *wn = container_of(t, struct writer_node, task);
- t->error = alsa_write_pre_select(s, wn);
+ alsa_write_pre_select(s, wn);
}
static void xrun(snd_pcm_t *handle)
snd_pcm_close(pad->handle);
snd_config_update_free_global();
}
+ alsa_cmdline_parser_free(wn->conf);
free(pad);
}
again:
t->error = 0;
- ret = prepare_writer_node(wn);
+ ret = btr_node_status(btrn, wn->min_iqs);
if (ret == 0)
return;
+ btr_merge(btrn, wn->min_iqs);
bytes = btr_next_buffer(btrn, &data);
if (bytes < pad->bytes_per_frame) { /* eof */
assert(btr_no_parent(btrn));
ret = -E_ALSA_WRITE;
err:
assert(ret < 0);
- btr_del_node(btrn);
- alsa_close(wn);
t->error = ret;
}