openbsd-ports/games/quake2/patches/patch-src_snd_solaris_c
claudio 1804589d50 Use better defaults in baseq2 config.cfg for audio and cdrom devices.
From Juha Erkkila a long time ago. OK jasper@
2007-05-29 14:49:16 +00:00

174 lines
5.9 KiB
Plaintext

$OpenBSD: patch-src_snd_solaris_c,v 1.2 2007/05/29 14:49:16 claudio Exp $
--- src/snd_solaris.c.orig Mon Mar 15 13:50:39 2004
+++ src/snd_solaris.c Tue May 29 05:20:07 2007
@@ -27,12 +27,12 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston,
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
-#include <stropts.h>
#include <sys/types.h>
+# include <sys/ioctl.h>
#include <sys/audioio.h>
-#include "../client/client.h"
-#include "../client/snd_loc.h"
+#include "client.h"
+#include "snd_loc.h"
#define SND_DEBUG 0
@@ -77,7 +77,7 @@ qboolean SNDDMA_Init(struct sndinfo * s)
if (audio_fd < 0) {
- audio_fd = open(si->device->string, O_WRONLY);
+ audio_fd = open(si->device->string, O_RDWR);
if (audio_fd < 0) {
Com_Printf("Could not open %s: %s\n", si->device->string, strerror(errno));
@@ -96,7 +96,7 @@ qboolean SNDDMA_Init(struct sndinfo * s)
? AUDIO_ENCODING_LINEAR8
: AUDIO_ENCODING_LINEAR );
au_info.play.sample_rate = (int)si->speed->value;
- au_info.play.channels = (int)sndchannels->value;
+ au_info.play.channels = (int)si->channels->value;
if (ioctl(audio_fd, AUDIO_SETINFO, &au_info) == -1) {
Com_Printf("AUDIO_SETINFO failed: %s\n", strerror(errno));
@@ -112,7 +112,7 @@ qboolean SNDDMA_Init(struct sndinfo * s)
? AUDIO_ENCODING_LINEAR8
: AUDIO_ENCODING_LINEAR );
au_info.play.sample_rate = tryrates[i];
- au_info.play.channels = (int)sndchannels->value;
+ au_info.play.channels = (int)si->channels->value;
if (ioctl(audio_fd, AUDIO_SETINFO, &au_info) == 0)
break;
@@ -122,25 +122,25 @@ qboolean SNDDMA_Init(struct sndinfo * s)
if (i >= sizeof(tryrates)/sizeof(tryrates[0]))
return 0;
}
- dma.samplebits = au_info.play.precision;
- dma.channels = au_info.play.channels;
- dma.speed = au_info.play.sample_rate;
+ si->dma->samplebits = au_info.play.precision;
+ si->dma->channels = au_info.play.channels;
+ si->dma->speed = au_info.play.sample_rate;
/*
* submit some sound data every ~ 0.1 seconds, and try to buffer 2*0.1
* seconds in sound driver
*/
- samples = dma.channels * dma.speed / 10;
+ samples = si->dma->channels * si->dma->speed / 10;
for (i = 0; (1 << i) < samples; i++)
;
- dma.submission_chunk = 1 << (i-1);
+ si->dma->submission_chunk = 1 << (i-1);
DPRINTF("channels %d, speed %d, log2(samples) %d, submission chunk %d\n",
- dma.channels, dma.speed, i-1,
- dma.submission_chunk);
+ si->dma->channels, si->dma->speed, i-1,
+ si->dma->submission_chunk);
- dma.samples = QSND_NUM_CHUNKS * dma.submission_chunk;
- dma.buffer = calloc(dma.samples, dma.samplebits/8);
- if (dma.buffer == NULL) {
+ si->dma->samples = QSND_NUM_CHUNKS * si->dma->submission_chunk;
+ si->dma->buffer = calloc(si->dma->samples, si->dma->samplebits/8);
+ if (si->dma->buffer == NULL) {
Com_Printf("Could not alloc sound buffer\n");
return 0;
}
@@ -150,7 +150,7 @@ qboolean SNDDMA_Init(struct sndinfo * s)
au_info.play.samples = 0;
ioctl(audio_fd, AUDIO_SETINFO, &au_info);
- dma.samplepos = 0;
+ si->dma->samplepos = 0;
snd_inited = 1;
@@ -179,8 +179,8 @@ int SNDDMA_GetDMAPos(void)
return 0;
}
- s_pos = au_info.play.samples * dma.channels;
- return s_pos & (dma.samples - 1);
+ s_pos = au_info.play.samples * si->dma->channels;
+ return s_pos & (si->dma->samples - 1);
}
/*
@@ -194,7 +194,6 @@ void SNDDMA_Shutdown(void)
{
if (snd_inited) {
if (audio_fd >= 0) {
- ioctl(audio_fd, I_FLUSH, FLUSHW);
close(audio_fd);
audio_fd = -1;
}
@@ -211,7 +210,7 @@ Send sound to device if buffer isn't really the dma bu
*/
void SNDDMA_Submit(void)
{
- int samplebytes = dma.samplebits/8;
+ int samplebytes = si->dma->samplebits/8;
audio_info_t au_info;
int s_pos;
int chunk_idx;
@@ -221,10 +220,10 @@ void SNDDMA_Submit(void)
return;
if (last_chunk_idx == -1) {
- if (write(audio_fd, dma.buffer, dma.samples * samplebytes) != dma.samples * samplebytes)
+ if (write(audio_fd, si->dma->buffer, si->dma->samples * samplebytes) != si->dma->samples * samplebytes)
Com_Printf("initial write on audio device failed\n");
last_chunk_idx = 0;
- dma.samplepos = 0;
+ si->dma->samplepos = 0;
return;
}
@@ -247,30 +246,30 @@ void SNDDMA_Submit(void)
au_info.play.samples = 0;
ioctl(audio_fd, AUDIO_SETINFO, &au_info);
- if (write(audio_fd, dma.buffer, dma.samples * samplebytes) != dma.samples * samplebytes)
+ if (write(audio_fd, si->dma->buffer, si->dma->samples * samplebytes) != si->dma->samples * samplebytes)
Com_Printf("refill sound driver after underflow failed\n");
last_chunk_idx = 0;
- dma.samplepos = 0;
+ si->dma->samplepos = 0;
return;
}
- s_pos = au_info.play.samples * dma.channels;
- chunk_idx = (s_pos % dma.samples) / dma.submission_chunk;
+ s_pos = au_info.play.samples * si->dma->channels;
+ chunk_idx = (s_pos % si->dma->samples) / si->dma->submission_chunk;
- DPRINTF("HW DMA Pos=%u (%u), dma.samplepos=%u, play in=%d, last=%d\n",
- au_info.play.samples, s_pos, dma.samplepos,
+ DPRINTF("HW DMA Pos=%u (%u), si->dma->samplepos=%u, play in=%d, last=%d\n",
+ au_info.play.samples, s_pos, si->dma->samplepos,
chunk_idx, last_chunk_idx);
while (chunk_idx != last_chunk_idx) {
if (write(audio_fd,
- dma.buffer + dma.samplepos * samplebytes,
- dma.submission_chunk * samplebytes) != dma.submission_chunk * samplebytes) {
+ si->dma->buffer + si->dma->samplepos * samplebytes,
+ si->dma->submission_chunk * samplebytes) != si->dma->submission_chunk * samplebytes) {
Com_Printf("write error on audio device\n");
}
- if ((dma.samplepos += dma.submission_chunk) >= dma.samples)
- dma.samplepos = 0;
+ if ((si->dma->samplepos += si->dma->submission_chunk) >= si->dma->samples)
+ si->dma->samplepos = 0;
if (++last_chunk_idx >= QSND_NUM_CHUNKS)
last_chunk_idx = 0;