Commit Graph

82 Commits

Author SHA1 Message Date
nia
ab8a3679da ossaudio: removed outdated comment 2020-04-20 12:01:44 +00:00
nia
8e9e149d7d ossaudio: Implement SNDCTL_DSP_(SET|GET)TRIGGER. 2020-04-19 13:44:50 +00:00
nia
d4490f2a9c ossaudio: Make SNDCTL_DSP_[GET|SET][PLAY|RECORD]VOL closer to OSSv4
Problems in the previous code include returning values in the 0-255
range NetBSD uses instead of the 0-100 range OSSv4 expects, using
AUDIO_GETBUFINFO (which doesn't even return the mixer bits), and
not encoding channels as specified: "level=(left)|(right << 8)".

In reality, setting the gain in this way (through /dev/audio rather
than /dev/mixer) doesn't seem to work properly, and the mixer-set
value seems to be retained.

However, these changes at least ensure that the return values are
correct and the balance is set correctly.

I've only found one application using this API (audio/audacious), and
OSSv4 support in it is currently disabled precisely because it breaks
when it attempts to set the track volume using it.
2020-04-19 11:27:40 +00:00
nia
87706eec7d ossaudio: If the user's channel count is rejected, use the hardware count 2020-04-15 16:39:06 +00:00
nia
0eb796bf71 ossaudio: Make SNDCTL_DSP_SETFMT conform with OSSv4.
The OSSv4 spec says we shouldn't really error if an invalid format is
chosen by an application. Things are especially likely to be confused
if we return MULAW, since in OSSv4 terms that means that's the native
hardware format. Instead, set and return the current hardware format
if an invalid format is chosen.

For the 24-bit sample formats, note that the NetBSD kernel currently
can't handle them in its default configuration, and will return an error
code if you attempt to use them. So, if an applicaton requests 24-bit PCM,
promote it to 32-bit PCM. According to the spec, this is valid and
applications should be checking the return value anyway.

In the Linux compat layer, we just use S16LE as a fallback. The OSSv3
headers that are still being shipped with Linux don't contain definitions
for fancier formats and we can reasonably expect all applications to
support S16LE.
2020-04-15 15:25:33 +00:00
nia
6476938d92 ossaudio: Make SNDCTL_DSP_SPEED more robust when using invalid rates.
From the perspective of reading the OSSv4 specification, NetBSD's
behaviour when an invalid sample rate is set makes no sense at all:
AUDIO_SETINFO simply returns an error code, and then we immediately
fall through to getting the sample rate, which is still set to the
legacy default of 8000 Hz.

Instead, what OSS applications generally expect is that they will be
able to receive the actual hardware sample rate. This is very, very
unlikely to be 8000 Hz on a modern machine.

No functional change when setting a sample rate between the supported
rates of 1000 and 192000 Hz. When a rate outside this range is requested,
the hardware rate is returned (on modern hardware, generally always 48000
Hz or a multiple of 48000 Hz).
2020-04-15 14:54:34 +00:00
isaki
5b3dd8b1b9 Use record field for recording even on
SNDCTL_DSP_STEREO, SNDCTL_DSP_SETFMT, and SNDCTL_DSP_CHANNELS.
2019-11-03 11:13:45 +00:00
isaki
d97643b742 Use record.sample_rate for recording on SNDCTL_DSP_SPEED.
Fix PR lib/54667.
2019-11-02 11:48:23 +00:00
isaki
8b1980912d Fix minor bugs of SNDCTL_DSP_GETISPACE.
- hiwat is playback-only parameter.
- 'bytes' should not be rounded down.
2019-02-02 04:52:16 +00:00
isaki
6b4163e9ca Revert a wrong SNDCTL_DSP_GETOSPACE part of rev1.33.
- 'fragments' is the number of full free blocks and should not be
  negative value.
- 'bytes' should not be rounded down.
It makes mpv work correctly (fixes a second half of kern/53028).
Reviewed by mlelstv@
2019-01-29 11:54:02 +00:00
mrg
bfe7e5d8b3 memset to zero the entire array, not just 8 bytes of it.
picked up by gcc7's checker that the array size has not
been multipled by the member size.

here, we had 8 but should have had 8 * sizeof(int).

XXX: real bug - pullup-7, pullup-8
2019-01-23 00:08:06 +00:00
nat
e5d1b604d5 ABI of libossaudio did not change, so there was no need to bump the version
number.

Pointed out by mrg@
2017-03-24 11:46:52 +00:00
nat
dab5456581 Calculate GETISPACE/GETOSPACE properly.
Bump version.

Addresses PR kern/51999.
2017-03-23 15:50:48 +00:00
maya
39d6057df2 speed limit is 80 (missed this one) 2017-02-10 08:52:04 +00:00
maya
6ac4e27787 strncpy->strlcpy. use sizeof instead of numbers. 2017-02-10 08:50:27 +00:00
nat
141dc004bd Add missing defines for 16, 24 and 32 bit NE and OE formats.
Add the ability to set 24 and 32 bit precision.

This commit was approved by wiz@
2014-09-09 10:45:18 +00:00
nat
dc2ecd830b libossaudio minor version bump to signify new ioctls. 2014-05-18 10:36:34 +00:00
nat
a8ba8ad76b Adds ioctls and defines for OSSv4 compatibility.
The ioctl definitions and accompanying structures were
taken from FreeBSD's soundcard.h, hopefully providing
some binary compatibility.

The ioctls are as follows:
	SNDCTL_SYSINFO: Returns a structure containing
		details about the audio device.
	SNDCTL_ENGINEINFO - SNDCTL_AUDIOINFO: Returns a
		structure with playback/recording
		characteristics.
	SNDCTL_DSP_GETPLAYVOL, SNDCTL_DSP_SETPLAYVOL,
	SNDCTL_DSP_GETRECVOL, SNDCTL_DSP_SETRECVOL:
		Retrieves/Sets Playback/Recording volume.
	SNDCTL_DSP_SKIP - SNDCTL_DSP_SILENCE: These ioctls
		were intended to manipulate the underlying
		audio buffer skip or insert silence.  These
		return EINVAL.

SOUND_VERSION is unchanged, but is definable,  It will be
changed when the mixer OSSv4 ioctls are written.

Addresses PR 46611
This commit was approved by wiz@.
2014-05-17 12:38:42 +00:00
christos
a4deae0de5 fix typo, WARNS=5 2012-05-05 15:57:45 +00:00
christos
2cb8b46c96 avoid using cpp variadic macros and explain why. 2012-05-05 15:04:57 +00:00
christos
73e25da1dd - match regular ioctl prototype (3rd argument is optional)
- fix lint issues
2012-05-04 11:48:12 +00:00
matt
572e1c8587 These directories don't handle WARNS=5 2012-03-21 10:08:30 +00:00
christos
76389f09e9 fix non-portable shift. 2011-09-13 19:10:18 +00:00
jmcneill
5fc89c79bc Add support for AFMT_AC3 2011-09-06 01:19:34 +00:00
wiz
5c82067abe Remove USETBL, now that man page does not need tbl any longer. 2009-03-12 13:52:47 +00:00
joerg
8c2253d6e8 Use .Bl -column instead of tbl(1) for the device mapping list.
OK jmcneill@
2009-03-12 12:33:46 +00:00
jmcneill
1c31e53c25 Bump date for previous. 2009-02-03 12:48:00 +00:00
jmcneill
5cc75830ea Add a table that describes the mappings from native audio mixer names
to their OSS equivalents.
2009-02-03 12:46:13 +00:00
christos
46edb91e9f bump shared libraries. 2009-01-11 03:07:47 +00:00
martin
11a6dbe728 Convert TNF licenses to new 2 clause variant 2008-04-30 13:10:46 +00:00
martin
ce099b4099 Remove clause 3 and 4 from TNF licenses 2008-04-28 20:22:51 +00:00
bjs
22c6c5ebca s/prototyoe/prototype/ 2008-03-15 20:18:20 +00:00
drochner
754fc2622c Set the number of record and play channels individually -- currently
we try to set both in one ioctl, to the same value, which fails if not
both record and play direction support that many channels. (Having
more play than record channels is common these days.)
This does likely address part of the problem described in PR pkg/35444
by Mihai Chelaru, and it helped Matthew R. Green about half a year
ago -- see the thread in tech-misc in April.
2007-11-08 20:27:25 +00:00
mlelstv
6abb2a41f4 Implement OSS_SNDCTL_DSP_GETODELAY and provide a no-op function
for OSS_SNDCTL_DSP_PROFILE.
2007-09-18 22:57:31 +00:00
joerg
5ccf1c578a Add a new ioctl AUDIO_GETBUFINFO. It works like AUDIO_GETINFO, but
doesn't obtain the ports, gain and balance related parameters.
Those generally require reading from the hardware and therefore are much
more expensive to obtain. Modify OSS emulation to use the new ioctl
where possible.

This reduces CPU usage of mplayer during mp3 playback with my Thinkpad
from 20% to < 1% and from 50% to 20% during Xvid playback.

Review and comments from jmcneill@
2007-06-11 13:05:46 +00:00
lukem
f9d230b4f6 appease gcc -Wuninitialized. some delint 2005-06-01 11:22:18 +00:00
drochner
f2a3f79f1c work around a prototype conflict by including ioctl.h
before we redefile ioctl()
2005-02-09 18:02:53 +00:00
perry
7bcd7064be de-__P 2005-02-04 16:14:21 +00:00
kent
b285c03873 getdevinfo():
If a mixer item does not match with AudioNsomething, check whether
it ends with '.' + AudioNsomething.  PR#15441
2004-11-18 14:02:42 +00:00
grant
86f70dccd2 drop whitespace 2003-11-18 22:42:04 +00:00
wiz
472351e13d Use
.In header.h
instead of
.Fd #include \*[Lt]header.h\*[Gt]
Much easier to read and write, and supported by groff for ages.
Okayed by ross.
2003-04-16 13:34:34 +00:00
lukem
8bf240ccae use __RCSID() 2003-03-09 01:03:54 +00:00
jdolecek
98cb17d023 add support for SNDCTL_DSP_SETDUPLEX ioctl to ossaudio emulation code
code provided by Andreas Wrede in PR kern/19793
2003-01-12 08:20:05 +00:00
wiz
57a4de98d0 New sentence, new line. From Robert Elz. 2002-10-01 19:26:58 +00:00
wiz
796338fdc4 Add SOUND_MASK_* for the last SOUND_MIXER_* values that didn't have any. 2002-05-27 14:42:15 +00:00
wiz
e63f7d735b Improve markup, sort sections. 2002-02-20 11:38:02 +00:00
ross
814f296b77 Generate <>& symbolically. 2002-02-07 07:00:09 +00:00
kleink
0f83741fa0 Determine the 'native' endianness using _BYTE_ORDER from
<machine/endian_machdep.h>.

The previous method of wrapping a definition of _POSIX_SOURCE around the
inclusion of other headers to reduce namespace pollution had the
side-effect of not all required identifiers being defined when included
thereafter by the application itself (due to multiple-inclusion protection),
and is not blessed by that standard.
2002-01-11 12:11:09 +00:00
mycroft
cbfac6596e Make SNDCTL_DSP_POST a nop. It's explicitly *not* supposed to sleep, and as
it's merely advisory (and in fact is implemented as a nop in the OSS->ALSA
shim), it should be safe to ignore it.
2001-12-24 00:10:46 +00:00
kim
b399dad6eb Map OSS mixer device "line1" to native mixer device "aux". 2001-07-08 22:30:15 +00:00