]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - snd_alsa.c
todo items went from 465 to 459 by finding items that was already done or duplicates
[xonotic/darkplaces.git] / snd_alsa.c
index e4a9ffe0897c528f89e8b1a84c2f03c2f4d97a76..96c8b2d1abeee45cb058ca48b16791ea6b967bfc 100644 (file)
 
 // ALSA module, used by Linux
 
+#include "quakedef.h"
 
 #include <alsa/asoundlib.h>
 
-#include "quakedef.h"
 #include "snd_main.h"
 
 
@@ -63,7 +63,7 @@ qboolean SndSys_Init (const snd_format_t* requested, snd_format_t* suggested)
 
                if (suggested != NULL)
                {
-                       memcpy (suggested, requested, sizeof (suggested));
+                       memcpy (suggested, requested, sizeof (*suggested));
 
                        if (requested->width < 1)
                                suggested->width = 1;
@@ -201,7 +201,8 @@ qboolean SndSys_Init (const snd_format_t* requested, snd_format_t* suggested)
        snd_renderbuffer = Snd_CreateRingBuffer(requested, 0, NULL);
        expected_delay = 0;
        alsasoundtime = 0;
-       alsaspeakerlayout = true;
+       if (snd_channellayout.integer == SND_CHANNELLAYOUT_AUTO)
+               Cvar_SetValueQuick (&snd_channellayout, SND_CHANNELLAYOUT_ALSA);
        
        return true;
 
@@ -282,7 +283,7 @@ static snd_pcm_sframes_t SndSys_Write (const unsigned char* buffer, unsigned int
        written = snd_pcm_writei (pcm_handle, buffer, nbframes);
        if (written < 0)
        {
-               if (developer.integer >= 100)
+               if (developer.integer >= 1000 && vid_activewindow)
                        Con_Printf ("SndSys_Write: audio write returned %ld (%s)!\n",
                                                 written, snd_strerror (written));
 
@@ -294,6 +295,11 @@ static snd_pcm_sframes_t SndSys_Write (const unsigned char* buffer, unsigned int
                                                         written, snd_strerror (written));
                }
        }
+       if (written > 0)
+       {
+               snd_renderbuffer->startframe += written;
+               expected_delay += written;
+       }
        
        return written;
 }
@@ -324,12 +330,7 @@ void SndSys_Submit (void)
        if (nbframes > limit)
        {
                written = SndSys_Write (&snd_renderbuffer->ring[startoffset * factor], limit);
-               if (written < 0)
-                       return;
-               snd_renderbuffer->startframe += written;
-               expected_delay += written;
-
-               if ((snd_pcm_uframes_t)written != limit)
+               if (written < 0 || (snd_pcm_uframes_t)written != limit)
                        return;
                
                nbframes -= limit;
@@ -339,9 +340,6 @@ void SndSys_Submit (void)
        written = SndSys_Write (&snd_renderbuffer->ring[startoffset * factor], nbframes);
        if (written < 0)
                return;
-
-       snd_renderbuffer->startframe += written;
-       expected_delay += written;
 }
 
 
@@ -363,7 +361,7 @@ unsigned int SndSys_GetSoundTime (void)
        err = snd_pcm_delay (pcm_handle, &delay);
        if (err != 0)
        {
-               if (developer.integer >= 100)
+               if (developer.integer >= 1000 && vid_activewindow)
                        Con_DPrintf ("SndSys_GetSoundTime: can't get playback delay (%s)\n",
                                                 snd_strerror (err));