src/audio/dma/SDL_dmaaudio.c
branchSDL-1.3
changeset 1668 4da1ee79c9af
parent 1662 782fd950bd46
--- a/src/audio/dma/SDL_dmaaudio.c	Mon May 29 03:53:21 2006 +0000
+++ b/src/audio/dma/SDL_dmaaudio.c	Mon May 29 04:04:35 2006 +0000
@@ -60,64 +60,64 @@
 #define OPEN_FLAGS	(O_RDWR|O_NONBLOCK)
 
 /* Audio driver functions */
-static int DMA_OpenAudio (_THIS, SDL_AudioSpec * spec);
-static void DMA_WaitAudio (_THIS);
-static void DMA_PlayAudio (_THIS);
-static Uint8 *DMA_GetAudioBuf (_THIS);
-static void DMA_CloseAudio (_THIS);
+static int DMA_OpenAudio(_THIS, SDL_AudioSpec * spec);
+static void DMA_WaitAudio(_THIS);
+static void DMA_PlayAudio(_THIS);
+static Uint8 *DMA_GetAudioBuf(_THIS);
+static void DMA_CloseAudio(_THIS);
 
 /* Audio driver bootstrap functions */
 
 static int
-Audio_Available (void)
+Audio_Available(void)
 {
     int available;
     int fd;
 
     available = 0;
 
-    fd = SDL_OpenAudioPath (NULL, 0, OPEN_FLAGS, 0);
+    fd = SDL_OpenAudioPath(NULL, 0, OPEN_FLAGS, 0);
     if (fd >= 0) {
         int caps;
         struct audio_buf_info info;
 
-        if ((ioctl (fd, SNDCTL_DSP_GETCAPS, &caps) == 0) &&
+        if ((ioctl(fd, SNDCTL_DSP_GETCAPS, &caps) == 0) &&
             (caps & DSP_CAP_TRIGGER) && (caps & DSP_CAP_MMAP) &&
-            (ioctl (fd, SNDCTL_DSP_GETOSPACE, &info) == 0)) {
+            (ioctl(fd, SNDCTL_DSP_GETOSPACE, &info) == 0)) {
             available = 1;
         }
-        close (fd);
+        close(fd);
     }
     return (available);
 }
 
 static void
-Audio_DeleteDevice (SDL_AudioDevice * device)
+Audio_DeleteDevice(SDL_AudioDevice * device)
 {
-    SDL_free (device->hidden);
-    SDL_free (device);
+    SDL_free(device->hidden);
+    SDL_free(device);
 }
 
 static SDL_AudioDevice *
-Audio_CreateDevice (int devindex)
+Audio_CreateDevice(int devindex)
 {
     SDL_AudioDevice *this;
 
     /* Initialize all variables that we clean on shutdown */
-    this = (SDL_AudioDevice *) SDL_malloc (sizeof (SDL_AudioDevice));
+    this = (SDL_AudioDevice *) SDL_malloc(sizeof(SDL_AudioDevice));
     if (this) {
-        SDL_memset (this, 0, (sizeof *this));
+        SDL_memset(this, 0, (sizeof *this));
         this->hidden = (struct SDL_PrivateAudioData *)
-            SDL_malloc ((sizeof *this->hidden));
+            SDL_malloc((sizeof *this->hidden));
     }
     if ((this == NULL) || (this->hidden == NULL)) {
-        SDL_OutOfMemory ();
+        SDL_OutOfMemory();
         if (this) {
-            SDL_free (this);
+            SDL_free(this);
         }
         return (0);
     }
-    SDL_memset (this->hidden, 0, (sizeof *this->hidden));
+    SDL_memset(this->hidden, 0, (sizeof *this->hidden));
     audio_fd = -1;
 
     /* Set the function pointers */
@@ -139,7 +139,7 @@
 
 /* This function waits until it is possible to write a full sound buffer */
 static void
-DMA_WaitAudio (_THIS)
+DMA_WaitAudio(_THIS)
 {
     fd_set fdset;
 
@@ -150,7 +150,7 @@
            that use a different process id for each thread.
          */
         if (parent && (((++cnt) % 10) == 0)) {  /* Check every 10 loops */
-            if (kill (parent, 0) < 0) {
+            if (kill(parent, 0) < 0) {
                 this->enabled = 0;
             }
         }
@@ -161,21 +161,21 @@
         /* Use timer for general audio synchronization */
         Sint32 ticks;
 
-        ticks = ((Sint32) (next_frame - SDL_GetTicks ())) - FUDGE_TICKS;
+        ticks = ((Sint32) (next_frame - SDL_GetTicks())) - FUDGE_TICKS;
         if (ticks > 0) {
-            SDL_Delay (ticks);
+            SDL_Delay(ticks);
         }
     } else {
         /* Use select() for audio synchronization */
         struct timeval timeout;
-        FD_ZERO (&fdset);
-        FD_SET (audio_fd, &fdset);
+        FD_ZERO(&fdset);
+        FD_SET(audio_fd, &fdset);
         timeout.tv_sec = 10;
         timeout.tv_usec = 0;
 #ifdef DEBUG_AUDIO
-        fprintf (stderr, "Waiting for audio to get ready\n");
+        fprintf(stderr, "Waiting for audio to get ready\n");
 #endif
-        if (select (audio_fd + 1, NULL, &fdset, NULL, &timeout) <= 0) {
+        if (select(audio_fd + 1, NULL, &fdset, NULL, &timeout) <= 0) {
             const char *message =
 #ifdef AUDIO_OSPACE_HACK
                 "Audio timeout - buggy audio driver? (trying ospace)";
@@ -186,29 +186,29 @@
                but in this case we have no other way of letting
                the user know what happened.
              */
-            fprintf (stderr, "SDL: %s\n", message);
+            fprintf(stderr, "SDL: %s\n", message);
 #ifdef AUDIO_OSPACE_HACK
             /* We may be able to use GET_OSPACE trick */
             frame_ticks = (float) (this->spec->samples * 1000) /
                 this->spec->freq;
-            next_frame = SDL_GetTicks () + frame_ticks;
+            next_frame = SDL_GetTicks() + frame_ticks;
 #else
             this->enabled = 0;
             /* Don't try to close - may hang */
             audio_fd = -1;
 #ifdef DEBUG_AUDIO
-            fprintf (stderr, "Done disabling audio\n");
+            fprintf(stderr, "Done disabling audio\n");
 #endif
 #endif /* AUDIO_OSPACE_HACK */
         }
 #ifdef DEBUG_AUDIO
-        fprintf (stderr, "Ready!\n");
+        fprintf(stderr, "Ready!\n");
 #endif
     }
 }
 
 static void
-DMA_PlayAudio (_THIS)
+DMA_PlayAudio(_THIS)
 {
     /* If timer synchronization is enabled, set the next write frame */
     if (frame_ticks) {
@@ -218,7 +218,7 @@
 }
 
 static Uint8 *
-DMA_GetAudioBuf (_THIS)
+DMA_GetAudioBuf(_THIS)
 {
     count_info info;
     int playing;
@@ -226,7 +226,7 @@
 
     /* Get number of blocks, looping if we're not using select() */
     do {
-        if (ioctl (audio_fd, SNDCTL_DSP_GETOPTR, &info) < 0) {
+        if (ioctl(audio_fd, SNDCTL_DSP_GETOPTR, &info) < 0) {
             /* Uh oh... */
             this->enabled = 0;
             return (NULL);
@@ -235,7 +235,7 @@
     while (frame_ticks && (info.blocks < 1));
 #ifdef DEBUG_AUDIO
     if (info.blocks > 1) {
-        printf ("Warning: audio underflow (%d frags)\n", info.blocks - 1);
+        printf("Warning: audio underflow (%d frags)\n", info.blocks - 1);
     }
 #endif
     playing = info.ptr / this->spec.size;
@@ -244,69 +244,68 @@
 }
 
 static void
-DMA_CloseAudio (_THIS)
+DMA_CloseAudio(_THIS)
 {
     if (dma_buf != NULL) {
-        munmap (dma_buf, dma_len);
+        munmap(dma_buf, dma_len);
         dma_buf = NULL;
     }
     if (audio_fd >= 0) {
-        close (audio_fd);
+        close(audio_fd);
         audio_fd = -1;
     }
 }
 
 static int
-DMA_ReopenAudio (_THIS, const char *audiodev, int format, int stereo,
-                 SDL_AudioSpec * spec)
+DMA_ReopenAudio(_THIS, const char *audiodev, int format, int stereo,
+                SDL_AudioSpec * spec)
 {
     int frag_spec;
     int value;
 
     /* Close and then reopen the audio device */
-    close (audio_fd);
-    audio_fd = open (audiodev, O_RDWR, 0);
+    close(audio_fd);
+    audio_fd = open(audiodev, O_RDWR, 0);
     if (audio_fd < 0) {
-        SDL_SetError ("Couldn't open %s: %s", audiodev, strerror (errno));
+        SDL_SetError("Couldn't open %s: %s", audiodev, strerror(errno));
         return (-1);
     }
 
     /* Calculate the final parameters for this audio specification */
-    SDL_CalculateAudioSpec (spec);
+    SDL_CalculateAudioSpec(spec);
 
     /* Determine the power of two of the fragment size */
     for (frag_spec = 0; (0x01 << frag_spec) < spec->size; ++frag_spec);
     if ((0x01 << frag_spec) != spec->size) {
-        SDL_SetError ("Fragment size must be a power of two");
+        SDL_SetError("Fragment size must be a power of two");
         return (-1);
     }
 
     /* Set the audio buffering parameters */
-    if (ioctl (audio_fd, SNDCTL_DSP_SETFRAGMENT, &frag_spec) < 0) {
-        SDL_SetError ("Couldn't set audio fragment spec");
+    if (ioctl(audio_fd, SNDCTL_DSP_SETFRAGMENT, &frag_spec) < 0) {
+        SDL_SetError("Couldn't set audio fragment spec");
         return (-1);
     }
 
     /* Set the audio format */
     value = format;
-    if ((ioctl (audio_fd, SNDCTL_DSP_SETFMT, &value) < 0) ||
-        (value != format)) {
-        SDL_SetError ("Couldn't set audio format");
+    if ((ioctl(audio_fd, SNDCTL_DSP_SETFMT, &value) < 0) || (value != format)) {
+        SDL_SetError("Couldn't set audio format");
         return (-1);
     }
 
     /* Set mono or stereo audio */
     value = (spec->channels > 1);
-    if ((ioctl (audio_fd, SNDCTL_DSP_STEREO, &stereo) < 0) ||
+    if ((ioctl(audio_fd, SNDCTL_DSP_STEREO, &stereo) < 0) ||
         (value != stereo)) {
-        SDL_SetError ("Couldn't set audio channels");
+        SDL_SetError("Couldn't set audio channels");
         return (-1);
     }
 
     /* Set the DSP frequency */
     value = spec->freq;
-    if (ioctl (audio_fd, SNDCTL_DSP_SPEED, &value) < 0) {
-        SDL_SetError ("Couldn't set audio frequency");
+    if (ioctl(audio_fd, SNDCTL_DSP_SPEED, &value) < 0) {
+        SDL_SetError("Couldn't set audio frequency");
         return (-1);
     }
     spec->freq = value;
@@ -316,7 +315,7 @@
 }
 
 static int
-DMA_OpenAudio (_THIS, SDL_AudioSpec * spec)
+DMA_OpenAudio(_THIS, SDL_AudioSpec * spec)
 {
     char audiodev[1024];
     int format;
@@ -329,26 +328,26 @@
     frame_ticks = 0.0;
 
     /* Open the audio device */
-    audio_fd = SDL_OpenAudioPath (audiodev, sizeof (audiodev), OPEN_FLAGS, 0);
+    audio_fd = SDL_OpenAudioPath(audiodev, sizeof(audiodev), OPEN_FLAGS, 0);
     if (audio_fd < 0) {
-        SDL_SetError ("Couldn't open %s: %s", audiodev, strerror (errno));
+        SDL_SetError("Couldn't open %s: %s", audiodev, strerror(errno));
         return (-1);
     }
     dma_buf = NULL;
-    ioctl (audio_fd, SNDCTL_DSP_RESET, 0);
+    ioctl(audio_fd, SNDCTL_DSP_RESET, 0);
 
     /* Get a list of supported hardware formats */
-    if (ioctl (audio_fd, SNDCTL_DSP_GETFMTS, &value) < 0) {
-        SDL_SetError ("Couldn't get audio format list");
+    if (ioctl(audio_fd, SNDCTL_DSP_GETFMTS, &value) < 0) {
+        SDL_SetError("Couldn't get audio format list");
         return (-1);
     }
 
     /* Try for a closest match on audio format */
     format = 0;
-    for (test_format = SDL_FirstAudioFormat (spec->format);
+    for (test_format = SDL_FirstAudioFormat(spec->format);
          !format && test_format;) {
 #ifdef DEBUG_AUDIO
-        fprintf (stderr, "Trying format 0x%4.4x\n", test_format);
+        fprintf(stderr, "Trying format 0x%4.4x\n", test_format);
 #endif
         switch (test_format) {
         case AUDIO_U8:
@@ -386,26 +385,25 @@
             break;
         }
         if (!format) {
-            test_format = SDL_NextAudioFormat ();
+            test_format = SDL_NextAudioFormat();
         }
     }
     if (format == 0) {
-        SDL_SetError ("Couldn't find any hardware audio formats");
+        SDL_SetError("Couldn't find any hardware audio formats");
         return (-1);
     }
     spec->format = test_format;
 
     /* Set the audio format */
     value = format;
-    if ((ioctl (audio_fd, SNDCTL_DSP_SETFMT, &value) < 0) ||
-        (value != format)) {
-        SDL_SetError ("Couldn't set audio format");
+    if ((ioctl(audio_fd, SNDCTL_DSP_SETFMT, &value) < 0) || (value != format)) {
+        SDL_SetError("Couldn't set audio format");
         return (-1);
     }
 
     /* Set mono or stereo audio (currently only two channels supported) */
     stereo = (spec->channels > 1);
-    ioctl (audio_fd, SNDCTL_DSP_STEREO, &stereo);
+    ioctl(audio_fd, SNDCTL_DSP_STEREO, &stereo);
     if (stereo) {
         spec->channels = 2;
     } else {
@@ -416,14 +414,14 @@
        after setting the format, we must re-open the audio device
        once we know what format and channels are supported
      */
-    if (DMA_ReopenAudio (this, audiodev, format, stereo, spec) < 0) {
+    if (DMA_ReopenAudio(this, audiodev, format, stereo, spec) < 0) {
         /* Error is set by DMA_ReopenAudio() */
         return (-1);
     }
 
     /* Memory map the audio buffer */
-    if (ioctl (audio_fd, SNDCTL_DSP_GETOSPACE, &info) < 0) {
-        SDL_SetError ("Couldn't get OSPACE parameters");
+    if (ioctl(audio_fd, SNDCTL_DSP_GETOSPACE, &info) < 0) {
+        SDL_SetError("Couldn't get OSPACE parameters");
         return (-1);
     }
     spec->size = info.fragsize;
@@ -431,36 +429,36 @@
     spec->samples /= spec->channels;
     num_buffers = info.fragstotal;
     dma_len = num_buffers * spec->size;
-    dma_buf = (Uint8 *) mmap (NULL, dma_len, PROT_WRITE, MAP_SHARED,
-                              audio_fd, 0);
+    dma_buf = (Uint8 *) mmap(NULL, dma_len, PROT_WRITE, MAP_SHARED,
+                             audio_fd, 0);
     if (dma_buf == MAP_FAILED) {
-        SDL_SetError ("DMA memory map failed");
+        SDL_SetError("DMA memory map failed");
         dma_buf = NULL;
         return (-1);
     }
-    SDL_memset (dma_buf, spec->silence, dma_len);
+    SDL_memset(dma_buf, spec->silence, dma_len);
 
     /* Check to see if we need to use select() workaround */
     {
         char *workaround;
-        workaround = SDL_getenv ("SDL_DSP_NOSELECT");
+        workaround = SDL_getenv("SDL_DSP_NOSELECT");
         if (workaround) {
             frame_ticks = (float) (spec->samples * 1000) / spec->freq;
-            next_frame = SDL_GetTicks () + frame_ticks;
+            next_frame = SDL_GetTicks() + frame_ticks;
         }
     }
 
     /* Trigger audio playback */
     value = 0;
-    ioctl (audio_fd, SNDCTL_DSP_SETTRIGGER, &value);
+    ioctl(audio_fd, SNDCTL_DSP_SETTRIGGER, &value);
     value = PCM_ENABLE_OUTPUT;
-    if (ioctl (audio_fd, SNDCTL_DSP_SETTRIGGER, &value) < 0) {
-        SDL_SetError ("Couldn't trigger audio output");
+    if (ioctl(audio_fd, SNDCTL_DSP_SETTRIGGER, &value) < 0) {
+        SDL_SetError("Couldn't trigger audio output");
         return (-1);
     }
 
     /* Get the parent process id (we're the parent of the audio thread) */
-    parent = getpid ();
+    parent = getpid();
 
     /* We're ready to rock and roll. :-) */
     return (0);