- if (!written) {
- if (loaded < prebuf_size)
- goto read;
- if (start_time && start_time_in_future(&delay)) {
- do_initial_delay(&delay);
- start_time = NULL;
+ need_more_writes = 1;
+ while (need_more_writes) {
+ need_more_writes = 0;
+ for (i = 0; i < 1; i++) {
+ unsigned char *p = audiobuf + written[i];
+ wn = &writer_nodes[i];
+ if (!i)
+ min_written = written[i];
+ else
+ min_written = PARA_MIN(min_written, written[i]);
+ if (loaded < wn->chunk_bytes + written[i])
+ continue;
+ ret = wn->writer->write(p, wn->chunk_bytes, wn);
+ if (ret < 0)
+ goto out;
+ if (ret != wn->chunk_bytes)
+ PARA_WARNING_LOG("short write: %d/%d", ret,
+ wn->chunk_bytes);
+ written[i] += ret;
+ need_more_writes = 1;