chiark / gitweb /
issue #22 was fixed ages ago (revno 905, 914 mainly)
[disorder] / server / normalize.c
index 2a28c1f5c5778db3a147dfe6757fcb48159519dd..0f97a2ff024a9d3360526af306828b3ad7767630 100644 (file)
@@ -71,16 +71,16 @@ static void copy(int infd, int outfd, size_t n) {
       if(errno == EINTR)
        continue;
       else
-       fatal(errno, "read error");
+       disorder_fatal(errno, "read error");
     }
     if(readden == 0)
-      fatal(0, "unexpected EOF");
+      disorder_fatal(0, "unexpected EOF");
     n -= readden;
     written = 0;
     while(written < readden) {
       const ssize_t w = write(outfd, buffer + written, readden - written);
       if(w < 0)
-       fatal(errno, "write error");
+       disorder_fatal(errno, "write error");
       written += w;
     }
   }
@@ -105,7 +105,7 @@ static void soxargs(const char ***pp, char **qq,
     case 16: *(*pp)++ = "-w"; break;
     case 32: *(*pp)++ = "-l"; break;
     case 64: *(*pp)++ = "-d"; break;
-    default: fatal(0, "cannot handle sample size %d", header->bits);
+    default: disorder_fatal(0, "cannot handle sample size %d", header->bits);
     }
     break;
   case 1:
@@ -116,11 +116,11 @@ static void soxargs(const char ***pp, char **qq,
       case ENDIAN_LITTLE: *(*pp)++ = "-L"; break;
       }
     if(header->bits % 8)
-      fatal(0, "cannot handle sample size %d", header->bits);
+      disorder_fatal(0, "cannot handle sample size %d", header->bits);
     *qq += sprintf((char *)(*(*pp)++ = *qq), "-%d", header->bits / 8) + 1;
     break;
   default:
-    fatal(0, "unknown sox_generation %ld", config->sox_generation);
+    disorder_fatal(0, "unknown sox_generation %ld", config->sox_generation);
   }
 }
 #else
@@ -150,7 +150,7 @@ int main(int argc, char attribute((unused)) **argv) {
 
   set_progname(argv);
   if(!setlocale(LC_CTYPE, ""))
-    fatal(errno, "error calling setlocale");
+    disorder_fatal(errno, "error calling setlocale");
   while((n = getopt_long(argc, argv, "hVc:dDSs", options, 0)) >= 0) {
     switch(n) {
     case 'h': help();
@@ -160,11 +160,11 @@ int main(int argc, char attribute((unused)) **argv) {
     case 'D': debugging = 0; break;
     case 'S': logsyslog = 0; break;
     case 's': logsyslog = 1; break;
-    default: fatal(0, "invalid option");
+    default: disorder_fatal(0, "invalid option");
     }
   }
   if(config_read(1, NULL))
-    fatal(0, "cannot read configuration");
+    disorder_fatal(0, "cannot read configuration");
   if(logsyslog) {
     openlog(progname, LOG_PID, LOG_DAEMON);
     log_default = &log_syslog;
@@ -178,26 +178,28 @@ int main(int argc, char attribute((unused)) **argv) {
 
       if(r < 0) {
         if(errno != EINTR)
-          fatal(errno, "error reading header");
+          disorder_fatal(errno, "error reading header");
       } else if(r == 0) {
         if(n)
-          fatal(0, "EOF reading header");
+          disorder_fatal(0, "EOF reading header");
         break;
       } else
         n += r;
     }
     if(!n)
       break;
+    D(("NEW HEADER: %"PRIu32" bytes %"PRIu32"Hz %"PRIu8" channels %"PRIu8" bits %"PRIu8" endian",
+       header.nbytes, header.rate, header.channels, header.bits, header.endian));
     /* Sanity check the header */
     if(header.rate < 100 || header.rate > 1000000)
-      fatal(0, "implausible rate %"PRId32"Hz (%#"PRIx32")",
-            header.rate, header.rate);
+      disorder_fatal(0, "implausible rate %"PRId32"Hz (%#"PRIx32")",
+                     header.rate, header.rate);
     if(header.channels < 1 || header.channels > 2)
-      fatal(0, "unsupported channel count %d", header.channels);
+      disorder_fatal(0, "unsupported channel count %d", header.channels);
     if(header.bits % 8 || !header.bits || header.bits > 64)
-      fatal(0, "unsupported sample size %d bits", header.bits);
+      disorder_fatal(0, "unsupported sample size %d bits", header.bits);
     if(header.endian != ENDIAN_BIG && header.endian != ENDIAN_LITTLE)
-      fatal(0, "unsupported byte order %d", header.endian);
+      disorder_fatal(0, "unsupported byte order %d", header.endian);
     /* Skip empty chunks regardless of their alleged format */
     if(header.nbytes == 0)
       continue;
@@ -210,7 +212,8 @@ int main(int argc, char attribute((unused)) **argv) {
     else {
       /* If we have a resampler active already check it is suitable and destroy
        * it if not */
-      if(!formats_equal(&header, &latest_format) && rs_in_use) {
+      if(rs_in_use) {
+        D(("call resample_close"));
         resample_close(rs);
         rs_in_use = 0;
       }
@@ -227,6 +230,7 @@ int main(int argc, char attribute((unused)) **argv) {
              config->sample_format.endian);*/
       if(!rs_in_use) {
         /* Create a suitable resampler. */
+        D(("call resample_init"));
         resample_init(rs,
                       header.bits,
                       header.channels, 
@@ -260,17 +264,20 @@ int main(int argc, char attribute((unused)) **argv) {
           left -= r;
           used += r;
           //syslog(LOG_INFO, "read %zd bytes", r);
+          D(("read %zd bytes", r));
         }
         /*syslog(LOG_INFO, " in: %02x %02x %02x %02x",
                (uint8_t)buffer[0],
                (uint8_t)buffer[1], 
                (uint8_t)buffer[2],
                (uint8_t)buffer[3]);*/
+        D(("calling resample_convert used=%zu !left=%d", used, !left));
         const size_t consumed = resample_convert(rs,
                                                  (uint8_t *)buffer, used,
                                                  !left,
                                                  converted, 0);
         //syslog(LOG_INFO, "used=%zu consumed=%zu", used, consumed);
+        D(("consumed=%zu", consumed));
         memmove(buffer, buffer + consumed, used - consumed);
         used -= consumed;
       }
@@ -282,9 +289,9 @@ int main(int argc, char attribute((unused)) **argv) {
         /* There's a running converter, stop it */
         xclose(outfd);
         if(waitpid(pid, &n, 0) < 0)
-          fatal(errno, "error calling waitpid");
+          disorder_fatal(errno, "error calling waitpid");
         if(n)
-          fatal(0, "sox failed: %#x", n);
+          disorder_fatal(0, "sox failed: %#x", n);
         pid = -1;
         outfd = -1;
       }
@@ -308,7 +315,7 @@ int main(int argc, char attribute((unused)) **argv) {
           xclose(p[0]);
           xclose(p[1]);
           execvp(av[0], (char **)av);
-          fatal(errno, "sox");
+          disorder_fatal(errno, "sox");
         }
         xclose(p[0]);
         outfd = p[1];
@@ -327,9 +334,9 @@ int main(int argc, char attribute((unused)) **argv) {
   if(pid != -1) {
     /* There's still a converter running */
     if(waitpid(pid, &n, 0) < 0)
-      fatal(errno, "error calling waitpid");
+      disorder_fatal(errno, "error calling waitpid");
     if(n)
-      fatal(0, "sox failed: %#x", n);
+      disorder_fatal(0, "sox failed: %#x", n);
   }
   if(rs_in_use)
     resample_close(rs);