X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~mdw/git/disorder/blobdiff_plain/bfdadcc93fcb88261478c1b04d32e619fd961a13..f4604d0d467ae510f8167d3109e6fd05f57f1cde:/server/normalize.c diff --git a/server/normalize.c b/server/normalize.c index 2a28c1f..0f97a2f 100644 --- a/server/normalize.c +++ b/server/normalize.c @@ -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);