From aa7bc322e25a461a14e922f71103a7ca607482f8 Mon Sep 17 00:00:00 2001 From: Maarten Bosmans Date: Mon, 27 Jun 2011 01:19:07 +0200 Subject: parecord: Automatically detect file format from extension And fix a small bug in pa_sndfile_format_from_string. --- src/pulsecore/sndfile-util.c | 2 +- src/utils/pacat.c | 18 +++++++++++------- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/pulsecore/sndfile-util.c b/src/pulsecore/sndfile-util.c index 85d7a1c4..ab6485d9 100644 --- a/src/pulsecore/sndfile-util.c +++ b/src/pulsecore/sndfile-util.c @@ -446,7 +446,7 @@ int pa_sndfile_format_from_string(const char *name) { pa_assert_se(sf_command(NULL, SFC_GET_FORMAT_MAJOR, &fi, sizeof(fi)) == 0); - if (strncasecmp(name, fi.extension, strlen(name)) == 0) + if (strncasecmp(name, fi.name, strlen(name)) == 0) return fi.format; } diff --git a/src/utils/pacat.c b/src/utils/pacat.c index 749593ea..323f071b 100644 --- a/src/utils/pacat.c +++ b/src/utils/pacat.c @@ -926,8 +926,6 @@ int main(int argc, char *argv[]) { break; case ARG_FILE_FORMAT: - raw = FALSE; - if (optarg) { if ((file_format = pa_sndfile_format_from_string(optarg)) < 0) { pa_log(_("Unknown file format %s."), optarg); @@ -986,13 +984,19 @@ int main(int argc, char *argv[]) { goto quit; } - /* Transparently upgrade classic .wav to wavex for multichannel audio */ if (file_format <= 0) { - if ((sample_spec.channels == 2 && (!channel_map_set || (channel_map.map[0] == PA_CHANNEL_POSITION_LEFT && - channel_map.map[1] == PA_CHANNEL_POSITION_RIGHT))) || - (sample_spec.channels == 1 && (!channel_map_set || (channel_map.map[0] == PA_CHANNEL_POSITION_MONO)))) + char *extension; + if (filename && (extension = strrchr(filename, '.'))) + file_format = pa_sndfile_format_from_string(extension+1); + if (file_format <= 0) file_format = SF_FORMAT_WAV; - else + /* Transparently upgrade classic .wav to wavex for multichannel audio */ + if (file_format == SF_FORMAT_WAV && + (sample_spec.channels > 2 || + (channel_map_set && + !(sample_spec.channels == 1 && channel_map.map[0] == PA_CHANNEL_POSITION_MONO) && + !(sample_spec.channels == 2 && channel_map.map[0] == PA_CHANNEL_POSITION_LEFT + && channel_map.map[1] == PA_CHANNEL_POSITION_RIGHT)))) file_format = SF_FORMAT_WAVEX; } -- cgit