Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/lib/libossaudio ossaudio(3): Add SNDCTL_DSP_CURRENT_(I|O)PTR
details: https://anonhg.NetBSD.org/src/rev/7181063f520b
branches: trunk
changeset: 956024:7181063f520b
user: nia <nia%NetBSD.org@localhost>
date: Mon Oct 19 09:01:24 2020 +0000
description:
ossaudio(3): Add SNDCTL_DSP_CURRENT_(I|O)PTR
In OSSv4 these are supposed to avoid the wrapping problems with the
older GET(I|O)PTR ioctls but we don't quite get the same benefit here.
XXX: We could probably fake it by maintaining some state in-between calls.
diffstat:
lib/libossaudio/ossaudio.c | 25 +++++++++++++++++++++++--
lib/libossaudio/soundcard.h | 10 +++++++++-
2 files changed, 32 insertions(+), 3 deletions(-)
diffs (84 lines):
diff -r 6636689cc9c3 -r 7181063f520b lib/libossaudio/ossaudio.c
--- a/lib/libossaudio/ossaudio.c Mon Oct 19 07:44:52 2020 +0000
+++ b/lib/libossaudio/ossaudio.c Mon Oct 19 09:01:24 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: ossaudio.c,v 1.49 2020/10/17 23:23:06 nia Exp $ */
+/* $NetBSD: ossaudio.c,v 1.50 2020/10/19 09:01:24 nia Exp $ */
/*-
* Copyright (c) 1997, 2020 The NetBSD Foundation, Inc.
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: ossaudio.c,v 1.49 2020/10/17 23:23:06 nia Exp $");
+__RCSID("$NetBSD: ossaudio.c,v 1.50 2020/10/19 09:01:24 nia Exp $");
/*
* This is an Open Sound System compatibility layer, which provides
@@ -121,6 +121,7 @@
int perrors, rerrors;
static int totalperrors = 0;
static int totalrerrors = 0;
+ oss_count_t osscount;
int idat, idata;
int retval;
@@ -577,6 +578,16 @@
cntinfo.ptr = tmpoffs.offset;
*(struct count_info *)argp = cntinfo;
break;
+ case SNDCTL_DSP_CURRENT_IPTR:
+ retval = ioctl(fd, AUDIO_GETBUFINFO, &tmpinfo);
+ if (retval < 0)
+ return retval;
+ /* XXX: 'samples' may wrap */
+ memset(osscount.filler, 0, sizeof(osscount.filler));
+ osscount.samples = tmpinfo.record.samples;
+ osscount.fifo_samples = tmpinfo.record.seek;
+ *(oss_count_t *)argp = osscount;
+ break;
case SNDCTL_DSP_GETOPTR:
retval = ioctl(fd, AUDIO_GETOOFFS, &tmpoffs);
if (retval < 0)
@@ -586,6 +597,16 @@
cntinfo.ptr = tmpoffs.offset;
*(struct count_info *)argp = cntinfo;
break;
+ case SNDCTL_DSP_CURRENT_OPTR:
+ retval = ioctl(fd, AUDIO_GETBUFINFO, &tmpinfo);
+ if (retval < 0)
+ return retval;
+ /* XXX: 'samples' may wrap */
+ memset(osscount.filler, 0, sizeof(osscount.filler));
+ osscount.samples = tmpinfo.play.samples;
+ osscount.fifo_samples = tmpinfo.play.seek;
+ *(oss_count_t *)argp = osscount;
+ break;
case SNDCTL_DSP_SETPLAYVOL:
setvol(fd, INTARG, false);
/* FALLTHRU */
diff -r 6636689cc9c3 -r 7181063f520b lib/libossaudio/soundcard.h
--- a/lib/libossaudio/soundcard.h Mon Oct 19 07:44:52 2020 +0000
+++ b/lib/libossaudio/soundcard.h Mon Oct 19 09:01:24 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: soundcard.h,v 1.26 2020/10/17 23:23:06 nia Exp $ */
+/* $NetBSD: soundcard.h,v 1.27 2020/10/19 09:01:24 nia Exp $ */
/*-
* Copyright (c) 1997, 2020 The NetBSD Foundation, Inc.
@@ -326,6 +326,14 @@
#define SNDCTL_DSP_SILENCE _IO ('P',32)
#define SNDCTL_DSP_COOKEDMODE _IOW ('P',33, int)
#define SNDCTL_DSP_GETERROR _IOR ('P',34, struct audio_errinfo)
+#define SNDCTL_DSP_CURRENT_IPTR _IOR ('P',35, oss_count_t)
+#define SNDCTL_DSP_CURRENT_OPTR _IOR ('P',36, oss_count_t)
+
+typedef struct {
+ long long samples;
+ int fifo_samples;
+ int filler[32]; /* "Future use" */
+} oss_count_t;
typedef struct audio_errinfo {
int play_underruns;
Home |
Main Index |
Thread Index |
Old Index