[Pommed-commits] r425 - trunk/pommed

jblache at alioth.debian.org jblache at alioth.debian.org
Wed Dec 12 11:23:22 UTC 2007


Author: jblache
Date: 2007-12-12 11:23:22 +0000 (Wed, 12 Dec 2007)
New Revision: 425

Modified:
   trunk/pommed/beep.c
Log:
Rework & fix the audio sample loading code.


Modified: trunk/pommed/beep.c
===================================================================
--- trunk/pommed/beep.c	2007-12-12 10:51:16 UTC (rev 424)
+++ trunk/pommed/beep.c	2007-12-12 11:23:22 UTC (rev 425)
@@ -272,7 +272,7 @@
 {
   AFfilehandle affd;     /* filehandle for soundfile from libaudiofile */
   AFframecount framecount;
-  int dummy, channels, byteorder, framesize, precision, err = 0;
+  int dummy, channels, byteorder, framesize, precision;
   struct sample *sample;
 
   int ret;
@@ -282,64 +282,67 @@
     return NULL;
 
   affd = afOpenFile(filename, "r", 0);
-  if (affd > 0)
+  if (!affd)
     {
-      afGetSampleFormat(affd, AF_DEFAULT_TRACK, &dummy, &precision);
-      channels = afGetChannels(affd, AF_DEFAULT_TRACK);
-      byteorder = afGetVirtualByteOrder(affd, AF_DEFAULT_TRACK);
-      framesize = (int) afGetFrameSize(affd, AF_DEFAULT_TRACK, 0);
-      framecount = afGetFrameCount(affd, AF_DEFAULT_TRACK);
-      sample->speed = (int) afGetRate(affd, AF_DEFAULT_TRACK);
+      free(sample);
+      return NULL;
+    }
 
-      if (channels <= 2)
-	sample->channels = channels;
-      else
-	err = -1;
+  afGetSampleFormat(affd, AF_DEFAULT_TRACK, &dummy, &precision);
+  channels = afGetChannels(affd, AF_DEFAULT_TRACK);
+  byteorder = afGetVirtualByteOrder(affd, AF_DEFAULT_TRACK);
+  framesize = (int) afGetFrameSize(affd, AF_DEFAULT_TRACK, 0);
+  framecount = afGetFrameCount(affd, AF_DEFAULT_TRACK);
+  sample->speed = (int) afGetRate(affd, AF_DEFAULT_TRACK);
 
-      if (precision == 8)
-	sample->format = SND_PCM_FORMAT_S8;
-      else if (precision == 16)
-	{
-	  if (byteorder == AF_BYTEORDER_LITTLEENDIAN)
-	    sample->format = SND_PCM_FORMAT_S16_LE;
-	  else
-	    sample->format = SND_PCM_FORMAT_S16_BE;
-	}
-      else
-	err = -1;
+  if (channels <= 2)
+    sample->channels = channels;
+  else
+    goto error_out;
 
-      if (err == 0)
-	{
-	  sample->framesize = framesize;
-	  sample->framecount = framecount;
-	  sample->audiodatalen = framecount * framesize;
-
-	  sample->audiodata = (char *) malloc(sample->audiodatalen);
-	  if (sample->audiodata != NULL)
-	    {
-	      ret = afReadFrames(affd, AF_DEFAULT_TRACK, sample->audiodata, framecount);
-	      if (ret != framecount)
-		{
-		  free(sample->audiodata);
-		  err = -1;
-		}
-	    }
-	  else
-	    ret = -1;
-	}
-      afCloseFile(affd);
-    }
-
-  if (err == -1)
+  switch (precision)
     {
-      free(sample);
-      return NULL;
+      case 8:
+	sample->format = SND_PCM_FORMAT_S8;
+	break;
+      case 16:
+	if (byteorder == AF_BYTEORDER_LITTLEENDIAN)
+	  sample->format = SND_PCM_FORMAT_S16_LE;
+	else
+	  sample->format = SND_PCM_FORMAT_S16_BE;
+	break;
+      default:
+	goto error_out;
+	break;
     }
 
+  sample->framesize = framesize;
   sample->periods = sample->framesize;
   sample->buffersize = (sample->periods * 8192) >> 2;
+  sample->framecount = framecount;
+  sample->audiodatalen = framecount * framesize;
 
+  sample->audiodata = (char *) malloc(sample->audiodatalen);
+  if (sample->audiodata != NULL)
+    {
+      ret = afReadFrames(affd, AF_DEFAULT_TRACK, sample->audiodata, framecount);
+      if (ret != framecount)
+	{
+	  free(sample->audiodata);
+	  goto error_out;
+	}
+    }
+  else
+    goto error_out;
+
+  afCloseFile(affd);
+
   return sample;
+
+ error_out: /* something bad happened */
+  afCloseFile(affd);
+  free(sample);
+  return NULL;
 }
 
 
@@ -474,9 +477,6 @@
   if (!beep_thread_running)
     return;
 
-  if (!_dsp.sample)
-    return;
-
   pthread_mutex_lock(&(_dsp.mutex));
 
   _dsp.command = command;
@@ -492,9 +492,6 @@
 {
   int i;
 
-  if (!_dsp.sample)
-    return;
-
   for (i = 0; i < AUDIO_N; i++)
     {
       if (_dsp.sample[i] == NULL)




More information about the Pommed-commits mailing list