From 7c7133e09ded0f3fc004737be0443eb9c4dae4c8 Mon Sep 17 00:00:00 2001 From: "Jared D. McNeill" Date: Thu, 22 Jan 2009 02:24:04 +0100 Subject: NetBSD sometimes doesn't know SNDCTL_DSP_GETODELAY Signed-off-by: Lennart Poettering --- src/modules/oss/module-oss.c | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/modules/oss/module-oss.c b/src/modules/oss/module-oss.c index f277d63d..7271a087 100644 --- a/src/modules/oss/module-oss.c +++ b/src/modules/oss/module-oss.c @@ -71,6 +71,11 @@ #include #include +#if defined(__NetBSD__) && !defined(SNDCTL_DSP_GETODELAY) +#include +#include +#endif + #include "oss-util.h" #include "module-oss-symdef.h" @@ -399,13 +404,27 @@ static pa_usec_t io_sink_get_latency(struct userdata *u) { if (u->use_getodelay) { int arg; - +#if defined(__NetBSD__) && !defined(SNDCTL_DSP_GETODELAY) +#if defined(AUDIO_GETBUFINFO) + struct audio_info info; + if (syscall(SYS_ioctl, u->fd, AUDIO_GETBUFINFO, &info) < 0) { + pa_log_info("Device doesn't support AUDIO_GETBUFINFO: %s", pa_cstrerror(errno)); + u->use_getodelay = 0; + } else { + arg = info.play.seek + info.blocksize / 2; + r = pa_bytes_to_usec((size_t) arg, &u->sink->sample_spec); + } +#else + pa_log_info("System doesn't support AUDIO_GETBUFINFO"); + u->use_getodelay = 0; +#endif +#else if (ioctl(u->fd, SNDCTL_DSP_GETODELAY, &arg) < 0) { pa_log_info("Device doesn't support SNDCTL_DSP_GETODELAY: %s", pa_cstrerror(errno)); u->use_getodelay = 0; } else r = pa_bytes_to_usec((size_t) arg, &u->sink->sample_spec); - +#endif } if (!u->use_getodelay && u->use_getospace) { -- cgit