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;
}
}
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:
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
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();
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;
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;
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;
}
config->sample_format.endian);*/
if(!rs_in_use) {
/* Create a suitable resampler. */
+ D(("call resample_init"));
resample_init(rs,
header.bits,
header.channels,
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;
}
/* 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;
}
xclose(p[0]);
xclose(p[1]);
execvp(av[0], (char **)av);
- fatal(errno, "sox");
+ disorder_fatal(errno, "sox");
}
xclose(p[0]);
outfd = p[1];
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);