-/**
- * push out pcm frames
- * \param data pointer do data to be written
- * \param nbytes number of bytes (not frames)
- *
- * \return Number of bytes written, -E_ALSA_WRITE on errors.
- */
-static int alsa_write(char *data, size_t nbytes, struct writer_node *wn)
+static int alsa_write_pre_select(struct sched *s, struct writer_node *wn)
+{
+ struct private_alsa_data *pad = wn->private_data;
+ struct writer_node_group *wng = wn->wng;
+ struct timeval diff;
+
+ if (*wng->loaded < pad->bytes_per_frame)
+ return 1;
+ if (tv_diff(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 = 1;
+ }
+ return 1;
+// PARA_INFO_LOG("timeout: %lu\n", tv2ms(&s->timeout));
+}
+
+static int alsa_write_post_select(__a_unused struct sched *s,
+ struct writer_node *wn)