diff options
-rw-r--r-- | audio/out/ao_sdl.c | 1 | ||||
-rw-r--r-- | audio/out/pull.c | 9 |
2 files changed, 8 insertions, 2 deletions
diff --git a/audio/out/ao_sdl.c b/audio/out/ao_sdl.c index 6144918dfe..1390eb64d0 100644 --- a/audio/out/ao_sdl.c +++ b/audio/out/ao_sdl.c @@ -205,6 +205,7 @@ const struct ao_driver audio_out_sdl = { .uninit = uninit, .reset = reset, .resume = resume, + .reports_underruns = true, .priv_size = sizeof(struct priv), .priv_defaults = &(const struct priv) { .buflen = 0, // use SDL default diff --git a/audio/out/pull.c b/audio/out/pull.c index c6125bd8bc..985d6d9f67 100644 --- a/audio/out/pull.c +++ b/audio/out/pull.c @@ -153,8 +153,13 @@ int ao_read_data(struct ao *ao, void **data, int samples, int64_t out_time_us) int buffered_bytes = mp_ring_buffered(p->buffers[0]); bytes = MPMIN(buffered_bytes, full_bytes); - if (full_bytes > bytes && !atomic_load(&p->draining)) - atomic_fetch_add(&p->underflow, (full_bytes - bytes) / ao->sstride); + if (full_bytes > bytes && !atomic_load(&p->draining)) { + if (ao->driver->reports_underruns) { + ao_underrun_event(ao); + } else { + atomic_fetch_add(&p->underflow, (full_bytes - bytes) / ao->sstride); + } + } if (bytes > 0) atomic_store(&p->end_time_us, out_time_us); |