- Nutze 1024 Samples bei 44 kHz. Dies macht Q2 mit dem

Pulseaudio-Schrott kompatibel.
- Mache s_khz im Frontend und Backend kompatibel
This commit is contained in:
Yamagi Burmeister 2011-01-23 09:37:30 +00:00
parent c7dc7eb62f
commit f9fbe8d380

View file

@ -97,7 +97,8 @@ SNDDMA_Init(void)
{ {
char drivername[128]; char drivername[128];
SDL_AudioSpec desired; SDL_AudioSpec desired;
SDL_AudioSpec optained; SDL_AudioSpec obtained;
int tmp, val;
/* This should never happen, /* This should never happen,
but this is Quake 2 ... */ but this is Quake 2 ... */
@ -107,9 +108,11 @@ SNDDMA_Init(void)
} }
int sndbits = (Cvar_Get("sndbits", "16", CVAR_ARCHIVE))->value; int sndbits = (Cvar_Get("sndbits", "16", CVAR_ARCHIVE))->value;
int sndfreq = (Cvar_Get("s_khz", "0", CVAR_ARCHIVE))->value; int sndfreq = (Cvar_Get("s_khz", "44", CVAR_ARCHIVE))->value;
int sndchans = (Cvar_Get("sndchannels", "2", CVAR_ARCHIVE))->value; int sndchans = (Cvar_Get("sndchannels", "2", CVAR_ARCHIVE))->value;
Com_Printf("Starting SDL audio callback.\n");
if (!SDL_WasInit(SDL_INIT_AUDIO)) if (!SDL_WasInit(SDL_INIT_AUDIO))
{ {
if (SDL_Init(SDL_INIT_AUDIO) == -1) if (SDL_Init(SDL_INIT_AUDIO) == -1)
@ -127,7 +130,7 @@ SNDDMA_Init(void)
Com_Printf("SDL audio driver is \"%s\".\n", drivername); Com_Printf("SDL audio driver is \"%s\".\n", drivername);
memset(&desired, '\0', sizeof(desired)); memset(&desired, '\0', sizeof(desired));
memset(&optained, '\0', sizeof(optained)); memset(&obtained, '\0', sizeof(obtained));
/* Users are stupid */ /* Users are stupid */
if ((sndbits != 16) && (sndbits != 8)) if ((sndbits != 16) && (sndbits != 8))
@ -135,7 +138,15 @@ SNDDMA_Init(void)
sndbits = 16; sndbits = 16;
} }
if (sndfreq == 22) if (sndfreq == 48)
{
desired.freq = 48000;
}
else if (sndfreq == 44)
{
desired.freq = 44100;
}
else if (sndfreq == 22)
{ {
desired.freq = 22050; desired.freq = 22050;
} }
@ -154,6 +165,10 @@ SNDDMA_Init(void)
{ {
desired.samples = 512; desired.samples = 512;
} }
else if (desired.freq <= 44100)
{
desired.samples = 1024;
}
else else
{ {
desired.samples = 2048; desired.samples = 2048;
@ -163,7 +178,7 @@ SNDDMA_Init(void)
desired.callback = sdl_audio_callback; desired.callback = sdl_audio_callback;
/* Okay, let's try our luck */ /* Okay, let's try our luck */
if (SDL_OpenAudio(&desired, &optained) == -1) if (SDL_OpenAudio(&desired, &obtained) == -1)
{ {
Com_Printf("SDL_OpenAudio() failed: %s\n", SDL_GetError()); Com_Printf("SDL_OpenAudio() failed: %s\n", SDL_GetError());
SDL_QuitSubSystem(SDL_INIT_AUDIO); SDL_QuitSubSystem(SDL_INIT_AUDIO);
@ -174,15 +189,25 @@ SNDDMA_Init(void)
dmabackend = &dma; dmabackend = &dma;
dmapos = 0; dmapos = 0;
dmabackend->samplebits = optained.format & 0xFF; dmabackend->samplebits = obtained.format & 0xFF;
dmabackend->channels = optained.channels; dmabackend->channels = obtained.channels;
dmabackend->samples = 32768;
tmp = (obtained.samples * obtained.channels) * 10;
if (tmp & (tmp - 1))
{ /* make it a power of two */
val = 1;
while (val < tmp)
val <<= 1;
tmp = val;
}
dmabackend->samples = tmp;
dmabackend->submission_chunk = 1; dmabackend->submission_chunk = 1;
dmabackend->speed = optained.freq; dmabackend->speed = obtained.freq;
dmasize = (dmabackend->samples * (dmabackend->samplebits / 8)); dmasize = (dmabackend->samples * (dmabackend->samplebits / 8));
dmabackend->buffer = calloc(1, dmasize); dmabackend->buffer = calloc(1, dmasize);
Com_Printf("Starting SDL audio callback.\n");
SDL_PauseAudio(0); SDL_PauseAudio(0);
Com_Printf("SDL audio initialized.\n"); Com_Printf("SDL audio initialized.\n");