Merge tag 'upstream/1.2.0' into tizen_base 50/286050/1 accepted/tizen/base/20230201.083439
authorSeungbae Shin <seungbae.shin@samsung.com>
Tue, 27 Dec 2022 02:25:23 +0000 (11:25 +0900)
committerSeungbae Shin <seungbae.shin@samsung.com>
Tue, 27 Dec 2022 02:25:52 +0000 (11:25 +0900)
Change-Id: I5ab92fa565d7a7ad00de81d9165d52427286a0a9

1  2 
Makefile.am
configure.ac
packaging/libsndfile.spec
src/aiff.c
src/common.h
src/flac.c
src/ogg_vorbis.c
src/sndfile.c
src/wav.c

diff --combined Makefile.am
@@@ -24,6 -24,7 +24,7 @@@ cmake_files = cmake/ClipMode.cmake cmak
        cmake/TestLargeFiles.cmake cmake/TestInline.c.in \
        cmake/FindOpus.cmake cmake/SndFileConfig.cmake.in \
        cmake/CheckCPUArch.cmake cmake/CheckCPUArch.c.in \
+       cmake/Findmp3lame.cmake cmake/FindMpg123.cmake \
        cmake/SetupABIVersions.cmake
  
  pkgconfig_DATA = sndfile.pc
@@@ -45,8 -46,10 +46,8 @@@ BUILT_SOURCES = src/test_endswap.
  
  SYMBOL_FILES = src/Symbols.gnu-binutils src/Symbols.darwin src/libsndfile-1.def src/Symbols.os2 src/Symbols.static
  
- EXTRA_DIST += include/sndfile.h.in src/config.h.in src/test_endswap.tpl src/test_endswap.def \
+ EXTRA_DIST += src/config.h.in src/test_endswap.tpl src/test_endswap.def \
        $(SYMBOL_FILES) src/create_symbols_file.py src/binheader_writef_check.py \
 -      src/GSM610/README src/GSM610/COPYRIGHT src/GSM610/ChangeLog \
 -      src/G72x/README src/G72x/README.original src/G72x/ChangeLog \
        src/make-static-lib-hidden-privates.sh \
        src/config.h.cmake
  
@@@ -59,27 -62,26 +60,26 @@@ endi
  #===============================================================================
  
  lib_LTLIBRARIES = src/libsndfile.la
- include_HEADERS = include/sndfile.hh
- nodist_include_HEADERS = include/sndfile.h
+ include_HEADERS = include/sndfile.h include/sndfile.hh
  src_libsndfile_la_CFLAGS = $(EXTERNAL_XIPH_CFLAGS) $(MPEG_CFLAGS)
  # MinGW requires -no-undefined if a DLL is to be built.
  src_libsndfile_la_LDFLAGS = -no-undefined -version-info $(SHARED_VERSION_INFO) $(SHLIB_VERSION_ARG)
 -src_libsndfile_la_SOURCES = src/sndfile.c src/aiff.c src/au.c src/avr.c src/caf.c src/dwd.c src/flac.c src/g72x.c src/htk.c src/ircam.c \
 +src_libsndfile_la_SOURCES = src/sndfile.c src/aiff.c src/au.c src/avr.c src/dwd.c src/flac.c src/htk.c src/ircam.c \
        src/macos.c src/mat4.c src/mat5.c src/nist.c src/paf.c src/pvf.c src/raw.c src/rx2.c src/sd2.c \
        src/sds.c src/svx.c src/txw.c src/voc.c src/wve.c src/w64.c src/wavlike.c src/wav.c src/xi.c src/mpc2k.c src/rf64.c \
        src/ogg.c src/ogg.h src/ogg_vorbis.c src/ogg_speex.c src/ogg_pcm.c src/ogg_opus.c src/ogg_vcomment.c src/ogg_vcomment.h \
        src/common.h src/sfconfig.h src/sfendian.h src/wavlike.h src/sf_unistd.h src/chanmap.h src/mpeg.c
  nodist_src_libsndfile_la_SOURCES = $(nodist_include_HEADERS)
 -src_libsndfile_la_LIBADD = src/GSM610/libgsm.la src/G72x/libg72x.la src/ALAC/libalac.la \
 +src_libsndfile_la_LIBADD = \
        src/libcommon.la $(EXTERNAL_XIPH_LIBS) -lm $(MPEG_LIBS)
  EXTRA_src_libsndfile_la_DEPENDENCIES = $(SYMBOL_FILES)
  
  noinst_LTLIBRARIES = src/libcommon.la
  src_libcommon_la_CFLAGS = $(EXTERNAL_XIPH_CFLAGS) $(MPEG_CFLAGS)
  src_libcommon_la_SOURCES = src/common.c src/file_io.c src/command.c src/pcm.c src/ulaw.c src/alaw.c \
 -      src/float32.c src/double64.c src/ima_adpcm.c src/ms_adpcm.c src/gsm610.c src/dwvw.c src/vox_adpcm.c \
 +      src/float32.c src/double64.c src/ima_adpcm.c src/ms_adpcm.c src/dwvw.c src/vox_adpcm.c \
        src/interleave.c src/strings.c src/dither.c src/cart.c src/broadcast.c src/audio_detect.c \
 -      src/ima_oki_adpcm.c src/ima_oki_adpcm.h src/alac.c src/chunk.c src/chanmap.c \
 +      src/ima_oki_adpcm.c src/ima_oki_adpcm.h src/chunk.c src/chanmap.c \
        src/windows.c src/id3.c src/id3.h src/nms_adpcm.c src/mpeg_decode.c src/mpeg_l3_encode.c src/mpeg.h $(WIN_VERSION_FILE)
  
  check_PROGRAMS = src/test_main
@@@ -89,6 -91,41 +89,6 @@@ src_test_main_SOURCES = src/test_main.
        src/test_binheader_writef.c src/test_nms_adpcm.c
  src_test_main_LDADD = src/libcommon.la
  
 -##############
 -# src/GSM610 #
 -##############
 -
 -noinst_LTLIBRARIES += src/GSM610/libgsm.la
 -src_GSM610_libgsm_la_SOURCES = src/GSM610/config.h src/GSM610/gsm.h src/GSM610/gsm610_priv.h \
 -      src/GSM610/add.c src/GSM610/code.c src/GSM610/decode.c src/GSM610/gsm_create.c \
 -      src/GSM610/gsm_decode.c src/GSM610/gsm_destroy.c src/GSM610/gsm_encode.c \
 -      src/GSM610/gsm_option.c src/GSM610/long_term.c src/GSM610/lpc.c src/GSM610/preprocess.c \
 -      src/GSM610/rpe.c src/GSM610/short_term.c src/GSM610/table.c
 -
 -############
 -# src/G72x #
 -############
 -
 -noinst_LTLIBRARIES += src/G72x/libg72x.la
 -src_G72x_libg72x_la_SOURCES = src/G72x/g72x.h src/G72x/g72x_priv.h \
 -      src/G72x/g721.c src/G72x/g723_16.c src/G72x/g723_24.c src/G72x/g723_40.c src/G72x/g72x.c
 -
 -check_PROGRAMS += src/G72x/g72x_test
 -src_G72x_g72x_test_SOURCES = src/G72x/g72x_test.c
 -src_G72x_g72x_test_LDADD = src/G72x/libg72x.la
 -
 -############
 -# src/ALAC #
 -############
 -
 -noinst_LTLIBRARIES += src/ALAC/libalac.la
 -src_ALAC_libalac_la_SOURCES = src/ALAC/ALACAudioTypes.h src/ALAC/ALACBitUtilities.h \
 -      src/ALAC/EndianPortable.h src/ALAC/aglib.h src/ALAC/dplib.h src/ALAC/matrixlib.h \
 -      src/ALAC/alac_codec.h src/ALAC/shift.h \
 -      src/ALAC/ALACBitUtilities.c src/ALAC/ag_dec.c \
 -      src/ALAC/ag_enc.c src/ALAC/dp_dec.c src/ALAC/dp_enc.c src/ALAC/matrix_dec.c \
 -      src/ALAC/matrix_enc.c src/ALAC/alac_decoder.c src/ALAC/alac_encoder.c
 -
  #===============================================================================
  # Generate an OS specific Symbols files. This is done when the author
  # builds the distribution tarball. There should be not need for the
diff --combined configure.ac
@@@ -3,7 -3,7 +3,7 @@@ dnl Copyright (C) 1999-2022  Erik de Ca
  dnl Require autoconf version >= 2.69
  AC_PREREQ([2.69])
  
- AC_INIT([libsndfile],[1.1.0],[sndfile@mega-nerd.com],
+ AC_INIT([libsndfile],[1.2.0],[sndfile@mega-nerd.com],
                [libsndfile],[http://libsndfile.github.io/libsndfile/])
  
  dnl Check whether we want to set defaults for CFLAGS, CXXFLAGS, CPPFLAGS and LDFLAGS
@@@ -88,7 -88,7 +88,7 @@@ dnl      to 0
  dnl   This is libtool version of library, we add it to `--version-info` property.
  
  m4_define([lt_current], [1])
- m4_define([lt_revision], [34])
+ m4_define([lt_revision], [35])
  m4_define([lt_age], [0])
  
  dnl This is ABI version for linker scripts, CMake uses the same format for
@@@ -154,7 -154,7 +154,7 @@@ AC_ARG_ENABLE([alsa]
        [AS_HELP_STRING([--disable-alsa], [disable ALSA support (default=autodetect)])], [], [enable_alsa=auto])
  
  AC_ARG_ENABLE([external-libs],
 -      [AS_HELP_STRING([--disable-external-libs], [disable use of FLAC, Ogg and Vorbis [[default=no]]])])
 +      [AS_HELP_STRING([--disable-external-libs], [disable use of Ogg and Vorbis [[default=no]]])])
  
  AC_ARG_ENABLE([mpeg],
        [AS_HELP_STRING([--disable-mpeg], [disable use of LAME/MPG123 for MPEG (MP3) [[defaults=no]]])])
@@@ -171,10 -171,8 +171,8 @@@ AC_ARG_ENABLE([test-coverage]
  AM_CONDITIONAL([ENABLE_TEST_COVERAGE], [test "x$enable_test_coverage" = "xyes"])
  
  AC_ARG_ENABLE([ossfuzzers],
-   [AS_HELP_STRING([--enable-ossfuzzers],
-     [Whether to generate the fuzzers for OSS-Fuzz])],
-   [have_ossfuzzers=yes], [have_ossfuzzers=no])
- AM_CONDITIONAL([USE_OSSFUZZERS], [test "x$have_ossfuzzers" = "xyes"])
+       [AS_HELP_STRING([--enable-ossfuzzers], [Whether to generate the fuzzers for OSS-Fuzz])])
+ AM_CONDITIONAL([USE_OSSFUZZERS], [test "x$enable_ossfuzzers" = "xyes"])
  
  AC_SUBST([LIB_FUZZING_ENGINE])
  AM_CONDITIONAL([USE_OSSFUZZ_FLAG], [test "x$LIB_FUZZING_ENGINE" = "x-fsanitize=fuzzer"])
@@@ -194,12 -192,6 +192,6 @@@ AC_CHECK_SIZEOF([size_t], [4]
  AC_CHECK_SIZEOF([int64_t], [8])
  AC_CHECK_SIZEOF([long long], [8])
  
- dnl ====================================================================================
- dnl  Find an appropriate type for sf_count_t.
- dnl  On systems supporting files larger than 2 Gig, sf_count_t must be a 64 bit value.
- dnl  Unfortunately there is more than one way of ensuring this so need to do some
- dnl  pretty rigourous testing here.
  dnl  Check for common 64 bit file offset types.
  AC_CHECK_SIZEOF([off_t], [1])
  
@@@ -209,25 -201,12 +201,12 @@@ AS_IF([test "x$enable_largefile:$ac_cv_
  
  AS_CASE([$host_os],
        [mingw32*], [
-               TYPEOF_SF_COUNT_T="__int64"
-               SF_COUNT_MAX="0x7FFFFFFFFFFFFFFFLL"
-               SIZEOF_SF_COUNT_T=8
                AC_DEFINE([__USE_MINGW_ANSI_STDIO], [1], [Set to 1 to use C99 printf/snprintf in MinGW.])
                ],
  
-       [linux-android*], [
-               TYPEOF_SF_COUNT_T="int64_t"
-               SF_COUNT_MAX="0x7FFFFFFFFFFFFFFFLL"
-               SIZEOF_SF_COUNT_T=8
-               ],
        [
-               SIZEOF_SF_COUNT_T=0
                AS_IF([test "x$ac_cv_sizeof_off_t" = "x8"], [
                                dnl If sizeof (off_t) is 8, no further checking is needed.
-                               TYPEOF_SF_COUNT_T="int64_t"
-                               SF_COUNT_MAX="0x7FFFFFFFFFFFFFFFLL"
-                               SIZEOF_SF_COUNT_T=8
                        ], [
                                dnl Save the old sizeof (off_t) value  and then unset it to see if it
                                dnl changes when Large File Support is enabled.
                                        ])
  
                                AC_CHECK_SIZEOF(off_t,1)
-                               AS_IF([test "x$ac_cv_sizeof_off_t" = "x8"], [
-                                               TYPEOF_SF_COUNT_T="int64_t"
-                                               SF_COUNT_MAX="0x7FFFFFFFFFFFFFFFLL"
-                                               SIZEOF_SF_COUNT_T=8
-                                       ], [test "x$TYPEOF_SF_COUNT_T" = "xunknown"], [
-                                               AS_ECHO([""])
-                                               AS_ECHO(["*** The configure process has determined that this system is capable"])
-                                               AS_ECHO(["*** of Large File Support but has not been able to find a type which"])
-                                               AS_ECHO(["*** is an unambiguous 64 bit file offset."])
-                                               AS_ECHO(["*** Please contact the author to help resolve this problem."])
-                                               AS_ECHO([""])
-                                               AC_MSG_ERROR([[Bad file offset type.]])
-                                       ])
                        ])
        ])
  
- AS_CASE([$host_vendor],
-       [vita], [
-               TYPEOF_SF_COUNT_T="int64_t"
-               SF_COUNT_MAX="0x7FFFFFFFFFFFFFFFLL"
-               SIZEOF_SF_COUNT_T=8
-       ])
- AS_IF([test "x$SIZEOF_SF_COUNT_T" = "x4"], [
-               SF_COUNT_MAX="0x7FFFFFFF"
-       ])
- AC_DEFINE_UNQUOTED([TYPEOF_SF_COUNT_T], [${TYPEOF_SF_COUNT_T}], [Set to long if unknown.])
- AC_SUBST(TYPEOF_SF_COUNT_T)
- AC_DEFINE_UNQUOTED([SIZEOF_SF_COUNT_T], [${SIZEOF_SF_COUNT_T}], [Set to sizeof (long) if unknown.])
- AC_SUBST(SIZEOF_SF_COUNT_T)
- AC_DEFINE_UNQUOTED([SF_COUNT_MAX], [${SF_COUNT_MAX}], [Set to maximum allowed value of sf_count_t type.])
- AC_SUBST(SF_COUNT_MAX)
  AC_TYPE_SSIZE_T
  
  dnl ====================================================================================
@@@ -333,7 -278,7 +278,7 @@@ AS_IF([test "x$cross_compiling" = "xno"
        ])
  
  dnl ====================================================================================
 -dnl  Check for Ogg, Vorbis and FLAC.
 +dnl  Check for Ogg, Vorbis.
  
  HAVE_EXTERNAL_XIPH_LIBS=0
  EXTERNAL_XIPH_CFLAGS=""
@@@ -347,8 -292,13 +292,8 @@@ PKG_INSTALLDI
  
  AS_IF([test -n "$PKG_CONFIG"], [
                AS_IF([test "x$enable_external_libs" = "xno"], [
 -                              AC_MSG_WARN([[*** External libs (FLAC, Ogg, Vorbis) disabled. ***]])
 +                              AC_MSG_WARN([[*** External libs (Ogg, Vorbis) disabled. ***]])
                        ], [
 -                              PKG_CHECK_MOD_VERSION(FLAC, flac >= 1.3.1, ac_cv_flac=yes, ac_cv_flac=no)
 -
 -                              dnl Make sure the FLAC_CFLAGS value is sane.
 -                              FLAC_CFLAGS=`echo $FLAC_CFLAGS | $SED "s|include/FLAC|include|"`
 -
                                PKG_CHECK_MOD_VERSION(OGG, ogg >= 1.3.0, ac_cv_ogg=yes, ac_cv_ogg=no)
  
                                AS_IF([test "x$enable_experimental" = "xyes"], [
                                enable_external_libs=yes
                        ])
  
 -                      AS_IF([test "x$ac_cv_flac$ac_cv_ogg$ac_cv_vorbis$ac_cv_vorbisenc$ac_cv_opus" = "xyesyesyesyesyes"], [
 +                      AS_IF([test "x$ac_cv_ogg$ac_cv_vorbis$ac_cv_vorbisenc$ac_cv_opus" = "xyesyesyesyes"], [
                                        HAVE_EXTERNAL_XIPH_LIBS=1
                                        enable_external_libs=yes
  
 -                                      EXTERNAL_XIPH_CFLAGS="$FLAC_CFLAGS $VORBIS_CFLAGS $VORBISENC_CFLAGS $SPEEX_CFLAGS $OPUS_CFLAGS $OGG_CFLAGS "
 -                                      EXTERNAL_XIPH_LIBS="$FLAC_LIBS $VORBIS_LIBS $VORBISENC_LIBS $SPEEX_LIBS $OPUS_LIBS $OGG_LIBS "
 -                                      EXTERNAL_XIPH_REQUIRE="flac ogg vorbis vorbisenc opus"
 +                                      EXTERNAL_XIPH_CFLAGS="$VORBIS_CFLAGS $VORBISENC_CFLAGS $SPEEX_CFLAGS $OPUS_CFLAGS $OGG_CFLAGS "
 +                                      EXTERNAL_XIPH_LIBS="$VORBIS_LIBS $VORBISENC_LIBS $SPEEX_LIBS $OPUS_LIBS $OGG_LIBS "
 +                                      EXTERNAL_XIPH_REQUIRE="ogg vorbis vorbisenc opus"
  
                                        if test x$ac_cv_speex = "xyes" ; then
                                                EXTERNAL_XIPH_REQUIRE="$EXTERNAL_XIPH_REQUIRE speex"
                                        fi
                                ], [
                                        AS_ECHO([""])
 -                                      AC_MSG_WARN([[*** One or more of the external libraries (ie libflac, libogg,]])
 +                                      AC_MSG_WARN([[*** One or more of the external libraries (ie libogg,]])
                                        AC_MSG_WARN([[*** libvorbis and libopus) is either missing (possibly only the development]])
                                        AC_MSG_WARN([[*** headers) or is of an unsupported version.]])
                                        AC_MSG_WARN([[***]])
                                ])
        ])
  
 -AC_DEFINE_UNQUOTED([HAVE_EXTERNAL_XIPH_LIBS], [$HAVE_EXTERNAL_XIPH_LIBS], [Will be set to 1 if flac, ogg, vorbis, and opus are available.])
 +AC_DEFINE_UNQUOTED([HAVE_EXTERNAL_XIPH_LIBS], [$HAVE_EXTERNAL_XIPH_LIBS], [Will be set to 1 if ogg, vorbis, and opus are available.])
  
  dnl ====================================================================================
  dnl  Check for MPEG libraris liblame
@@@ -734,6 -684,7 +679,7 @@@ AC_SUBST(SNDIO_LIBS
  AC_SUBST(EXTERNAL_XIPH_CFLAGS)
  AC_SUBST(EXTERNAL_XIPH_LIBS)
  AC_SUBST(EXTERNAL_XIPH_REQUIRE)
+ AC_SUBST(EXTERNAL_MPEG_LIBS)
  AC_SUBST(EXTERNAL_MPEG_REQUIRE)
  AC_SUBST(MPG123_CFLAGS)
  AC_SUBST(MPG123_LIBS)
@@@ -744,7 -695,7 +690,7 @@@ AC_SUBST(TEST_BINDIR
  
  AC_CONFIG_FILES([
        Makefile Octave/Makefile
-       src/version-metadata.rc include/sndfile.h
+       src/version-metadata.rc
        tests/test_wrapper.sh tests/pedantic-header-test.sh
        libsndfile.spec sndfile.pc
        Scripts/build-test-tarball.mk
@@@ -756,7 -707,7 +702,7 @@@ dnl ===================================
  AS_IF([test -z "$PKG_CONFIG"], [
                AS_ECHO(["    *****************************************************************"])
                AS_ECHO(["    ***          The pkg-config program is missing.               ***"])
 -              AS_ECHO(["    *** External FLAC/Ogg/Vorbis libs cannot be found without it. ***"])
 +              AS_ECHO(["    ***   External Ogg/Vorbis libs cannot be found without it.    ***"])
                AS_ECHO(["    ***       http://pkg-config.freedesktop.org/wiki/             ***"])
                AS_ECHO(["    *****************************************************************"])
        ])
@@@ -783,7 -734,7 +729,7 @@@ AC_MSG_RESULT(
  
      Experimental code : ................... ${enable_experimental:-no}
      Using ALSA in example programs : ...... ${enable_alsa:-no}
 -    External FLAC/Ogg/Vorbis/Opus : ....... ${enable_external_libs:-no}
 +    External Ogg/Vorbis/Opus : ............ ${enable_external_libs:-no}
      External MPEG Lame/MPG123 : ........... ${enable_mpeg:-no}
      Building Octave interface : ........... ${OCTAVE_BUILD}
  
index 63a6f4a,0000000..a047201
mode 100644,000000..100644
--- /dev/null
@@@ -1,87 -1,0 +1,87 @@@
- Version:        1.1.0
 +%define __spec_check_pre exit 0
 +Name:           libsndfile
++Version:        1.2.0
 +Release:        0
 +License:        LGPL-2.1+
 +Summary:        C library for reading and writing sound files
 +Group:          Multimedia/Audio
 +BuildRequires:  gcc-c++
 +BuildRequires:  libtool
 +BuildRequires:  python
 +BuildRequires:  pkg-config
 +BuildRequires:  autogen
 +BuildRequires:  pkgconfig(ogg)
 +BuildRequires:  pkgconfig(vorbis)
 +BuildRequires:  pkgconfig(opus)
 +Requires:       opus
 +Url:            https://github.com/libsndfile/libsndfile
 +Source:         libsndfile-%{version}.tar.gz
 +Source1001:     libsndfile.manifest
 +
 +%description
 +Libsndfile is a C library for reading and writing sound files, such as
 +AIFF, AU, and WAV files, through one standard interface.  It can
 +currently read and write 8, 16, 24, and 32-bit PCM files as well as
 +32-bit floating point WAV files and a number of compressed formats.
 +
 +
 +%package devel
 +Summary:        Development package for the libsndfile library
 +Group:          Development/Libraries
 +Requires:       %{name} = %{version}
 +Requires:       glibc-devel
 +Requires:       libstdc++-devel
 +
 +%description devel
 +This package contains the files needed to compile programs that use the
 +libsndfile library.
 +
 +%prep
 +%setup -q
 +cp %{SOURCE1001} .
 +
 +%build
 +%define warn_flags -W -Wall -Wstrict-prototypes -Wpointer-arith -Wno-unused-parameter
 +autoreconf --force --install
 +CFLAGS="%{optflags} %{warn_flags} -D__TIZEN__"
 +export CFLAGS
 +LDFLAGS="-ldl"
 +export LDFLAGS
 +%configure --disable-static \
 +    --disable-dependency-tracking \
 +    --disable-sqlite --disable-alsa
 +make %{?_smp_mflags}
 +
 +%check
 +pushd src
 +make check
 +popd
 +
 +%install
 +
 +%make_install
 +# remove programs; built in another spec file
 +rm -rf %{buildroot}%{_bindir}
 +rm -rf %{buildroot}%{_mandir}/man1
 +# remove binaries from examples directory
 +rm -rf %{buildroot}%{_datadir}/doc/libsndfile
 +
 +%post  -p /sbin/ldconfig
 +
 +%postun  -p /sbin/ldconfig
 +
 +%files
 +%manifest %{name}.manifest
 +%defattr(-, root, root)
 +%license COPYING
 +%{_libdir}/libsndfile.so.1*
 +
 +%files devel
 +%manifest %{name}.manifest
 +%defattr(-, root, root)
 +%{_libdir}/libsndfile.so
 +%{_includedir}/sndfile.h
 +%{_includedir}/sndfile.hh
 +%{_libdir}/pkgconfig/*.pc
 +
 +%changelog
diff --combined src/aiff.c
@@@ -360,6 -360,12 +360,6 @@@ aiff_open (SF_PRIVATE *psf
                                break ;
                /* Lite remove end */
  
 -              case SF_FORMAT_GSM610 :
 -                              error = gsm610_init (psf) ;
 -                              if (psf->sf.frames > comm_fmt.numSampleFrames)
 -                                      psf->sf.frames = comm_fmt.numSampleFrames ;
 -                              break ;
 -
                default : return SFE_UNIMPLEMENTED ;
                } ;
  
@@@ -398,7 -404,7 +398,7 @@@ aiff_read_header (SF_PRIVATE *psf, COMM
        char            *cptr ;
        int                     instr_found = 0, mark_found = 0 ;
  
-       if (psf->filelength > SF_PLATFORM_S64 (0xffffffff))
+       if (psf->filelength > 0xFFFFFFFFLL)
                psf_log_printf (psf, "Warning : filelength > 0xffffffff. This is bad!!!!\n") ;
  
        if ((paiff = psf->container_data) == NULL)
diff --combined src/common.h
  #error "This code is not designed to be compiled with a C++ compiler."
  #endif
  
- #ifdef INT64_C
- #     define  SF_PLATFORM_S64(x)              INT64_C (x)
- #elif (SIZEOF_LONG == 8)
- #     define  SF_PLATFORM_S64(x)              x##l
- #elif (SIZEOF_LONG_LONG == 8)
- #     define  SF_PLATFORM_S64(x)              x##ll
- #elif COMPILER_IS_GCC
- #     define  SF_PLATFORM_S64(x)              x##ll
- #elif OS_IS_WIN32
- #     define  SF_PLATFORM_S64(x)              x##I64
- #else
- #     error "Don't know how to define a 64 bit integer constant."
- #endif
  
  
  /*
  
  
  #define               SF_MAX_CHANNELS         1024
- /* Max FLAC sample rate : https://xiph.org/flac/format.html */
- #define               SF_MAX_SAMPLERATE       655350
  
  /*
  *     Macros for spliting the format file of SF_INFO into container type,
@@@ -894,6 -877,7 +877,6 @@@ int                w64_open        (SF_PRIVATE *psf) 
  int           wav_open        (SF_PRIVATE *psf) ;
  int           xi_open         (SF_PRIVATE *psf) ;
  int           flac_open       (SF_PRIVATE *psf) ;
 -int           caf_open        (SF_PRIVATE *psf) ;
  int           mpc2k_open      (SF_PRIVATE *psf) ;
  int           rf64_open       (SF_PRIVATE *psf) ;
  
@@@ -922,9 -906,12 +905,9 @@@ int               alaw_init               (SF_PRIVATE *psf) 
  int           float32_init    (SF_PRIVATE *psf) ;
  int           double64_init   (SF_PRIVATE *psf) ;
  int           dwvw_init               (SF_PRIVATE *psf, int bitwidth) ;
 -int           gsm610_init             (SF_PRIVATE *psf) ;
  int           nms_adpcm_init  (SF_PRIVATE *psf) ;
  int           vox_adpcm_init  (SF_PRIVATE *psf) ;
  int           flac_init               (SF_PRIVATE *psf) ;
 -int           g72x_init               (SF_PRIVATE * psf) ;
 -int           alac_init               (SF_PRIVATE *psf, const ALAC_DECODER_INFO * info) ;
  int           mpeg_init               (SF_PRIVATE *psf, int bitrate_mode, int write_metadata) ;
  
  int   dither_init             (SF_PRIVATE *psf, int mode) ;
@@@ -1023,6 -1010,7 +1006,6 @@@ int audio_detect (SF_PRIVATE * psf, AUD
  int id3_skip (SF_PRIVATE * psf) ;
  const char *id3_lookup_v1_genre (int number) ;
  
 -void  alac_get_desc_chunk_items (int subformat, uint32_t *fmt_flags, uint32_t *frames_per_packet) ;
  
  FILE *        psf_open_tmpfile (char * fname, size_t fnamelen) ;
  
diff --combined src/flac.c
@@@ -1,5 -1,5 +1,5 @@@
  /*
 -** Copyright (C) 2004-2017 Erik de Castro Lopo <erikd@mega-nerd.com>
 +** Copyright (C) 2004-2014 Erik de Castro Lopo <erikd@mega-nerd.com>
  ** Copyright (C) 2004 Tobias Gehrig <tgehrig@ira.uka.de>
  **
  ** This program is free software ; you can redistribute it and/or modify
@@@ -29,7 -29,7 +29,7 @@@
  #include      "sndfile.h"
  #include      "common.h"
  
 -#if HAVE_EXTERNAL_XIPH_LIBS
 +#if 0  /* HAVE_EXTERNAL_XIPH_LIBS : Disable for TIZEN */
  
  #include      <FLAC/stream_decoder.h>
  #include      <FLAC/stream_encoder.h>
  
  #define ENC_BUFFER_SIZE 8192
  
+ /*
+ ** READ_LOOP_MAX_LEN is the maximum 'len' that will be passed to
+ ** flac_read_loop().  This is somewhat arbitrary, but must be less
+ ** than (UINT_MAX - FLAC__MAX_CHANNELS * FLAC__MAX_BLOCK_SIZE) to
+ ** avoid overflows, and must also be a multiple of the number of
+ ** channels (which is between 1 and 8.)
+ */
+ #define READ_LOOP_MAX_LEN (0x10000 * 3 * 5 * 7)
  typedef enum
  {     PFLAC_PCM_SHORT = 50,
        PFLAC_PCM_INT = 51,
@@@ -977,7 -986,7 +986,7 @@@ flac_read_flac2s (SF_PRIVATE *psf, shor
  
        while (total < len)
        {       pflac->ptr = ptr + total ;
-               readlen = (len - total > 0x1000000) ? 0x1000000 : (unsigned) (len - total) ;
+               readlen = (len - total > READ_LOOP_MAX_LEN) ? READ_LOOP_MAX_LEN : (unsigned) (len - total) ;
                current = flac_read_loop (psf, readlen) ;
                if (current == 0)
                        break ;
@@@ -997,7 -1006,7 +1006,7 @@@ flac_read_flac2i (SF_PRIVATE *psf, int 
  
        while (total < len)
        {       pflac->ptr = ptr + total ;
-               readlen = (len - total > 0x1000000) ? 0x1000000 : (unsigned) (len - total) ;
+               readlen = (len - total > READ_LOOP_MAX_LEN) ? READ_LOOP_MAX_LEN : (unsigned) (len - total) ;
                current = flac_read_loop (psf, readlen) ;
                if (current == 0)
                        break ;
@@@ -1017,7 -1026,7 +1026,7 @@@ flac_read_flac2f (SF_PRIVATE *psf, floa
  
        while (total < len)
        {       pflac->ptr = ptr + total ;
-               readlen = (len - total > 0x1000000) ? 0x1000000 : (unsigned) (len - total) ;
+               readlen = (len - total > READ_LOOP_MAX_LEN) ? READ_LOOP_MAX_LEN : (unsigned) (len - total) ;
                current = flac_read_loop (psf, readlen) ;
                if (current == 0)
                        break ;
@@@ -1037,7 -1046,7 +1046,7 @@@ flac_read_flac2d (SF_PRIVATE *psf, doub
  
        while (total < len)
        {       pflac->ptr = ptr + total ;
-               readlen = (len - total > 0x1000000) ? 0x1000000 : (unsigned) (len - total) ;
+               readlen = (len - total > READ_LOOP_MAX_LEN) ? READ_LOOP_MAX_LEN : (unsigned) (len - total) ;
  
                current = flac_read_loop (psf, readlen) ;
                if (current == 0)
@@@ -1182,11 -1191,11 +1191,11 @@@ f2flac8_clip_array (const float *src, i
  
        for (int i = 0 ; i < count ; i++)
        {       scaled_value = src [i] * normfact ;
-               if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7F))
+               if (scaled_value >= (1.0 * 0x7F))
                {       dest [i] = 0x7F ;
                        continue ;
                        } ;
-               if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x10))
+               if (scaled_value <= (-8.0 * 0x10))
                {       dest [i] = -0x80 ;
                        continue ;
                        } ;
@@@ -1204,11 -1213,11 +1213,11 @@@ f2flac16_clip_array (const float *src, 
  
        for (int i = 0 ; i < count ; i++)
        {       scaled_value = src [i] * normfact ;
-               if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFF))
+               if (scaled_value >= (1.0 * 0x7FFF))
                {       dest [i] = 0x7FFF ;
                        continue ;
                        } ;
-               if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x1000))
+               if (scaled_value <= (-8.0 * 0x1000))
                {       dest [i] = -0x8000 ;
                        continue ;
                        } ;
@@@ -1224,12 -1233,12 +1233,12 @@@ f2flac24_clip_array (const float *src, 
  
        for (int i = 0 ; i < count ; i++)
        {       scaled_value = src [i] * normfact ;
-               if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFFFF))
+               if (scaled_value >= (1.0 * 0x7FFFFF))
                {       dest [i] = 0x7FFFFF ;
                        continue ;
                        } ;
  
-               if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x100000))
+               if (scaled_value <= (-8.0 * 0x100000))
                {       dest [i] = -0x800000 ;
                        continue ;
                        }
@@@ -1313,11 -1322,11 +1322,11 @@@ d2flac8_clip_array (const double *src, 
  
        for (int i = 0 ; i < count ; i++)
        {       scaled_value = src [i] * normfact ;
-               if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7F))
+               if (scaled_value >= (1.0 * 0x7F))
                {       dest [i] = 0x7F ;
                        continue ;
                        } ;
-               if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x10))
+               if (scaled_value <= (-8.0 * 0x10))
                {       dest [i] = -0x80 ;
                        continue ;
                        } ;
@@@ -1335,11 -1344,11 +1344,11 @@@ d2flac16_clip_array (const double *src
  
        for (int i = 0 ; i < count ; i++)
        {       scaled_value = src [i] * normfact ;
-               if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFF))
+               if (scaled_value >= (1.0 * 0x7FFF))
                {       dest [i] = 0x7FFF ;
                        continue ;
                        } ;
-               if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x1000))
+               if (scaled_value <= (-8.0 * 0x1000))
                {       dest [i] = -0x8000 ;
                        continue ;
                        } ;
@@@ -1357,11 -1366,11 +1366,11 @@@ d2flac24_clip_array (const double *src
  
        for (int i = 0 ; i < count ; i++)
        {       scaled_value = src [i] * normfact ;
-               if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFFFF))
+               if (scaled_value >= (1.0 * 0x7FFFFF))
                {       dest [i] = 0x7FFFFF ;
                        continue ;
                        } ;
-               if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x100000))
+               if (scaled_value <= (-8.0 * 0x100000))
                {       dest [i] = -0x800000 ;
                        continue ;
                        } ;
diff --combined src/ogg_vorbis.c
  
  #if HAVE_EXTERNAL_XIPH_LIBS
  
 +
  #include <ogg/ogg.h>
  #include <vorbis/codec.h>
 +
 +#ifdef __TIZEN__
 +#include <dlfcn.h> /* for dlopen */
 +#else
  #include <vorbis/vorbisenc.h>
 +#endif
  
  #include "ogg.h"
  
@@@ -149,10 -143,6 +149,10 @@@ typedef struc
        uint64_t pcm_end ;
        /* File offset of the start of the last page. */
        sf_count_t last_page ;
 +#ifdef __TIZEN__
 +      /* func ptr for encoder */
 +      void *dl;
 +#endif
  } VORBIS_PRIVATE ;
  
  static int
@@@ -274,9 -264,9 +274,9 @@@ vorbis_read_header (SF_PRIVATE *psf
                ogg_sync_fseek (psf, saved_offset, SEEK_SET) ;
                }
  
-       psf_log_printf (psf, "PCM offset  : %d\n", vdata->pcm_start) ;
+       psf_log_printf (psf, "PCM offset  : %D\n", vdata->pcm_start) ;
        if (vdata->pcm_end != (uint64_t) -1)
-               psf_log_printf (psf, "PCM end     : %d\n", vdata->pcm_end) ;
+               psf_log_printf (psf, "PCM end     : %D\n", vdata->pcm_end) ;
        else
                psf_log_printf (psf, "PCM end     : unknown\n") ;
  
        return 0 ;
  } /* vorbis_read_header */
  
 +
 +#ifdef __TIZEN__
 +#define VORBIS_ENC_SO_NAME "/usr/lib/libvorbisenc.so.2" /* FIXME : Any good way to avoid hardcoding? */
 +#define VORBIS_ENC_INIT_VBR "vorbis_encode_init_vbr"
 +
 +static int
 +_vorbis_encode_init(SF_PRIVATE *psf)
 +{
 +      int (*fn) (vorbis_info *, long, long, float);
 +      void *dl = NULL;
 +      VORBIS_PRIVATE *vdata = (VORBIS_PRIVATE *) psf->codec_data ;
 +
 +      /* load so */
 +      dl = dlopen(VORBIS_ENC_SO_NAME, RTLD_GLOBAL | RTLD_NOW);
 +      if (!dl) {
 +              psf_log_printf (psf, "failed to dlopen [%s], error [%s]\n", VORBIS_ENC_SO_NAME, dlerror());
 +              return -1;
 +      }
 +      dlerror();
 +
 +      vdata->dl = dl;
 +
 +      /* load symbol */
 +      fn = dlsym(dl, VORBIS_ENC_INIT_VBR);
 +      if (!fn) {
 +              psf_log_printf (psf, "failed to dlsym [%s], error [%s]\n", VORBIS_ENC_INIT_VBR, dlerror());
 +              return -1;
 +      }
 +      dlerror();
 +
 +      /* call function */
 +      return fn(&vdata->vinfo, psf->sf.channels, psf->sf.samplerate, vdata->quality);
 +}
 +#endif /* __TIZEN__ */
 +
  static int
  vorbis_write_header (SF_PRIVATE *psf, int UNUSED (calc_length))
  {
        vorbis_info_init (&vdata->vinfo) ;
  
        /* The style of encoding should be selectable here, VBR quality mode. */
 +#ifdef __TIZEN__
 +      ret = _vorbis_encode_init(psf);
 +#else
        ret = vorbis_encode_init_vbr (&vdata->vinfo, psf->sf.channels, psf->sf.samplerate, vdata->quality) ;
 +#endif
  
  #if 0
        ret = vorbis_encode_init (&vdata->vinfo, psf->sf.channels, psf->sf.samplerate, -1, 128000, -1) ; /* average bitrate mode */
@@@ -498,13 -449,6 +498,13 @@@ vorbis_close (SF_PRIVATE *psf
        vorbis_comment_clear (&vdata->vcomment) ;
        vorbis_info_clear (&vdata->vinfo) ;
  
 +#ifdef __TIZEN__
 +      if (vdata->dl) {
 +              dlclose(vdata->dl);
 +              vdata->dl = NULL;
 +      }
 +#endif
 +
        return 0 ;
  } /* vorbis_close */
  
@@@ -567,7 -511,8 +567,8 @@@ ogg_vorbis_open (SF_PRIVATE *psf
  
  static int
  vorbis_command (SF_PRIVATE *psf, int command, void * data, int datasize)
- {     VORBIS_PRIVATE *vdata = (VORBIS_PRIVATE *) psf->codec_data ;
+ {     OGG_PRIVATE* odata = psf->container_data ;
+       VORBIS_PRIVATE *vdata = (VORBIS_PRIVATE *) psf->codec_data ;
  
        switch (command)
        {       case SFC_SET_COMPRESSION_LEVEL :
                        psf_log_printf (psf, "%s : Setting SFC_SET_VBR_ENCODING_QUALITY to %f.\n", __func__, vdata->quality) ;
                        return SF_TRUE ;
  
+               case SFC_GET_OGG_STREAM_SERIALNO :
+                       if (data == NULL || datasize != sizeof (int32_t))
+                               return SF_FALSE ;
+                       *((int32_t *) data) = odata->ostream.serialno ;
+                       return SF_TRUE ;
                default :
                        return SF_FALSE ;
                } ;
@@@ -947,7 -899,7 +955,7 @@@ vorbis_seek_trysearch (SF_PRIVATE *psf
        search_target_gp = search_target_gp < target_gp ? target_gp - search_target_gp : 0 ;
  
        ret = ogg_stream_seek_page_search (psf, odata, search_target_gp, vdata->pcm_start,
-                       vdata->pcm_end, &best_gp, psf->dataoffset, vdata->last_page) ;
+                       vdata->pcm_end, &best_gp, psf->dataoffset, vdata->last_page, vdata->vinfo.rate) ;
        if (ret < 0)
                return ret ;
  
diff --combined src/sndfile.c
@@@ -2772,6 -2772,17 +2772,17 @@@ format_from_extension (SF_PRIVATE *psf
  } /* format_from_extension */
  
  static int
+ identify_mpeg (uint32_t marker)
+ {     if ((marker & MAKE_MARKER (0xFF, 0xE0, 0, 0)) == MAKE_MARKER (0xFF, 0xE0, 0, 0) && /* Frame sync */
+               (marker & MAKE_MARKER (0, 0x18, 0, 0)) != MAKE_MARKER (0, 0x08, 0, 0) && /* Valid MPEG version */
+               (marker & MAKE_MARKER (0, 0x06, 0, 0)) != MAKE_MARKER (0, 0, 0, 0) && /* Valid layer description */
+               (marker & MAKE_MARKER (0, 0, 0xF0, 0)) != MAKE_MARKER (0, 0, 0xF0, 0) && /* Valid bitrate */
+               (marker & MAKE_MARKER (0, 0, 0x0C, 0)) != MAKE_MARKER (0, 0, 0x0C, 0)) /* Valid samplerate */
+               return SF_FORMAT_MPEG ;
+       return 0 ;
+ } /* identify_mpeg */
+ static int
  guess_file_type (SF_PRIVATE *psf)
  {     uint32_t buffer [3], format ;
  
@@@ -2872,13 -2883,6 +2883,6 @@@ retry
        if (buffer [0] == MAKE_MARKER ('R', 'F', '6', '4') && buffer [2] == MAKE_MARKER ('W', 'A', 'V', 'E'))
                return SF_FORMAT_RF64 ;
  
-       if ((buffer [0] & MAKE_MARKER (0xFF, 0xE0, 0, 0)) == MAKE_MARKER (0xFF, 0xE0, 0, 0) && /* Frame sync */
-               (buffer [0] & MAKE_MARKER (0, 0x18, 0, 0)) != MAKE_MARKER (0, 0x08, 0, 0) && /* Valid MPEG version */
-               (buffer [0] & MAKE_MARKER (0, 0x06, 0, 0)) != MAKE_MARKER (0, 0, 0, 0) && /* Valid layer description */
-               (buffer [0] & MAKE_MARKER (0, 0, 0xF0, 0)) != MAKE_MARKER (0, 0, 0xF0, 0) && /* Valid bitrate */
-               (buffer [0] & MAKE_MARKER (0, 0, 0x0C, 0)) != MAKE_MARKER (0, 0, 0x0C, 0)) /* Valid samplerate */
-               return SF_FORMAT_MPEG ;
        if (buffer [0] == MAKE_MARKER ('I', 'D', '3', 2) || buffer [0] == MAKE_MARKER ('I', 'D', '3', 3)
                        || buffer [0] == MAKE_MARKER ('I', 'D', '3', 4))
        {       psf_log_printf (psf, "Found 'ID3' marker.\n") ;
                return 0 ;
                } ;
  
+       /* ID3v2 tags + MPEG */
+       if (psf->id3_header.len > 0 && (format = identify_mpeg (buffer [0])) != 0)
+               return format ;
        /* Turtle Beach SMP 16-bit */
        if (buffer [0] == MAKE_MARKER ('S', 'O', 'U', 'N') && buffer [1] == MAKE_MARKER ('D', ' ', 'S', 'A'))
                return 0 ;
        if (buffer [0] == MAKE_MARKER ('a', 'j', 'k', 'g'))
                return 0 /*-SF_FORMAT_SHN-*/ ;
  
-       /* This must be the last one. */
+       /* This must be (almost) the last one. */
        if (psf->filelength > 0 && (format = try_resource_fork (psf)) != 0)
                return format ;
  
+       /* MPEG with no ID3v2 tags. Only have the MPEG sync header for
+        * identification and it is quite brief, and prone to false positives.
+        * Check for this last, even after resource forks. */
+       if (psf->id3_header.len == 0 && (format = identify_mpeg (buffer [0])) != 0)
+               return format ;
        return 0 ;
  } /* guess_file_type */
  
  
  static int
  validate_sfinfo (SF_INFO *sfinfo)
- {     if ((sfinfo->samplerate < 1) || (sfinfo->samplerate > SF_MAX_SAMPLERATE))
+ {     if (sfinfo->samplerate < 1)
                return 0 ;
        if (sfinfo->frames < 0)
                return 0 ;
@@@ -3252,6 -3266,10 +3266,6 @@@ psf_open_file (SF_PRIVATE *psf, SF_INF
                                error = flac_open (psf) ;
                                break ;
  
 -              case    SF_FORMAT_CAF :
 -                              error = caf_open (psf) ;
 -                              break ;
 -
                case    SF_FORMAT_MPC2K :
                                error = mpc2k_open (psf) ;
                                break ;
diff --combined src/wav.c
+++ b/src/wav.c
@@@ -269,6 -269,10 +269,6 @@@ wav_open  (SF_PRIVATE *psf
                                        error = wavlike_msadpcm_init (psf, blockalign, framesperblock) ;
                                        break ;
  
 -              case SF_FORMAT_G721_32 :
 -                                      error = g72x_init (psf) ;
 -                                      break ;
 -
                case SF_FORMAT_NMS_ADPCM_16 :
                case SF_FORMAT_NMS_ADPCM_24 :
                case SF_FORMAT_NMS_ADPCM_32 :
  
                /* Lite remove end */
  
 -              case SF_FORMAT_GSM610 :
 -                                      error = gsm610_init (psf) ;
 -                                      break ;
 -
                case SF_FORMAT_MPEG_LAYER_III :
                                        error = mpeg_init (psf, SF_BITRATE_MODE_CONSTANT, SF_FALSE) ;
                                        break ;
@@@ -302,7 -310,7 +302,7 @@@ wav_read_header    (SF_PRIVATE *psf, int *
        uint32_t        marker, chunk_size = 0, RIFFsize = 0, done = 0 ;
        int                     parsestage = 0, error, format = 0 ;
  
-       if (psf->is_pipe == 0 && psf->filelength > SF_PLATFORM_S64 (0xffffffff))
+       if (psf->is_pipe == 0 && psf->filelength > 0xFFFFFFFFLL)
                psf_log_printf (psf, "Warning : filelength > 0xffffffff. This is bad!!!!\n") ;
  
        if ((wpriv = psf->container_data) == NULL)