- Bump PORTREVISION.

- Remove FreeBSD 4.x support (USE_GCC=3.4+).
- Fix various sound problems, including crashes [1].

Obtained from:	games/q2p [1]
This commit is contained in:
Alejandro Pulver 2007-09-14 01:16:49 +00:00
parent 4f7184be10
commit a9c3759ed3
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=199451
4 changed files with 2166 additions and 8 deletions

View file

@ -7,7 +7,7 @@
PORTNAME= qudos
PORTVERSION= 0.40.1
PORTREVISION= 5
PORTREVISION= 6
CATEGORIES= games
MASTER_SITES= http://qudos.quakedev.com/linux/quake2/engines/QuDos/
DISTNAME= QuDos-${PORTVERSION}-src
@ -19,7 +19,6 @@ MAINTAINER= alepulver@FreeBSD.org
COMMENT= Enhaced OpenGL only Quake II engine
USE_BZIP2= yes
USE_GCC= 3.4+
USE_GMAKE= yes
OPTIONS= 3ZB2 "Build 3zb2 modification (bots)" on \

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,173 @@
--- src/unix/snd_oss.c.orig Thu Sep 13 20:13:40 2007
+++ src/unix/snd_oss.c Thu Sep 13 20:17:00 2007
@@ -25,12 +25,7 @@
#include <sys/mman.h>
#include <sys/shm.h>
#include <sys/wait.h>
-#if defined(__FreeBSD__)
#include <sys/soundcard.h>
-#endif
-#if defined(__linux__)
-#include <linux/soundcard.h>
-#endif
#include <stdio.h>
#include "../client/client.h"
@@ -43,7 +38,12 @@
struct sndinfo * si;
-static int tryrates[] = { 48000, 44100, 22050, 11025, 8000 };
+static int tryrates[] = {
+ 48000,
+ 44100,
+ 22050,
+ 11025
+};
qboolean
SNDDMA_Init(struct sndinfo * s)
@@ -53,22 +53,22 @@
int fmt;
int tmp;
int i;
- struct audio_buf_info info;
+ struct audio_buf_info info;
int caps;
-
+
if (snd_inited)
return 1;
snd_inited = 0;
si = s;
-
+
+#if defined (__linux__)
if(!strcmp(si->snddevice->string, "default")) //silly alsa default
si->snddevice->string = "/dev/dsp";
-
+#endif
/*
- * open /dev/dsp, confirm capability to mmap, and get size of dma
- * buffer
+ * open /dev/dsp, confirm capability to mmap, and get size of dma buffer
*/
if (audio_fd == -1) {
audio_fd = open(si->snddevice->string, O_RDWR);
@@ -100,8 +100,8 @@
audio_fd = -1;
return 0;
}
- /* set sample bits & speed */
-
+
+ /* set sample bits & speed */
si->dma->samplebits = (int)si->sndbits->value;
if (si->dma->samplebits != 16 && si->dma->samplebits != 8) {
ioctl(audio_fd, SNDCTL_DSP_GETFMTS, &fmt);
@@ -139,22 +139,11 @@
}
si->dma->speed = (int)si->sndspeed->value;
-
- if (!si->dma->speed) {
-
- if (si->s_khz->value == 48) {
- si->dma->speed = 48000;
- }
- else if (si->s_khz->value == 44) {
- si->dma->speed = 44100;
- }
- else if (si->s_khz->value == 22) {
- si->dma->speed = 22050;
- }
- else {
- si->dma->speed = 11025;
- }
- si->dma->speed = 48000; /** Uhh **/
+ if (!si->dma->speed) {
+ if (si->s_khz->value == 48) si->dma->speed = 48000;
+ else if (si->s_khz->value == 44) si->dma->speed = 44100;
+ else if (si->s_khz->value == 22) si->dma->speed = 22050;
+ else si->dma->speed = 11025;
}
if (!si->dma->speed) {
@@ -163,6 +152,7 @@
break;
si->dma->speed = tryrates[i];
}
+
si->dma->channels = (int)si->sndchannels->value;
if (si->dma->channels < 1 || si->dma->channels > 2)
si->dma->channels = 2;
@@ -177,8 +167,9 @@
si->dma->channels);
close(audio_fd);
audio_fd = -1;
- return 0;
+ return 0;
}
+
if (tmp)
si->dma->channels = 2;
else
@@ -204,7 +195,6 @@
si->dma->submission_chunk = 1;
/* memory map the dma buffer */
-
if (!si->dma->buffer)
si->dma->buffer = (unsigned char *)mmap(NULL, info.fragstotal
* info.fragsize, PROT_WRITE, MAP_FILE|MAP_SHARED, audio_fd, 0);
@@ -215,8 +205,8 @@
audio_fd = -1;
return 0;
}
- /* toggle the trigger & start her up */
+ /* toggle the trigger & start her up */
tmp = 0;
rc = ioctl(audio_fd, SNDCTL_DSP_SETTRIGGER, &tmp);
if (rc < 0) {
@@ -235,12 +225,12 @@
audio_fd = -1;
return 0;
}
-
-
- si->Com_Printf("\nInitializing OSS Sound System\n");
- si->Com_Printf("Buffer size: %d\n", info.fragstotal * info.fragsize);
-
+
si->dma->samplepos = 0;
+
+ si->Com_Printf("Initializing OSS Sound System\n");
+ si->Com_Printf("Buffer size: %d\n", info.fragstotal * info.fragsize);
+
snd_inited = 1;
return 1;
}
@@ -262,11 +252,6 @@
return 0;
}
- /*
- * dma.samplepos = (count.bytes / (dma.samplebits / 8)) &
- * (dma.samples-1);
- */
- /* fprintf(stderr, "%d \r", count.ptr); */
si->dma->samplepos = count.ptr / (si->dma->samplebits / 8);
return si->dma->samplepos;
@@ -286,7 +271,7 @@
snd_inited = 0;
}
#else
- printf ("SNDDMA_Shutdown\n");
+ si->Com_Printf("SNDDMA_Shutdown\n");
if (snd_inited) {
munmap (si->dma->buffer, si->dma->samples *si->dma->samplebits / 8);
si->dma->buffer = 0L;

View file

@ -0,0 +1,207 @@
--- src/unix/snd_sdl.c.orig Thu Sep 13 20:13:49 2007
+++ src/unix/snd_sdl.c Thu Sep 13 20:17:03 2007
@@ -1,47 +1,47 @@
/*
- * snd_sdl.c
- *
- * Sound code taken from SDLQuake and modified to work with Quake2 Robert Bäuml
- * 2001-12-25
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option)
- * any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.
- *
- * See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to:
- *
- * Free Software Foundation, Inc. 59 Temple Place - Suite 330 Boston, MA
- * 02111-1307, USA
- *
- * $Id: snd_sdl.c,v 1.2 2002/02/09 20:29:38 relnev Exp $
- */
+ snd_sdl.c
+
+ Sound code taken from SDLQuake and modified to work with Quake2
+ Robert ¿½ml 2001-12-25
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to:
+
+ Free Software Foundation, Inc.
+ 59 Temple Place - Suite 330
+ Boston, MA 02111-1307, USA
+
+ $Id: snd_sdl.c,v 1.2 2002/02/09 20:29:38 relnev Exp $
+*/
#include "SDL.h"
#include "../client/client.h"
#include "../client/snd_loc.h"
-static int snd_inited;
-static dma_t *shm;
+int snd_inited = 0;
struct sndinfo * si;
static void
paint_audio (void *unused, Uint8 * stream, int len)
{
- if (shm) {
- shm->buffer = stream;
- shm->samplepos += len / (shm->samplebits / 4);
- /* Check for samplepos overflow? */
- si->S_PaintChannels (shm->samplepos);
+ if (snd_inited) {
+ si->dma->buffer = stream;
+ si->dma->samplepos += len / (si->dma->samplebits / 4);
+ // Check for samplepos overflow?
+ si->S_PaintChannels (si->dma->samplepos);
}
}
@@ -50,6 +50,7 @@
{
SDL_AudioSpec desired, obtained;
int desired_bits, freq;
+ char drivername[128];
if (SDL_WasInit(SDL_INIT_EVERYTHING) == 0) {
if (SDL_Init(SDL_INIT_AUDIO) < 0) {
@@ -68,19 +69,11 @@
/* Set up the desired format */
freq = si->s_khz->value;
-
- if (freq == 48) {
- desired.freq = 48000;
- }
- else if (freq == 44) {
- desired.freq = 44100;
- }
- else if (freq == 22) {
- desired.freq = 22050;
- }
- else {
- desired.freq = 11025;
- }
+ if (freq == 48) desired.freq = 48000;
+ else if (freq == 44) desired.freq = 44100;
+ else if (freq == 22) desired.freq = 22050;
+ else if (freq == 11) desired.freq = 11025;
+ else desired.freq = 44100;
switch (desired_bits) {
case 8:
@@ -96,20 +89,14 @@
si->Com_Printf ("Unknown number of audio bits: %d\n", desired_bits);
return 0;
}
+
desired.channels = si->sndchannels->value;
-
- if (desired.freq == 48000) {
- desired.samples = 4096;
- }
- else if (desired.freq == 44100) {
- desired.samples = 2048;
- }
- else if (desired.freq == 22050) {
- desired.samples = 1024;
- }
- else {
- desired.samples = 512;
- }
+
+ if (desired.freq == 48000) desired.samples = 4096;
+ else if (desired.freq == 44100) desired.samples = 2048;
+ else if (desired.freq == 22050) desired.samples = 1024;
+ else if (desired.freq == 11025) desired.samples = 512;
+ else desired.samples = 2048;
desired.callback = paint_audio;
@@ -133,7 +120,6 @@
/* Supported */
break;
}
- /* Unsupported, fall through */ ;
default:
/* Not supported -- force SDL to do our bidding */
SDL_CloseAudio ();
@@ -147,16 +133,21 @@
SDL_PauseAudio (0);
/* Fill the audio DMA information block */
- shm = si->dma;
- shm->samplebits = (obtained.format & 0xFF);
- shm->speed = obtained.freq;
- shm->channels = obtained.channels;
- shm->samples = obtained.samples * shm->channels;
- shm->samplepos = 0;
- shm->submission_chunk = 1;
- shm->buffer = NULL;
+ si->dma->samplebits = (obtained.format & 0xFF);
+ si->dma->speed = obtained.freq;
+ si->dma->channels = obtained.channels;
+ si->dma->samples = obtained.samples * si->dma->channels;
+ si->dma->samplepos = 0;
+ si->dma->submission_chunk = 1;
+ si->dma->buffer = NULL;
- si->Com_Printf("\nInitializing SDL Sound System\n");
+ if (SDL_AudioDriverName(drivername, sizeof (drivername)) == NULL)
+ strcpy(drivername, "(UNKNOWN)");
+
+ si->Com_Printf("Initializing SDL Sound System\n");
+ si->Com_Printf("Audio driver: %s\n", drivername);
+ si->Com_Printf("DMA buffer address: 0x%x \n", (int) si->dma->buffer);
+ si->Com_Printf("Channels: %5d\n", MAX_CHANNELS);
snd_inited = 1;
return 1;
@@ -165,12 +156,13 @@
int
SNDDMA_GetDMAPos (void)
{
- return shm->samplepos;
+ return si->dma->samplepos;
}
void
SNDDMA_Shutdown (void)
{
+ si->Com_Printf("SNDDMA_Shutdown\n");
if (snd_inited) {
SDL_CloseAudio ();
snd_inited = 0;
@@ -183,8 +175,8 @@
}
/*
- SNDDMA_Submit
- Send sound to device if buffer isn't really the dma buffer
+SNDDMA_Submit
+Send sound to device if buffer isn't really the dma buffer
*/
void
SNDDMA_Submit (void)