diff options
author | Andreas Sturmlechner <asturm@gentoo.org> | 2017-12-17 23:56:12 +0100 |
---|---|---|
committer | Andreas Sturmlechner <asturm@gentoo.org> | 2017-12-17 23:56:39 +0100 |
commit | 571bc4e9199a5d7c150e7d4759da9ef888c980c9 (patch) | |
tree | 307d1d0372100d6cb892d5ad3d879eb75f7f22ee /media-libs/speexdsp | |
parent | media-tv/tvheadend: libdvben50221 is now effectively bundled (diff) | |
download | gentoo-571bc4e9199a5d7c150e7d4759da9ef888c980c9.tar.gz gentoo-571bc4e9199a5d7c150e7d4759da9ef888c980c9.tar.bz2 gentoo-571bc4e9199a5d7c150e7d4759da9ef888c980c9.zip |
media-libs/speexdsp: Fix rare overflow causing clipping in mumble
Closes: https://bugs.gentoo.org/548770
Package-Manager: Portage-2.3.19, Repoman-2.3.6
Diffstat (limited to 'media-libs/speexdsp')
-rw-r--r-- | media-libs/speexdsp/files/speexdsp-1.2_rc3-overflow.patch | 66 | ||||
-rw-r--r-- | media-libs/speexdsp/speexdsp-1.2_rc3-r2.ebuild | 58 |
2 files changed, 124 insertions, 0 deletions
diff --git a/media-libs/speexdsp/files/speexdsp-1.2_rc3-overflow.patch b/media-libs/speexdsp/files/speexdsp-1.2_rc3-overflow.patch new file mode 100644 index 000000000000..3a413625085e --- /dev/null +++ b/media-libs/speexdsp/files/speexdsp-1.2_rc3-overflow.patch @@ -0,0 +1,66 @@ +From a2133f5904ddb616b6578920bd2199f5accb484d Mon Sep 17 00:00:00 2001 +From: Tristan Matthews <tmatth@videolan.org> +Date: Fri, 24 Apr 2015 15:55:32 -0400 +Subject: [PATCH] preprocess: prevent rare overflow on overlap-add + +Reported-by: Fabian Henze <flyser42@gmx.de> +--- + libspeexdsp/arch.h | 3 +++ + libspeexdsp/preprocess.c | 2 +- + libspeexdsp/resample.c | 6 ------ + 3 files changed, 4 insertions(+), 7 deletions(-) + +diff --git a/libspeexdsp/arch.h b/libspeexdsp/arch.h +index 6b3bc5d..c2de991 100644 +--- a/libspeexdsp/arch.h ++++ b/libspeexdsp/arch.h +@@ -101,6 +101,8 @@ typedef spx_word32_t spx_sig_t; + #define SIG_SHIFT 14 + #define GAIN_SHIFT 6 + ++#define WORD2INT(x) ((x) < -32767 ? -32768 : ((x) > 32766 ? 32767 : (x))) ++ + #define VERY_SMALL 0 + #define VERY_LARGE32 ((spx_word32_t)2147483647) + #define VERY_LARGE16 ((spx_word16_t)32767) +@@ -203,6 +205,7 @@ typedef float spx_word32_t; + #define DIV32(a,b) (((spx_word32_t)(a))/(spx_word32_t)(b)) + #define PDIV32(a,b) (((spx_word32_t)(a))/(spx_word32_t)(b)) + ++#define WORD2INT(x) ((x) < -32767.5f ? -32768 : ((x) > 32766.5f ? 32767 : floor(.5+(x)))) + + #endif + +diff --git a/libspeexdsp/preprocess.c b/libspeexdsp/preprocess.c +index c080581..3053eb5 100644 +--- a/libspeexdsp/preprocess.c ++++ b/libspeexdsp/preprocess.c +@@ -980,7 +980,7 @@ EXPORT int speex_preprocess_run(SpeexPreprocessState *st, spx_int16_t *x) + + /* Perform overlap and add */ + for (i=0;i<N3;i++) +- x[i] = st->outbuf[i] + st->frame[i]; ++ x[i] = WORD2INT(ADD32(EXTEND32(st->outbuf[i]), EXTEND32(st->frame[i]))); + for (i=0;i<N4;i++) + x[N3+i] = st->frame[N3+i]; + +diff --git a/libspeexdsp/resample.c b/libspeexdsp/resample.c +index 4940a64..4e47d67 100644 +--- a/libspeexdsp/resample.c ++++ b/libspeexdsp/resample.c +@@ -83,12 +83,6 @@ static void speex_free (void *ptr) {free(ptr);} + #define M_PI 3.14159265358979323846 + #endif + +-#ifdef FIXED_POINT +-#define WORD2INT(x) ((x) < -32767 ? -32768 : ((x) > 32766 ? 32767 : (x))) +-#else +-#define WORD2INT(x) ((x) < -32767.5f ? -32768 : ((x) > 32766.5f ? 32767 : floor(.5+(x)))) +-#endif +- + #define IMAX(a,b) ((a) > (b) ? (a) : (b)) + #define IMIN(a,b) ((a) < (b) ? (a) : (b)) + +-- +2.1.4 + diff --git a/media-libs/speexdsp/speexdsp-1.2_rc3-r2.ebuild b/media-libs/speexdsp/speexdsp-1.2_rc3-r2.ebuild new file mode 100644 index 000000000000..ef469e1dd724 --- /dev/null +++ b/media-libs/speexdsp/speexdsp-1.2_rc3-r2.ebuild @@ -0,0 +1,58 @@ +# Copyright 1999-2017 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +EAPI=6 +inherit autotools flag-o-matic multilib-minimal + +MY_P=${P/_} +MY_P=${MY_P/_p/.} + +DESCRIPTION="Audio compression format designed for speech -- DSP" +HOMEPAGE="https://www.speex.org/" +SRC_URI="https://downloads.xiph.org/releases/speex/${MY_P}.tar.gz" + +LICENSE="BSD" +SLOT="0" +KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~mips ~ppc ~ppc64 ~sh ~sparc ~x86 ~amd64-fbsd ~x86-fbsd ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos ~sparc-solaris ~x86-solaris" +IUSE="cpu_flags_x86_sse cpu_flags_x86_sse2 cpu_flags_arm_neon static-libs" + +RDEPEND="!<media-libs/speex-1.2.0" +DEPEND="${RDEPEND} + virtual/pkgconfig" + +S=${WORKDIR}/${MY_P} + +PATCHES=( + "${FILESDIR}/${P}-configure.patch" + "${FILESDIR}/${P}-config_types.h.patch" + "${FILESDIR}/${P}-overflow.patch" +) + +src_prepare() { + default + + sed -i \ + -e 's:noinst_PROGRAMS:check_PROGRAMS:' \ + libspeexdsp/Makefile.am || die + + eautoreconf +} + +multilib_src_configure() { + append-lfs-flags + + # Can also be configured with one of: + # --enable-fixed-point (no floating point) + # --with-fft=proprietary-intel-mkl (mkl) + # --with-fft=gpl-fftw3 (fftw) + ECONF_SOURCE="${S}" econf \ + $(use_enable static-libs static) \ + $(use_enable cpu_flags_x86_sse sse) \ + $(use_enable cpu_flags_x86_sse2 sse2) \ + $(use_enable cpu_flags_arm_neon neon) +} + +multilib_src_install_all() { + default + find "${D}" -name '*.la' -delete || die +} |