]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - snd_oss.c
R_Q1BSP_GetLightInfo now uses BSP tree recursion as an optimization for a small speed...
[xonotic/darkplaces.git] / snd_oss.c
index ef07d0dfb2c243b8cc5fd7bb386e7bd0ad9bff0c..eef8e62c9681a851357b69ec8ddba4e79e3b7ee4 100644 (file)
--- a/snd_oss.c
+++ b/snd_oss.c
@@ -17,6 +17,9 @@ along with this program; if not, write to the Free Software
 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
 */
+
+// OSS module, used by Linux and FreeBSD
+
 #include <unistd.h>
 #include <fcntl.h>
 #include <stdlib.h>
@@ -28,6 +31,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 #include <sys/soundcard.h>
 #include <stdio.h>
 #include "quakedef.h"
+#include "snd_main.h"
 
 int audio_fd;
 int snd_inited;
@@ -53,7 +57,7 @@ qboolean SNDDMA_Init(void)
        snd_inited = 0;
 
        // open /dev/dsp, confirm capability to mmap, and get size of dma buffer
-    audio_fd = open("/dev/dsp", O_RDWR);
+    audio_fd = open("/dev/dsp", O_RDWR);  // we have to open it O_RDWR for mmap
        if (audio_fd < 0)
        {
                perror("/dev/dsp");
@@ -96,7 +100,7 @@ qboolean SNDDMA_Init(void)
        s = getenv("QUAKE_SOUND_SAMPLEBITS");
        if (s)
                shm->format.width = atoi(s) / 8;
-// COMMANDLINEOPTION: -sndbits <bits> chooses 8 bit or 16 bit sound output
+// COMMANDLINEOPTION: Linux OSS Sound: -sndbits <bits> chooses 8 bit or 16 bit sound output
        else if ((i = COM_CheckParm("-sndbits")) != 0)
                shm->format.width = atoi(com_argv[i+1]) / 8;
 
@@ -112,12 +116,12 @@ qboolean SNDDMA_Init(void)
        s = getenv("QUAKE_SOUND_SPEED");
        if (s)
                shm->format.speed = atoi(s);
-// COMMANDLINEOPTION: -sndspeed <hz> chooses 44100 hz, 22100 hz, or 11025 hz sound output rate
+// COMMANDLINEOPTION: Linux OSS Sound: -sndspeed <hz> chooses 44100 hz, 22100 hz, or 11025 hz sound output rate
        else if ((i = COM_CheckParm("-sndspeed")) != 0)
                shm->format.speed = atoi(com_argv[i+1]);
        else
        {
-               for (i = 0;i < (int) sizeof(tryrates) / 4;i++)
+               for (i = 0;i < (int) sizeof(tryrates) / (int) sizeof(tryrates[0]);i++)
                        if (!ioctl(audio_fd, SNDCTL_DSP_SPEED, &tryrates[i]))
                                break;
 
@@ -127,44 +131,22 @@ qboolean SNDDMA_Init(void)
        s = getenv("QUAKE_SOUND_CHANNELS");
        if (s)
                shm->format.channels = atoi(s);
-// COMMANDLINEOPTION: -sndmono sets sound output to mono
+// COMMANDLINEOPTION: Linux OSS Sound: -sndmono sets sound output to mono
        else if ((i = COM_CheckParm("-sndmono")) != 0)
                shm->format.channels = 1;
-// COMMANDLINEOPTION: -sndstereo sets sound output to stereo
-       else if ((i = COM_CheckParm("-sndstereo")) != 0)
-               shm->format.channels = 2;
-       else
+// COMMANDLINEOPTION: Linux OSS Sound: -sndstereo sets sound output to stereo
+       else // if ((i = COM_CheckParm("-sndstereo")) != 0)
                shm->format.channels = 2;
 
-       shm->samples = info.fragstotal * info.fragsize / shm->format.width;
-
-       // memory map the dma buffer
-       shm->bufferlength = info.fragstotal * info.fragsize;
-       shm->buffer = (unsigned char *) mmap(NULL, shm->bufferlength, PROT_READ|PROT_WRITE, MAP_FILE|MAP_SHARED, audio_fd, 0);
-       if (!shm->buffer || shm->buffer == (unsigned char *)-1)
-       {
-               perror("/dev/dsp");
-               Con_Print("Could not mmap /dev/dsp\n");
-               close(audio_fd);
-               return 0;
-       }
-
-       tmp = 0;
-       if (shm->format.channels == 2)
-               tmp = 1;
-
+       tmp = (shm->format.channels == 2);
        rc = ioctl(audio_fd, SNDCTL_DSP_STEREO, &tmp);
        if (rc < 0)
        {
                perror("/dev/dsp");
-               Con_Printf("Could not set /dev/dsp to stereo=%d\n", shm->format.channels);
+               Con_Printf("Could not set /dev/dsp to stereo=%d\n", tmp);
                close(audio_fd);
                return 0;
        }
-       if (tmp)
-               shm->format.channels = 2;
-       else
-               shm->format.channels = 1;
 
        rc = ioctl(audio_fd, SNDCTL_DSP_SPEED, &shm->format.speed);
        if (rc < 0)
@@ -207,6 +189,19 @@ qboolean SNDDMA_Init(void)
                return 0;
        }
 
+       shm->samples = info.fragstotal * info.fragsize / shm->format.width;
+
+       // memory map the dma buffer
+       shm->bufferlength = info.fragstotal * info.fragsize;
+       shm->buffer = (unsigned char *) mmap(NULL, shm->bufferlength, PROT_WRITE, MAP_FILE|MAP_SHARED, audio_fd, 0);
+       if (!shm->buffer || shm->buffer == (unsigned char *)-1)
+       {
+               perror("/dev/dsp");
+               Con_Print("Could not mmap /dev/dsp\n");
+               close(audio_fd);
+               return 0;
+       }
+
        // toggle the trigger & start her up
        tmp = 0;
        rc  = ioctl(audio_fd, SNDCTL_DSP_SETTRIGGER, &tmp);