* decoder of the writer node group.
*/
unsigned channels;
+ struct timeval drain_barrier;
};
/* Install PCM software and hardware configuration. */
struct btr_node *btrn = wn->btrn;
char *data;
size_t bytes;
- snd_pcm_sframes_t frames, avail;
+ snd_pcm_sframes_t frames;
int ret;
again:
if (!pad->handle)
goto err;
/* wait until pending frames are played */
- avail = snd_pcm_avail_update(pad->handle);
- if (avail + 1000 > pad->buffer_frames)
+ if (pad->drain_barrier.tv_sec == 0) {
+ PARA_DEBUG_LOG("waiting for device to drain\n");
+ tv_add(now, &(struct timeval)EMBRACE(0, 200 * 1000),
+ &pad->drain_barrier);
+ return;
+ }
+ if (tv_diff(now, &pad->drain_barrier, NULL) > 0)
goto err;
- PARA_DEBUG_LOG("waiting for device to drain\n");
return;
}
if (!pad->handle) {