openbsd-ports/audio/xmp/patches/patch-src_drivers_solaris_c

81 lines
1.9 KiB
Plaintext
Raw Normal View History

$OpenBSD: patch-src_drivers_solaris_c,v 1.1 2001/04/05 19:31:42 espie Exp $
--- src/drivers/solaris.c.orig Mon May 18 06:21:17 1998
+++ src/drivers/solaris.c Thu Apr 5 21:23:52 2001
@@ -55,7 +55,9 @@ static void dummy () { }
static char *help[] = {
"gain=val", "Audio output gain (0 to 255)",
+#if !defined(__OpenBSD__)
"port={s|h|l}", "Audio port (s[peaker], h[eadphones], l[ineout])",
+#endif
"buffer=val", "Audio buffer size (default is 32768)",
NULL
};
@@ -86,6 +88,50 @@ struct xmp_drv_info drv_solaris = {
NULL
};
+#if defined(__OpenBSD__)
+static int setaudio (struct drv_config *cfg)
+{
+ audio_info_t ainfo;
+ int gain = 128;
+ int bsize = 32 * 1024;
+ char *token;
+ char **parm = cfg->parm;
+
+ parm_init ();
+ chkparm1 ("gain", gain = atoi (token));
+ chkparm1 ("buffer", bsize = atoi (token));
+ parm_end ();
+
+ if (gain < AUDIO_MIN_GAIN)
+ gain = AUDIO_MIN_GAIN;
+ if (gain > AUDIO_MAX_GAIN)
+ gain = AUDIO_MAX_GAIN;
+
+ AUDIO_INITINFO (&ainfo);
+
+ ainfo.play.sample_rate = cfg->rate;
+ ainfo.play.channels = cfg->mode + 1;
+ ainfo.play.precision = cfg->fmt & MIX_16BIT ? 16 : 8;
+ ainfo.play.encoding = cfg->fmt & MIX_16BIT ? AUDIO_ENCODING_SLINEAR : AUDIO_ENCODING_ULINEAR;
+ ainfo.play.buffer_size = bsize;
+
+ if (ioctl (audio_fd, AUDIO_SETINFO, &ainfo) == -1) {
+ close (audio_fd);
+ return 0;
+ }
+
+ AUDIO_INITINFO (&ainfo);
+ ainfo.play.gain = gain;
+ ioctl(audio_fd, AUDIO_SETINFO, &ainfo);
+
+ drv_solaris.description = "OpenBSD Generic Audio";
+
+ cfg->mode++;
+
+ return 1;
+}
+
+#else
static int setaudio (struct drv_config *cfg)
{
@@ -150,10 +196,15 @@ static int setaudio (struct drv_config *
return 1;
}
+#endif
static int init (struct drv_config *cfg)
{
+#if defined(__OpenBSD__)
+ audio_fd = open ("/dev/sound", O_WRONLY);
+#else
audio_fd = open ("/dev/audio", O_WRONLY);
+#endif
if (audio_fd == -1)
return 0;