ref: 1317b2de1cdb6c68719441141aa3337d80d6c2dd
parent: 06929bc2bb6e89635aa75099f885f62a3a5af353
author: rrt <rrt>
date: Mon Jan 21 12:10:00 EST 2008
Add support for upcoming libsndfile 1.0.18: two new formats, Ogg and WVE. Simplify and fix bizarre and incorrect filename extension comparison code in sndfile.c (mine, I'm afraid).
--- a/m4/sndfile.m4
+++ b/m4/sndfile.m4
@@ -54,7 +54,8 @@
ifelse([$1], , :, [$1])
have_sndfile="yes"
])
- AC_CHECK_FUNC([sf_open_virtual], AC_DEFINE([HAVE_SNDFILE_1_0_12], 1, [Define if you have libsndfile >= 1.0.12]))
+ AC_CHECK_FUNC([sf_open_virtual], AC_DEFINE([HAVE_SNDFILE_1_0_12], 1, [Define if you have libsndfile >= 1.0.12]))
+ AC_CHECK_DECL([SF_FORMAT_OGG], AC_DEFINE([HAVE_SNDFILE_1_0_18], 1, [Define if you have libsndfile >= 1.0.18]),, [#include <sndfile.h>])
])
CFLAGS="$ac_save_CFLAGS"
LIBS="$ac_save_LIBS"
--- a/src/sndfile.c
+++ b/src/sndfile.c
@@ -145,38 +145,42 @@
static struct {const char *ext;
- unsigned len;
int format;
} format_map[] =
{- { "aif", 3, SF_FORMAT_AIFF },- { "wav", 0, SF_FORMAT_WAV },- { "au", 0, SF_FORMAT_AU },- { "snd", 0, SF_FORMAT_AU },+ { "aif", SF_FORMAT_AIFF },+ { "aiff", SF_FORMAT_AIFF },+ { "wav", SF_FORMAT_WAV },+ { "au", SF_FORMAT_AU },+ { "snd", SF_FORMAT_AU },#ifdef HAVE_SNDFILE_1_0_12
- { "caf", 0, SF_FORMAT_CAF },- { "flac", 0, SF_FORMAT_FLAC },+ { "caf", SF_FORMAT_CAF },+ { "flac", SF_FORMAT_FLAC },#endif
- { "svx", 0, SF_FORMAT_SVX },- { "8svx", 0, SF_FORMAT_SVX },- { "paf", 0, SF_ENDIAN_BIG | SF_FORMAT_PAF },- { "fap", 0, SF_ENDIAN_LITTLE | SF_FORMAT_PAF },- { "gsm", 0, SF_FORMAT_RAW | SF_FORMAT_GSM610 },- { "nist", 0, SF_FORMAT_NIST },- { "sph", 0, SF_FORMAT_NIST },- { "ircam", 0, SF_FORMAT_IRCAM },- { "sf", 0, SF_FORMAT_IRCAM },- { "voc", 0, SF_FORMAT_VOC },- { "w64", 0, SF_FORMAT_W64 },- { "raw", 0, SF_FORMAT_RAW },- { "mat4", 0, SF_FORMAT_MAT4 },- { "mat5", 0, SF_FORMAT_MAT5 },- { "mat", 0, SF_FORMAT_MAT4 },- { "pvf", 0, SF_FORMAT_PVF },- { "sds", 0, SF_FORMAT_SDS },- { "sd2", 0, SF_FORMAT_SD2 },- { "vox", 0, SF_FORMAT_RAW | SF_FORMAT_VOX_ADPCM },- { "xi", 0, SF_FORMAT_XI }+#ifdef HAVE_SNDFILE_1_0_18
+ { "wve", SF_FORMAT_WVE },+ { "ogg", SF_FORMAT_OGG },+#endif
+ { "svx", SF_FORMAT_SVX },+ { "8svx", SF_FORMAT_SVX },+ { "paf", SF_ENDIAN_BIG | SF_FORMAT_PAF },+ { "fap", SF_ENDIAN_LITTLE | SF_FORMAT_PAF },+ { "gsm", SF_FORMAT_RAW | SF_FORMAT_GSM610 },+ { "nist", SF_FORMAT_NIST },+ { "sph", SF_FORMAT_NIST },+ { "ircam", SF_FORMAT_IRCAM },+ { "sf", SF_FORMAT_IRCAM },+ { "voc", SF_FORMAT_VOC },+ { "w64", SF_FORMAT_W64 },+ { "raw", SF_FORMAT_RAW },+ { "mat4", SF_FORMAT_MAT4 },+ { "mat5", SF_FORMAT_MAT5 },+ { "mat", SF_FORMAT_MAT4 },+ { "pvf", SF_FORMAT_PVF },+ { "sds", SF_FORMAT_SDS },+ { "sd2", SF_FORMAT_SD2 },+ { "vox", SF_FORMAT_RAW | SF_FORMAT_VOX_ADPCM },+ { "xi", SF_FORMAT_XI }};
/* Convert file name or type to libsndfile format */
@@ -188,7 +192,7 @@
if ((cptr = strrchr(name, '.')) != NULL) {strncpy(buffer, cptr + 1, FILE_TYPE_BUFLEN);
- buffer[FILE_TYPE_BUFLEN] = 0;
+ buffer[FILE_TYPE_BUFLEN] = '\0';
for (k = 0; buffer[k]; k++)
buffer[k] = tolower((buffer[k]));
@@ -196,9 +200,7 @@
strncpy(buffer, name, FILE_TYPE_BUFLEN);
for (k = 0; k < (int)(sizeof(format_map) / sizeof(format_map [0])); k++) {- if (format_map[k].len > 0 && strncmp(name, format_map[k].ext, format_map[k].len) == 0)
- return format_map[k].format;
- else if (strcmp(buffer, format_map[k].ext) == 0)
+ if (strcmp(buffer, format_map[k].ext) == 0)
return format_map[k].format;
}
--
⑨