--- speex-1.2~rc1+git20090708+a6d05eb.orig/debian/speex-doc.docs +++ speex-1.2~rc1+git20090708+a6d05eb/debian/speex-doc.docs @@ -0,0 +1,2 @@ +doc/*.pdf +doc/html --- speex-1.2~rc1+git20090708+a6d05eb.orig/debian/compat +++ speex-1.2~rc1+git20090708+a6d05eb/debian/compat @@ -0,0 +1 @@ +4 --- speex-1.2~rc1+git20090708+a6d05eb.orig/debian/speex.install +++ speex-1.2~rc1+git20090708+a6d05eb/debian/speex.install @@ -0,0 +1 @@ +usr/bin --- speex-1.2~rc1+git20090708+a6d05eb.orig/debian/watch +++ speex-1.2~rc1+git20090708+a6d05eb/debian/watch @@ -0,0 +1,23 @@ +# Example watch control file for uscan +# Rename this file to "watch" and then you can run the "uscan" command +# to check for upstream updates and more. +# See uscan(1) for format + +# Compulsory line, this is a version 3 file +version=3 + +# Uncomment to examine a Webpage +# +#http://www.example.com/downloads.php #PACKAGE#-(.*)\.tar\.gz + +# Uncomment to examine a Webserver directory +opts=dversionmangle=s/\~beta/beta/ \ + http://downloads.us.xiph.org/releases/speex/speex-([\d.].*)\.tar\.gz debian svn-upgrade + +# Uncommment to examine a FTP server +#ftp://ftp.example.com/pub/#PACKAGE#-(.*)\.tar\.gz debian uupdate + +# Uncomment to find new files on sourceforge, for debscripts >= 2.9 +# http://sf.net/#PACKAGE#/#PACKAGE#-(.*)\.tar\.gz + + --- speex-1.2~rc1+git20090708+a6d05eb.orig/debian/copyright +++ speex-1.2~rc1+git20090708+a6d05eb/debian/copyright @@ -0,0 +1,46 @@ +This package was first debianized by A. Maitland Bottoms +on Tue, 16 Jul 2002 10:02:40 -0400. + +Downloaded from http://www.speex.org/ + +Upstream authors: +Jean-Marc Valin +David Rowe + +Copyright 2002-2007 Xiph.org Foundation +Copyright 2002-2007 Jean-Marc Valin +Copyright 2005-2007 Analog Devices Inc. +Copyright 2005-2007 Commonwealth Scientific and Industrial Research + Organisation (CSIRO) +Copyright 1993, 2002, 2006 David Rowe +Copyright 2003 EpicGames +Copyright 1992-1994 Jutta Degener, Carsten Bormann + +License: + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +- Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +- Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. + +- Neither the name of the Xiph.org Foundation nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --- speex-1.2~rc1+git20090708+a6d05eb.orig/debian/speex-doc.doc-base +++ speex-1.2~rc1+git20090708+a6d05eb/debian/speex-doc.doc-base @@ -0,0 +1,15 @@ +Document: speex-docs +Title: Speex codec and API documentation +Author: Jean-Marc Valin, David Rowe +Abstract: The PDF documentation describes the Speex codec and the command line + and C interfaces provided by the reference implementation. The HTML docs are + generated by parsing the source with doxygen, to generate the most current API + reference documentation from it. +Section: Programming/C + +Format: PDF +Files: /usr/share/doc/speex-doc/manual.pdf.gz + +Format: HTML +Index: /usr/share/doc/speex-doc/html/index.html +Files: /usr/share/doc/speex-doc/html/* --- speex-1.2~rc1+git20090708+a6d05eb.orig/debian/control +++ speex-1.2~rc1+git20090708+a6d05eb/debian/control @@ -0,0 +1,103 @@ +Source: speex +Section: sound +Priority: optional +Maintainer: Ubuntu Developers +XSBC-Original-Maintainer: Debian VoIP Team +Uploaders: Ron Lee , + Mark Purcell , + Kilian Krause +Build-Depends: debhelper (>> 8.1.3), libogg-dev, dpkg-dev (>= 1.13.19), + autoconf, automake, libtool, pkg-config, quilt (>= 0.46-7~) +Build-Depends-Indep: doxygen, graphviz +Standards-Version: 3.8.0 +Homepage: http://www.speex.org/ +XS-Debian-Vcs-Svn: svn://svn.debian.org/pkg-voip/speex/trunk/ +XS-Debian-Vcs-Browser: http://svn.debian.org/wsvn/pkg-voip/speex/?op=log + +Package: speex +Architecture: any +Depends: ${shlibs:Depends} +Description: The Speex codec command line tools + Speex is an audio codec especially designed for compressing voice at low + bit-rates for applications such as voice over IP (VoIP). In some senses, + it is meant to be complementary to the Vorbis codec which places a greater + emphasis on high-quality music reproduction. + . + This package contains the encoder and decoder command-line applications. + +Package: libspeex1 +Architecture: any +Multi-Arch: same +Section: libs +Pre-Depends: ${misc:Pre-Depends} +Depends: ${shlibs:Depends} +Suggests: speex +Conflicts: libopal-2.2 (<= 2.2.11~dfsg1-3), + libopal-2.2-develop (<= 2.2.11~dfsg1-3), + libopal-2.2-ptrace (<= 2.2.11~dfsg1-3), + libopal-2.2.0, + libiaxclient1 (<= 2.0.2-1), + asterisk (<=1:1.4.18.1~dfsg-1), + libmediastreamer0 (<= 2.1.0-1) +Description: The Speex codec runtime library + Speex is an audio codec especially designed for compressing voice at low + bit-rates for applications such as voice over IP (VoIP). In some senses, + it is meant to be complementary to the Vorbis codec which places a greater + emphasis on high-quality music reproduction. + . + This package provides the speex runtime library. + +Package: libspeex-dev +Architecture: any +Multi-Arch: same +Section: libdevel +Depends: libspeex1 (= ${binary:Version}) +Suggests: pkg-config +Description: The Speex codec library development files + Speex is an audio codec especially designed for compressing voice at low + bit-rates for applications such as voice over IP (VoIP). In some senses, + it is meant to be complementary to the Vorbis codec which places a greater + emphasis on high-quality music reproduction. + . + This package provides the speex library headers and development files. + +Package: libspeexdsp1 +Architecture: any +Multi-Arch: same +Section: libs +Pre-Depends: ${misc:Pre-Depends} +Depends: ${shlibs:Depends} +Description: The Speex extended runtime library + Speex is an audio codec especially designed for compressing voice at low + bit-rates for applications such as voice over IP (VoIP). In some senses, + it is meant to be complementary to the Vorbis codec which places a greater + emphasis on high-quality music reproduction. + . + This package provides the runtime library of additional functions that + are part of the Speex distribution. + +Package: libspeexdsp-dev +Architecture: any +Multi-Arch: same +Section: libdevel +Depends: libspeexdsp1 (= ${binary:Version}), libspeex-dev (= ${binary:Version}) +Suggests: pkg-config +Description: The Speex extended library development files + Speex is an audio codec especially designed for compressing voice at low + bit-rates for applications such as voice over IP (VoIP). In some senses, + it is meant to be complementary to the Vorbis codec which places a greater + emphasis on high-quality music reproduction. + . + This package provides the speex extended library headers and development files. + +Package: speex-doc +Architecture: all +Section: doc +Suggests: speex +Description: Documentation for speex + Speex is an audio codec especially designed for compressing voice at low + bit-rates for applications such as voice over IP (VoIP). In some senses, + it is meant to be complementary to the Vorbis codec which places a greater + emphasis on high-quality music reproduction. + . + This package contains the Speex documentation. --- speex-1.2~rc1+git20090708+a6d05eb.orig/debian/libspeex-dev.install +++ speex-1.2~rc1+git20090708+a6d05eb/debian/libspeex-dev.install @@ -0,0 +1,10 @@ +usr/include/speex/speex.h +usr/include/speex/speex_bits.h +usr/include/speex/speex_callbacks.h +usr/include/speex/speex_config_types.h +usr/include/speex/speex_header.h +usr/include/speex/speex_stereo.h +usr/include/speex/speex_types.h +usr/lib/*/libspeex.a +usr/lib/*/libspeex.so +usr/lib/*/pkgconfig/speex.pc --- speex-1.2~rc1+git20090708+a6d05eb.orig/debian/docs +++ speex-1.2~rc1+git20090708+a6d05eb/debian/docs @@ -0,0 +1,4 @@ +AUTHORS +NEWS +README +TODO --- speex-1.2~rc1+git20090708+a6d05eb.orig/debian/libspeex1.install +++ speex-1.2~rc1+git20090708+a6d05eb/debian/libspeex1.install @@ -0,0 +1 @@ +usr/lib/*/libspeex.so.* --- speex-1.2~rc1+git20090708+a6d05eb.orig/debian/changelog +++ speex-1.2~rc1+git20090708+a6d05eb/debian/changelog @@ -0,0 +1,418 @@ +speex (1.2~rc1+git20090708+a6d05eb-1linaro4) oneiric; urgency=low + + * debian/patches/neon-autodetection.patch: + - Refresh patch to avoid FTBFS + + -- Ricardo Salveti de Araujo Mon, 26 Mar 2012 07:39:02 -0300 + +speex (1.2~rc1+git20090708+a6d05eb-1linaro3) oneiric; urgency=low + + * debian/patches/neon-autodetection.patch: + - Adding patch for neon-autodetection (provided by the MMWG) + + -- Ricardo Salveti de Araujo Mon, 26 Mar 2012 07:09:01 -0300 + +speex (1.2~rc1+git20090708+a6d05eb-1linaro2) oneiric; urgency=low + + * Rebuild to generate dbgsym packages + + -- Ricardo Salveti de Araujo Sat, 17 Dec 2011 19:36:34 -0200 + +speex (1.2~rc1+git20090708+a6d05eb-1linaro1) oneiric; urgency=low + + * New upstream snapshot + * debian/rules: calling autogen.sh and enabling neon + * debian/control: setting up the new build-depends + * debian/patches/enable-neon.patch: enable neon support + + -- Ricardo Salveti de Araujo Tue, 22 Nov 2011 05:24:17 -0200 + +speex (1.2~rc1-1ubuntu2) oneiric; urgency=low + + * Build for multiarch. LP: #825342. + + -- Steve Langasek Fri, 12 Aug 2011 12:11:03 -0700 + +speex (1.2~rc1-1ubuntu1) lucid; urgency=low + + * Drop ARMv4 configuration flags so ARM builds use floating point instead of + doing integer math since all SoCs supported by Ubuntu support VFP. Thanks + to Li Li for the fix. (LP: #528524) + + -- Michael Casadevall Mon, 29 Mar 2010 15:13:22 -0400 + +speex (1.2~rc1-1build1) lucid; urgency=low + + * rebuild rest of main for armel armv7/thumb2 optimization; + UbuntuSpec:mobile-lucid-arm-gcc-v7-thumb2 + + -- Alexander Sack Sun, 07 Mar 2010 01:07:51 +0100 + +speex (1.2~rc1-1) unstable; urgency=low + + * This one should be our release candidate for Lenny. + * Fixes a memory leak in the echo canceller. + * Less aggressive noise adaptation. + * Adds the channel decorrelation interface, which completes the planned + changes prior to freezing the 1.2 API. This doesn't affect any existing + code, so the possibilities for regression are slim. + + -- Ron Lee Thu, 24 Jul 2008 03:39:44 +0930 + +speex (1.2~beta4-2) unstable; urgency=low + + * Move the extra sse libs to /usr/lib/sse2. That is a bit more elitist than + we need to be, but the linker already looks there without adding yet another + path permutation, and in practice most people who really care about how long + this is going to take won't find that sets the bar too high for them at all. + + Actually, it's apparently ldconfig rather than the linker that is missing + this path, but this will still do for now while people figure out if or when + that should be fixed too. + + -- Ron Lee Wed, 04 Jun 2008 03:48:19 +0930 + +speex (1.2~beta4-1) unstable; urgency=low + + * Upstream snapshot release. + * Fixes a speexdec regression causing all files to be decoded by as stereo + * Better support for arch specific optimisations. We build for both sse and + 487 on x86, and for fixed point with v4 asm for ARM. + + -- Ron Lee Wed, 04 Jun 2008 00:40:14 +0930 + +speex (1.2~beta3.2-1) unstable; urgency=low + + * New upstream snapshot. Reverts an accidental API change in beta3.1 + * Conflicts with the packages known to be affected by the speexdsp split. + Closes: #474253 + * Drop Uploaders that are no longer active, by request from #pkg-voip. + * Enable sse support for amd64. + + -- Ron Lee Mon, 14 Apr 2008 23:22:26 +0930 + +speex (1.2~beta3.1.ds-1) unstable; urgency=low + + * Include .pc fixes accepted upstream and the upstream doxygen config + from their git repo source. + * Try to convince cdbs not to build the docs for arch specific builds... + * That apparently cannot be done, so it's off to the bit bucket for this + vile opiate of the clueless. My patience with its stupidity is ended. + Closes: #474017 + + -- Ron Lee Thu, 03 Apr 2008 09:21:42 +0930 + +speex (1.2~beta3.1-1) experimental; urgency=low + + * New upstream snapshot. Includes the API support required for mumble. + Closes: #467361 + * Add a Homepage field and make the Vcs- fields less XS-ive. + Thanks to Patrick Matthäi for spotting this. + + -- Ron Lee Fri, 21 Mar 2008 08:19:59 +1030 + +speex (1.2~beta3-1) unstable; urgency=low + + * New upstream release. Splits the unstable API functions into their own + library. Apps which used them previously now need to link to libspeexdsp + as well. + * Fixes "Inconsistency in preprocessor API". Closes: #439516 + * Add myself to uploaders, with the blessing of #debian-voip + + -- Ron Lee Wed, 19 Mar 2008 05:49:20 +1030 + +speex (1.2~beta2-3.1) experimental; urgency=low + + * Local backport. no texlive build dep + + -- Ron Lee Wed, 28 Nov 2007 01:11:57 +1030 + +speex (1.2~beta2-3) experimental; urgency=low + + * debian/watch: Update. + * Bump soname to reflect API change. + * Add "This package contains Speex's documentation." to description of + speex-doc (Closes: #425985) + * Don't install misc.h.3 (Closes: #426064) + + -- Kilian Krause Sat, 01 Sep 2007 13:27:48 +0200 + +speex (1.2~beta2-2) experimental; urgency=low + + * Fix build-depends: doxygen needs to be listed in Build-Depends as well as + in Build-Depends-Indep according to policy. We don't just run the + build-arch and binary-arch for binary-builds, still. + - speex_1.2~beta2-1(experimental/powerpc/anakreon): Call of doxygen in + wrong target (Closes: #429188) + * Use ${binary:Version} for binNMU-safe uploads + Add dpkg-dev (>= 1.13.19) to Build-Depends + * Update Build-Depends on debhelper to allow use of debhelper.mk in CDBS. + * Ditch direct Depends of speex on libspeex1 as it'll come through CDBS + magic anyway. + + -- Kilian Krause Sat, 18 Aug 2007 22:16:45 +0200 + +speex (1.2~beta2-1) experimental; urgency=low + + * New upstream release + * Switch to cdbs + - Provide debian/compat. lintian : debian-rules-sets-DH_COMPAT + - Rework debian/*.install + - Add debian/speex-doc.manpages debian/speex-doc.docs + - change doxyfile OUTPUT_DIRECTORY = doc + * Add libspeex-dev Depends: pkg-config + * TeTeX transition: Add Build-Depends-Indep: texlive-extra-utils + + -- Mark Purcell Fri, 25 May 2007 10:21:16 +0100 + +speex (1.1.12-3) unstable; urgency=low + + * Ensure proper shlibs to circumvent problems like #403544. + + -- Kilian Krause Wed, 27 Dec 2006 15:51:49 +0100 + +speex (1.1.12-2) unstable; urgency=low + + * Update debian/watch for numeric upstream + * Add Depends: ${shlibs:Depends} to speex package + - Fixes: Missing dependency on libogg0 (Closes: #372844) + * debian/rules export DH_COMPAT=4 + * Ensure speex depends on exact version of libspeex1 + - Fixes: undefined symbol: speex_lib_get_mode (Closes: #341787) + + -- Mark Purcell Tue, 13 Jun 2006 04:06:23 +0100 + +speex (1.1.12-1) unstable; urgency=low + + * New upstream release + + -- Mark Purcell Sat, 18 Feb 2006 12:22:57 +0000 + +speex (1.1.11.1-1) unstable; urgency=low + + * New upstream release + + -- Mark Purcell Wed, 7 Dec 2005 23:22:21 +0000 + +speex (1.1.11-1) unstable; urgency=low + + * New upstream release + + -- A. Maitland Bottoms Fri, 25 Nov 2005 11:29:35 -0500 + +speex (1.1.10-2) unstable; urgency=low + + * Add debian/watch with svn-uupgrade + + -- Mark Purcell Sun, 30 Oct 2005 21:13:44 +0000 + +speex (1.1.10-1) unstable; urgency=low + + * New upstream release (Closes: #300968) + * Fix two encoding bugs (Closes: #307884) + * Version libspeex1 depends (Closes: #306159) + * Use dpatch in packaging + * debian/patches/01_default-quality-manpage.dpatch + manpage reports default quality in source + * debian/patches/02_configurable-VAD.dpatch + using integer percentage argument + * Debian VoIP upload. + + -- A. Maitland Bottoms Sat, 15 Oct 2005 16:55:56 -0400 + +speex (1.1.6-2) unstable; urgency=low + + * out of experimental for iaxclient (Closes: #292548) + * installs speex.pc in /usr/lib/pkgconfig (Closes: #267281) + * implements documented SPEEX_GET_QUALITY (Closes: #271052) + * update copyright file (Closes: #290207) + * default encoding quality is 8 (Closes: #295552) + + -- A. Maitland Bottoms Sat, 26 Feb 2005 22:33:22 -0500 + +speex (1.1.6-1) experimental; urgency=low + + * New upstream release + * Use DESTDIR instead of prefix for make install to keep libtool from adding + a rpath. + + -- A. Maitland Bottoms Thu, 12 Aug 2004 11:43:37 -0400 + +speex (1.0.rel.4-0.1) unstable; urgency=low + + * NMU rquested by maintainer. + * New upstream release. + * Use DESTDIR instead of prefix for make install to keep libtool from adding + a rpath. + + -- Andreas Metzler Sat, 24 Jul 2004 18:32:00 +0200 + +speex (1.1.5-1) experimental; urgency=low + + * New upstream release + + -- A. Maitland Bottoms Thu, 8 Jul 2004 08:29:31 -0400 + +speex (1.1.3-1) experimental; urgency=low + + * New upstream release + + -- A. Maitland Bottoms Thu, 25 Dec 2003 09:51:49 -0500 + +speex (1.1.2-1) experimental; urgency=low + + * New upstream release + + -- A. Maitland Bottoms Thu, 20 Nov 2003 00:22:40 -0500 + +speex (1.1-1) experimental; urgency=low + + * New upstream release + + -- A. Maitland Bottoms Sun, 21 Sep 2003 16:04:02 -0400 + +speex (1.0.rel.1-2) unstable; urgency=low + + * Update to policy version 3.6.0 + * Comply with policy section 8.5 + (Closes: #197289) + + -- A. Maitland Bottoms Sat, 12 Jul 2003 10:49:33 -0400 + +speex (1.0.rel.1-1) unstable; urgency=low + + * New upstream release + + -- A. Maitland Bottoms Fri, 6 Jun 2003 01:17:25 -0400 + +speex (1.0.rel-4) unstable; urgency=low + + * make use of dh_makeshlibs (Closes: #187003) + + -- A. Maitland Bottoms Mon, 7 Apr 2003 17:52:48 -0400 + +speex (1.0.rel-3) unstable; urgency=low + + * libspeex-dev moves to new libdevel section + + -- A. Maitland Bottoms Mon, 31 Mar 2003 17:51:01 -0500 + +speex (1.0.rel-2) unstable; urgency=low + + * Library policy: libspeex->libspeex1 + (Closes: #187003, #187004) + + -- A. Maitland Bottoms Mon, 31 Mar 2003 17:34:53 -0500 + +speex (1.0.rel-1) unstable; urgency=low + + * New upstream release + + -- A. Maitland Bottoms Mon, 24 Mar 2003 07:19:31 -0500 + +speex (1.0.rc3-1) unstable; urgency=low + + * New upstream release + + -- A. Maitland Bottoms Wed, 5 Mar 2003 21:59:13 -0500 + +speex (1.0.rc2-1) unstable; urgency=low + + * New upstream release + + -- A. Maitland Bottoms Wed, 29 Jan 2003 21:38:44 -0500 + +speex (1.0.rc1-3) unstable; urgency=low + + * libtoolize, automake, and autoconf for better mips support + * (closes: #177117) + + -- A. Maitland Bottoms Fri, 17 Jan 2003 09:44:01 -0500 + +speex (1.0.rc1-2) unstable; urgency=low + + * fixup vbr_nb_thresh array size in vbr.[ch] + + -- A. Maitland Bottoms Fri, 17 Jan 2003 00:30:07 -0500 + +speex (1.0.rc1-1) unstable; urgency=low + + * New upstream release + + -- A. Maitland Bottoms Thu, 16 Jan 2003 23:27:05 -0500 + +speex (1.0.beta4-1) unstable; urgency=low + + * New upstream release + * Now with VAD - Voice Activity Detection and + DTX - Discontinuous Transmission + + -- A. Maitland Bottoms Fri, 20 Dec 2002 17:53:02 -0500 + +speex (1.0.beta3-1) unstable; urgency=low + + * New upstream release + * These last new features before 1.0 are a new "ultra-wideband" + mode for encoding at 32 kHz (up to 48 kHz) and an intensity stereo mode. + + -- A. Maitland Bottoms Mon, 11 Nov 2002 08:15:08 -0500 + +speex (1.0.beta2-1) unstable; urgency=low + + * New upstream release + + -- A. Maitland Bottoms Mon, 28 Oct 2002 16:32:30 -0500 + +speex (1.0.beta1+-3) unstable; urgency=low + + * speex depends upon libspeex (Closes: #164824) + + -- A. Maitland Bottoms Tue, 15 Oct 2002 12:09:27 -0400 + +speex (1.0.beta1+-2) unstable; urgency=low + + * Correct doxygen invocation from debian/rules + + -- A. Maitland Bottoms Mon, 14 Oct 2002 19:42:55 -0400 + +speex (1.0.beta1+-1) unstable; urgency=low + + * Get the good bits in with a newer version number. + + -- A. Maitland Bottoms Mon, 14 Oct 2002 18:52:54 -0400 + +speex (1.0beta1-1) unstable; urgency=low + + * builds with pbuilder and without automake now. + * New Debian package. (Closes: #160609) + + -- A. Maitland Bottoms Sat, 12 Oct 2002 02:03:31 -0400 + +speex (1.0.beta1-1) unstable; urgency=low + + * New Debian package. (Closes: #160609) + * Xiph.org hosted upstream + * License changed to BSD + + -- A. Maitland Bottoms Fri, 11 Oct 2002 13:12:08 -0400 + +speex (0.8.1-1) unstable; urgency=low + + * New Debian package. (Closes: #160609) + * For use by openh323 and GnomeMeeting + * Update to 0.8.1 + + -- A. Maitland Bottoms Mon, 07 Oct 2002 21:40:26 -0400 + +speex (0.8.0-1) unstable; urgency=low + + * Update to 0.8.0 + + -- A. Maitland Bottoms Tue, 3 Sep 2002 22:06:32 -0400 + +speex (0.5.0-1) unstable; urgency=low + + * Initial Release. + + -- A. Maitland Bottoms Tue, 16 Jul 2002 22:02:40 -0400 + --- speex-1.2~rc1+git20090708+a6d05eb.orig/debian/speex-doc.manpages +++ speex-1.2~rc1+git20090708+a6d05eb/debian/speex-doc.manpages @@ -0,0 +1 @@ +doc/man/man3/* --- speex-1.2~rc1+git20090708+a6d05eb.orig/debian/libspeexdsp1.install +++ speex-1.2~rc1+git20090708+a6d05eb/debian/libspeexdsp1.install @@ -0,0 +1,2 @@ +usr/lib/*/libspeexdsp.so.* + --- speex-1.2~rc1+git20090708+a6d05eb.orig/debian/speex.manpages +++ speex-1.2~rc1+git20090708+a6d05eb/debian/speex.manpages @@ -0,0 +1 @@ +src/*.1 --- speex-1.2~rc1+git20090708+a6d05eb.orig/debian/rules +++ speex-1.2~rc1+git20090708+a6d05eb/debian/rules @@ -0,0 +1,149 @@ +#!/usr/bin/make -f +# Derived from: +# Sample debian/rules that uses debhelper, +# GNU copyright 1997 by Joey Hess. +# Copyright Ron Lee 2003, 2004, 2007, 2008 + +SHELL = /bin/bash + +#export DH_VERBOSE=1 +export DH_OPTIONS + +deb_source := $(shell dpkg-parsechangelog | sed -n 's/^Source: //p') +deb_version := $(shell dpkg-parsechangelog | sed -n 's/^Version: //p') +upstream_version := $(shell echo '$(deb_version)' | sed 's/.*://; s/-[^-]*$$//') +git_rev := $(shell echo '$(upstream_version)' | sed 's/.*+//') + +ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS))) + INSTALL_PROGRAM += -s +endif + +# These are used for cross-compiling and for saving the configure script +# from having to guess our platform (since we know it already) +DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE) +DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE) + +DEB_HOST_ARCH_CPU ?= $(shell dpkg-architecture -qDEB_HOST_ARCH_CPU) +DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH) + +include /usr/share/quilt/quilt.make + +objdir = objs +objdir_sse = objs-sse +objdir_fixedpoint = objs-fixed-point + +all_objs = $(objdir) $(objdir_sse) $(objdir_fixedpoint) +arch_objs = $(objdir) + +ifeq ($(DEB_HOST_ARCH_CPU),i386) +arch_objs += $(objdir_sse) +endif +ifeq ($(DEB_HOST_ARCH),armel) +EXTRA_CONFIG_FLAGS += --enable-neon +endif + +get-orig-source: + rm -rf $(deb_source)-$(upstream_version) + rm -f $(deb_source)-$(upstream_version).orig.tar.gz + git clone http://git.xiph.org/speex.git $(deb_source)-$(upstream_version) + cd $(deb_source)-$(upstream_version) && git archive \ + --format=tar \ + --prefix=$(deb_source)-$(upstream_version)/ \ + $(git_rev) \ + | gzip >../$(deb_source)_$(upstream_version).orig.tar.gz + rm -rf $(deb_source)-$(upstream_version) + +clean: unpatch + dh_testdir + dh_testroot + $(RM) *-stamp + $(RM) -r $(all_objs) doc/{html,man,latex} + dh_clean + + +# This first empty one is equivalent to declaring it .SECONDARY while we have +# no target specific variables to set. We don't want it removed by default as +# an unnamed intermediate file when the build target is completed. +$(objdir)/config.status: +$(objdir_sse)/config.status: EXTRA_CONFIG_FLAGS += --enable-sse +$(objdir_fixedpoint)/config.status: EXTRA_CONFIG_FLAGS += --enable-fixed-point + +configure: patch + ./autogen.sh + +%/config.status: configure + dh_testdir + mkdir -p $* + cd $* && ../configure --host=$(DEB_HOST_GNU_TYPE) \ + --build=$(DEB_BUILD_GNU_TYPE) \ + --prefix=/usr \ + --libdir=\$${prefix}/lib/$(DEB_HOST_MULTIARCH) \ + $(EXTRA_CONFIG_FLAGS) + +build: build-arch + +build-arch: $(foreach d,$(arch_objs),build-target-$(d)-stamp) +build-target-%-stamp : %/config.status + dh_testdir + cd $* && $(MAKE) + touch $@ + +build-indep: build-indep-stamp +build-indep-stamp: + dh_testdir + doxygen Doxyfile + touch $@ + + +install: install-arch install-indep + +install-arch: install-arch-stamp +install-arch-stamp: + dh_testdir + cd $(objdir) && $(MAKE) install DESTDIR=$(CURDIR)/debian/tmp + if [ -d "$(objdir_sse)" ]; then \ + dh_install -plibspeex1 $(objdir_sse)/libspeex/.libs/libspeex.so.* usr/lib/$(DEB_HOST_MULTIARCH)/sse2; \ + dh_install -plibspeexdsp1 $(objdir_sse)/libspeex/.libs/libspeexdsp.so.* usr/lib/$(DEB_HOST_MULTIARCH)/sse2; \ + fi + touch $@ + +install-indep: + + +binary: binary-indep binary-arch + +binary-indep: DH_OPTIONS = -i +binary-indep: build-indep install-indep + dh_testdir + dh_testroot + dh_installdocs + dh_installchangelogs + dh_compress + dh_fixperms + dh_installdeb + dh_gencontrol + dh_md5sums + dh_builddeb + +binary-arch: build-arch install-arch + dh_testdir + dh_testroot + dh_install -a --sourcedir=debian/tmp + dh_installdocs -a + dh_installman -a + dh_installchangelogs -a + dh_strip -a + dh_compress -a + dh_fixperms -a + dh_makeshlibs -plibspeex1 -V"libspeex1 (>= 1.2~beta3-1)" + dh_makeshlibs -plibspeexdsp1 -V"libspeexdsp1 (>= 1.2~beta3.2-1)" + dh_installdeb -a + dh_shlibdeps -a + dh_gencontrol -a + dh_md5sums -a + dh_builddeb -a + + +.PHONY: clean build build-arch build-indep install install-arch install-indep \ + binary binary-arch binary-indep get-orig-source + --- speex-1.2~rc1+git20090708+a6d05eb.orig/debian/libspeexdsp-dev.install +++ speex-1.2~rc1+git20090708+a6d05eb/debian/libspeexdsp-dev.install @@ -0,0 +1,8 @@ +usr/include/speex/speex_buffer.h +usr/include/speex/speex_echo.h +usr/include/speex/speex_jitter.h +usr/include/speex/speex_preprocess.h +usr/include/speex/speex_resampler.h +usr/lib/*/libspeexdsp.a +usr/lib/*/libspeexdsp.so +usr/lib/*/pkgconfig/speexdsp.pc --- speex-1.2~rc1+git20090708+a6d05eb.orig/debian/patches/enable-neon.patch +++ speex-1.2~rc1+git20090708+a6d05eb/debian/patches/enable-neon.patch @@ -0,0 +1,505 @@ +From oku at iki.fi Thu Sep 1 05:30:27 2011 +From: oku at iki.fi (Jyri Sarha) +Date: Thu, 1 Sep 2011 15:30:27 +0300 +Subject: [Speex-dev] [PATCH 1/5] resample: Calculate full sinc table (e.g. + no sinc interpolation) +In-Reply-To: <1314880231-13795-1-git-send-email-oku@iki.fi> +References: <1314880231-13795-1-git-send-email-oku@iki.fi> +Message-ID: <1314880231-13795-2-git-send-email-oku@iki.fi> + +From: Jyri Sarha + +On many systems taking couple of kilo-bytes for full sinc table is not +a problem. With a straight filter table the number of MAC operations +needed drops to one quarter. Also the inner loop of the filter becomes +more simple and easier to optimize. So the full sinc table version +runs much faster in most cases. The trade off is some kilo-bytes +bigger memory usage and more CPU needed when initializing the +resampler. +--- + libspeex/resample.c | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +diff --git a/libspeex/resample.c b/libspeex/resample.c +index 7b5a308..3829715 100644 +--- a/libspeex/resample.c ++++ b/libspeex/resample.c +@@ -585,7 +585,11 @@ static void update_filter(SpeexResamplerState *st) + } + + /* Choose the resampling type that requires the least amount of memory */ ++#ifdef RESAMPLE_FULL_SINC_TABLE ++ if (1) ++#else + if (st->den_rate <= st->oversample) ++#endif + { + spx_uint32_t i; + if (!st->sinc_table) +-- +1.7.4.1 + +From oku at iki.fi Thu Sep 1 05:30:28 2011 +From: oku at iki.fi (Jyri Sarha) +Date: Thu, 1 Sep 2011 15:30:28 +0300 +Subject: [Speex-dev] [PATCH 2/5] configure.ac: Add + --enable-resample-full-sinc-table conf flag +In-Reply-To: <1314880231-13795-1-git-send-email-oku@iki.fi> +References: <1314880231-13795-1-git-send-email-oku@iki.fi> +Message-ID: <1314880231-13795-3-git-send-email-oku@iki.fi> + +From: Jyri Sarha + +Use this flag to enable resampling with full sinc table. +--- + configure.ac | 5 +++++ + 1 files changed, 5 insertions(+), 0 deletions(-) + +diff --git a/configure.ac b/configure.ac +index 3179521..255c0b4 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -198,6 +198,11 @@ AC_ARG_ENABLE(fixed-point-debug, [ --enable-fixed-point-debug Debug fixed-poin + AC_DEFINE([FIXED_DEBUG], , [Debug fixed-point implementation]) + fi]) + ++AC_ARG_ENABLE(resample-full-sinc-table, [ --enable-resample-full-sinc-table Resample full SINC table], ++[if test "$enableval" = yes; then ++ AC_DEFINE([RESAMPLE_FULL_SINC_TABLE], , [Resample with full SINC table (no interpolation)]) ++fi]) ++ + AC_ARG_ENABLE(ti-c55x, [ --enable-ti-c55x Enable support for TI C55X DSP], + [if test "$enableval" = yes; then + has_char16=yes; +-- +1.7.4.1 + +From oku at iki.fi Thu Sep 1 05:30:29 2011 +From: oku at iki.fi (Jyri Sarha) +Date: Thu, 1 Sep 2011 15:30:29 +0300 +Subject: [Speex-dev] [PATCH 3/5] resample: Add NEON optimized + inner_product_single for fixed point +In-Reply-To: <1314880231-13795-1-git-send-email-oku@iki.fi> +References: <1314880231-13795-1-git-send-email-oku@iki.fi> +Message-ID: <1314880231-13795-4-git-send-email-oku@iki.fi> + +From: Jyri Sarha + +Semantics of inner_product_single have also been changed to contain +the final right shift and saturation so it can also be implemented in +the optimal way for the used platform. This change affects fixed point +calculations only. + +I also added a new fixed point macro SATURATE32PSHR(x, shift, a). It +does pretty much the same thing as SATURATE32(PSHR32(x, shift), a), +but it avoids over flowing in rounding up phase in the rare occasion +where x has already been saturated. It should also be slightly faster. +--- + libspeex/arch.h | 1 + + libspeex/fixed_generic.h | 4 ++ + libspeex/resample.c | 10 ++++- + libspeex/resample_neon.h | 100 ++++++++++++++++++++++++++++++++++++++++++++++ + 4 files changed, 113 insertions(+), 2 deletions(-) + create mode 100644 libspeex/resample_neon.h + +diff --git a/libspeex/arch.h b/libspeex/arch.h +index 3b47ed9..daa72a7 100644 +--- a/libspeex/arch.h ++++ b/libspeex/arch.h +@@ -171,6 +171,7 @@ typedef float spx_word32_t; + #define VSHR32(a,shift) (a) + #define SATURATE16(x,a) (x) + #define SATURATE32(x,a) (x) ++#define SATURATE32PSHR(x,shift,a) (x) + + #define PSHR(a,shift) (a) + #define SHR(a,shift) (a) +diff --git a/libspeex/fixed_generic.h b/libspeex/fixed_generic.h +index 3fb096e..0e012e9 100644 +--- a/libspeex/fixed_generic.h ++++ b/libspeex/fixed_generic.h +@@ -52,6 +52,10 @@ + #define SATURATE16(x,a) (((x)>(a) ? (a) : (x)<-(a) ? -(a) : (x))) + #define SATURATE32(x,a) (((x)>(a) ? (a) : (x)<-(a) ? -(a) : (x))) + ++#define SATURATE32PSHR(x,shift,a) (((x)>=(SHL32(a,shift))) ? (a) : \ ++ (x)<=-(SHL32(a,shift)) ? -(a) : \ ++ (PSHR32(x, shift))) ++ + #define SHR(a,shift) ((a) >> (shift)) + #define SHL(a,shift) ((spx_word32_t)(a) << (shift)) + #define PSHR(a,shift) (SHR((a)+((EXTEND32(1)<<((shift))>>1)),shift)) +diff --git a/libspeex/resample.c b/libspeex/resample.c +index 3829715..7957c61 100644 +--- a/libspeex/resample.c ++++ b/libspeex/resample.c +@@ -99,6 +99,10 @@ static void speex_free (void *ptr) {free(ptr);} + #include "resample_sse.h" + #endif + ++#ifdef _USE_NEON ++#include "resample_neon.h" ++#endif ++ + /* Numer of elements to allocate on the stack */ + #ifdef VAR_ARRAYS + #define FIXED_STACK_ALLOC 8192 +@@ -360,11 +364,12 @@ static int resampler_basic_direct_single(SpeexResamplerState *st, spx_uint32_t c + } + sum = accum[0] + accum[1] + accum[2] + accum[3]; + */ ++ sum = SATURATE32PSHR(sum, 15, 32767); + #else + sum = inner_product_single(sinc, iptr, N); + #endif + +- out[out_stride * out_sample++] = SATURATE32(PSHR32(sum, 15), 32767); ++ out[out_stride * out_sample++] = sum; + last_sample += int_advance; + samp_frac_num += frac_advance; + if (samp_frac_num >= den_rate) +@@ -470,12 +475,13 @@ static int resampler_basic_interpolate_single(SpeexResamplerState *st, spx_uint3 + + cubic_coef(frac, interp); + sum = MULT16_32_Q15(interp[0],SHR32(accum[0], 1)) + MULT16_32_Q15(interp[1],SHR32(accum[1], 1)) + MULT16_32_Q15(interp[2],SHR32(accum[2], 1)) + MULT16_32_Q15(interp[3],SHR32(accum[3], 1)); ++ sum = SATURATE32PSHR(sum, 15, 32767); + #else + cubic_coef(frac, interp); + sum = interpolate_product_single(iptr, st->sinc_table + st->oversample + 4 - offset - 2, N, st->oversample, interp); + #endif + +- out[out_stride * out_sample++] = SATURATE32(PSHR32(sum, 14), 32767); ++ out[out_stride * out_sample++] = sum; + last_sample += int_advance; + samp_frac_num += frac_advance; + if (samp_frac_num >= den_rate) +diff --git a/libspeex/resample_neon.h b/libspeex/resample_neon.h +new file mode 100644 +index 0000000..ba93e41 +--- /dev/null ++++ b/libspeex/resample_neon.h +@@ -0,0 +1,100 @@ ++/* Copyright (C) 2007-2008 Jean-Marc Valin ++ * Copyright (C) 2008 Thorvald Natvig ++ * Copyright (C) 2011 Texas Instruments ++ * author Jyri Sarha ++ */ ++/** ++ @file resample_neon.h ++ @brief Resampler functions (NEON version) ++*/ ++/* ++ Redistribution and use in source and binary forms, with or without ++ modification, are permitted provided that the following conditions ++ are met: ++ ++ - Redistributions of source code must retain the above copyright ++ notice, this list of conditions and the following disclaimer. ++ ++ - Redistributions in binary form must reproduce the above copyright ++ notice, this list of conditions and the following disclaimer in the ++ documentation and/or other materials provided with the distribution. ++ ++ - Neither the name of the Xiph.org Foundation nor the names of its ++ contributors may be used to endorse or promote products derived from ++ this software without specific prior written permission. ++ ++ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ++ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ++ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ++ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR ++ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ++ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, ++ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR ++ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ++ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING ++ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ++ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++*/ ++ ++#include ++ ++#ifdef FIXED_POINT ++#define OVERRIDE_INNER_PRODUCT_SINGLE ++/* Only works when len % 4 == 0 */ ++static inline int32_t inner_product_single(const int16_t *a, const int16_t *b, unsigned int len) ++{ ++ int32_t ret; ++ uint32_t remainder = len % 16; ++ len = len - remainder; ++ ++ asm volatile (" cmp %[len], #0\n" ++ " bne 1f\n" ++ " vld1.16 {d16}, [%[b]]!\n" ++ " vld1.16 {d20}, [%[a]]!\n" ++ " subs %[remainder], %[remainder], #4\n" ++ " vmull.s16 q0, d16, d20\n" ++ " beq 5f\n" ++ " b 4f\n" ++ "1:" ++ " vld1.16 {d16, d17, d18, d19}, [%[b]]!\n" ++ " vld1.16 {d20, d21, d22, d23}, [%[a]]!\n" ++ " subs %[len], %[len], #16\n" ++ " vmull.s16 q0, d16, d20\n" ++ " vmlal.s16 q0, d17, d21\n" ++ " vmlal.s16 q0, d18, d22\n" ++ " vmlal.s16 q0, d19, d23\n" ++ " beq 3f\n" ++ "2:" ++ " vld1.16 {d16, d17, d18, d19}, [%[b]]!\n" ++ " vld1.16 {d20, d21, d22, d23}, [%[a]]!\n" ++ " subs %[len], %[len], #16\n" ++ " vmlal.s16 q0, d16, d20\n" ++ " vmlal.s16 q0, d17, d21\n" ++ " vmlal.s16 q0, d18, d22\n" ++ " vmlal.s16 q0, d19, d23\n" ++ " bne 2b\n" ++ "3:" ++ " cmp %[remainder], #0\n" ++ " beq 5f\n" ++ "4:" ++ " vld1.16 {d16}, [%[b]]!\n" ++ " vld1.16 {d20}, [%[a]]!\n" ++ " subs %[remainder], %[remainder], #4\n" ++ " vmlal.s16 q0, d16, d20\n" ++ " bne 4b\n" ++ "5:" ++ " vaddl.s32 q0, d0, d1\n" ++ " vadd.s64 d0, d0, d1\n" ++ " vqmovn.s64 d0, q0\n" ++ " vqrshrn.s32 d0, q0, #15\n" ++ " vmov.s16 %[ret], d0[0]\n" ++ : [ret] "=&r" (ret), [a] "+r" (a), [b] "+r" (b), ++ [len] "+r" (len), [remainder] "+r" (remainder) ++ : ++ : "cc", "q0", ++ "d16", "d17", "d18", "d19", ++ "d20", "d21", "d22", "d23"); ++ ++ return ret; ++} ++#endif +-- +1.7.4.1 + +From oku at iki.fi Thu Sep 1 05:30:30 2011 +From: oku at iki.fi (Jyri Sarha) +Date: Thu, 1 Sep 2011 15:30:30 +0300 +Subject: [Speex-dev] [PATCH 4/5] configure.ac: Add ARM NEON support +In-Reply-To: <1314880231-13795-1-git-send-email-oku@iki.fi> +References: <1314880231-13795-1-git-send-email-oku@iki.fi> +Message-ID: <1314880231-13795-5-git-send-email-oku@iki.fi> + +From: Jyri Sarha + +Use --enable-neon to force NEON optimization on. The auto detection +should also work if your CFLAGS supports NEON. +--- + configure.ac | 32 +++++++++++++++++++++++++++++++- + 1 files changed, 31 insertions(+), 1 deletions(-) + +diff --git a/configure.ac b/configure.ac +index 255c0b4..08d3d5f 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -89,6 +89,23 @@ has_sse=no + ) + AC_MSG_RESULT($has_sse) + ++AC_MSG_CHECKING(for NEON in current arch/CFLAGS) ++AC_LINK_IFELSE([ ++AC_LANG_PROGRAM([[ ++#include ++int32x4_t testfunc(int16_t *a, int16_t *b) { ++ return vmull_s16(vld1_s16(a), vld1_s16(b)); ++} ++]])], ++[ ++has_neon=yes ++], ++[ ++has_neon=no ++] ++) ++AC_MSG_RESULT($has_neon) ++ + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -fvisibility=hidden" + AC_MSG_CHECKING(for ELF visibility) +@@ -148,6 +165,15 @@ has_sse=no + fi + ]) + ++AC_ARG_ENABLE(neon, [ --enable-neon Enable NEON support], [ ++if test "x$enableval" != xno; then ++has_neon=yes ++CFLAGS="$CFLAGS -O3 -march=armv7-a -mfpu=neon" ++else ++has_neon=no ++fi ++]) ++ + + FFT=smallft + +@@ -165,6 +191,10 @@ if test "$has_sse" = yes; then + AC_DEFINE([_USE_SSE], , [Enable SSE support]) + fi + ++if test "$has_neon" = yes; then ++ AC_DEFINE([_USE_NEON], , [Enable NEON support]) ++fi ++ + AC_ARG_ENABLE(float-api, [ --disable-float-api Disable the floating-point API], + [if test "$enableval" = no; then + AC_DEFINE([DISABLE_FLOAT_API], , [Disable all parts of the API that are using floats]) +@@ -198,7 +228,7 @@ AC_ARG_ENABLE(fixed-point-debug, [ --enable-fixed-point-debug Debug fixed-poin + AC_DEFINE([FIXED_DEBUG], , [Debug fixed-point implementation]) + fi]) + +-AC_ARG_ENABLE(resample-full-sinc-table, [ --enable-resample-full-sinc-table Resample full SINC table], ++AC_ARG_ENABLE(resample-full-sinc-table, [ --enable-resample-full-sinc-table Resample full SINC table (no interpolation)], + [if test "$enableval" = yes; then + AC_DEFINE([RESAMPLE_FULL_SINC_TABLE], , [Resample with full SINC table (no interpolation)]) + fi]) +-- +1.7.4.1 + +From oku at iki.fi Thu Sep 1 05:30:31 2011 +From: oku at iki.fi (Jyri Sarha) +Date: Thu, 1 Sep 2011 15:30:31 +0300 +Subject: [Speex-dev] [PATCH 5/5] resample: Add NEON optimized + inner_product_single for floating point +In-Reply-To: <1314880231-13795-1-git-send-email-oku@iki.fi> +References: <1314880231-13795-1-git-send-email-oku@iki.fi> +Message-ID: <1314880231-13795-6-git-send-email-oku@iki.fi> + +From: Jyri Sarha + +Also adds inline asm implementations of WORD2INT(x) macro for fixed +and floating point. +--- + libspeex/resample_neon.h | 101 ++++++++++++++++++++++++++++++++++++++++++++++ + 1 files changed, 101 insertions(+), 0 deletions(-) + +diff --git a/libspeex/resample_neon.h b/libspeex/resample_neon.h +index ba93e41..e7e981e 100644 +--- a/libspeex/resample_neon.h ++++ b/libspeex/resample_neon.h +@@ -39,6 +39,30 @@ + #include + + #ifdef FIXED_POINT ++#ifdef __thumb2__ ++static inline int32_t saturate_32bit_to_16bit(int32_t a) { ++ int32_t ret; ++ asm ("ssat %[ret], #16, %[a]" ++ : [ret] "=&r" (ret) ++ : [a] "r" (a) ++ : ); ++ return ret; ++} ++#else ++static inline int32_t saturate_32bit_to_16bit(int32_t a) { ++ int32_t ret; ++ asm ("vmov.s32 d0[0], %[a]\n" ++ "vqmovn.s32 d0, q0\n" ++ "vmov.s16 %[ret], d0[0]\n" ++ : [ret] "=&r" (ret) ++ : [a] "r" (a) ++ : "q0"); ++ return ret; ++} ++#endif ++#undef WORD2INT ++#define WORD2INT(x) (saturate_32bit_to_16bit(x)) ++ + #define OVERRIDE_INNER_PRODUCT_SINGLE + /* Only works when len % 4 == 0 */ + static inline int32_t inner_product_single(const int16_t *a, const int16_t *b, unsigned int len) +@@ -97,4 +121,81 @@ static inline int32_t inner_product_single(const int16_t *a, const int16_t *b, u + + return ret; + } ++#elif defined(FLOATING_POINT) ++ ++static inline int32_t saturate_float_to_16bit(float a) { ++ int32_t ret; ++ asm ("vmov.f32 d0[0], %[a]\n" ++ "vcvt.s32.f32 d0, d0, #15\n" ++ "vqrshrn.s32 d0, q0, #15\n" ++ "vmov.s16 %[ret], d0[0]\n" ++ : [ret] "=&r" (ret) ++ : [a] "r" (a) ++ : "q0"); ++ return ret; ++} ++#undef WORD2INT ++#define WORD2INT(x) (saturate_float_to_16bit(x)) ++ ++#define OVERRIDE_INNER_PRODUCT_SINGLE ++/* Only works when len % 4 == 0 */ ++static inline float inner_product_single(const float *a, const float *b, unsigned int len) ++{ ++ float ret; ++ uint32_t remainder = len % 16; ++ len = len - remainder; ++ ++ asm volatile (" cmp %[len], #0\n" ++ " bne 1f\n" ++ " vld1.32 {q4}, [%[b]]!\n" ++ " vld1.32 {q8}, [%[a]]!\n" ++ " subs %[remainder], %[remainder], #4\n" ++ " vmul.f32 q0, q4, q8\n" ++ " bne 4f\n" ++ " b 5f\n" ++ "1:" ++ " vld1.32 {q4, q5}, [%[b]]!\n" ++ " vld1.32 {q8, q9}, [%[a]]!\n" ++ " vld1.32 {q6, q7}, [%[b]]!\n" ++ " vld1.32 {q10, q11}, [%[a]]!\n" ++ " subs %[len], %[len], #16\n" ++ " vmul.f32 q0, q4, q8\n" ++ " vmul.f32 q1, q5, q9\n" ++ " vmul.f32 q2, q6, q10\n" ++ " vmul.f32 q3, q7, q11\n" ++ " beq 3f\n" ++ "2:" ++ " vld1.32 {q4, q5}, [%[b]]!\n" ++ " vld1.32 {q8, q9}, [%[a]]!\n" ++ " vld1.32 {q6, q7}, [%[b]]!\n" ++ " vld1.32 {q10, q11}, [%[a]]!\n" ++ " subs %[len], %[len], #16\n" ++ " vmla.f32 q0, q4, q8\n" ++ " vmla.f32 q1, q5, q9\n" ++ " vmla.f32 q2, q6, q10\n" ++ " vmla.f32 q3, q7, q11\n" ++ " bne 2b\n" ++ "3:" ++ " vadd.f32 q4, q0, q1\n" ++ " vadd.f32 q5, q2, q3\n" ++ " cmp %[remainder], #0\n" ++ " vadd.f32 q0, q4, q5\n" ++ " beq 5f\n" ++ "4:" ++ " vld1.32 {q6}, [%[b]]!\n" ++ " vld1.32 {q10}, [%[a]]!\n" ++ " subs %[remainder], %[remainder], #4\n" ++ " vmla.f32 q0, q6, q10\n" ++ " bne 4b\n" ++ "5:" ++ " vadd.f32 d0, d0, d1\n" ++ " vpadd.f32 d0, d0, d0\n" ++ " vmov.f32 %[ret], d0[0]\n" ++ : [ret] "=&r" (ret), [a] "+r" (a), [b] "+r" (b), ++ [len] "+l" (len), [remainder] "+l" (remainder) ++ : ++ : "cc", "q0", "q1", "q2", "q3", "q4", "q5", "q6", "q7", "q8", ++ "q9", "q10", "q11"); ++ return ret; ++} + #endif +-- +1.7.4.1 + + --- speex-1.2~rc1+git20090708+a6d05eb.orig/debian/patches/neon-autodetection.patch +++ speex-1.2~rc1+git20090708+a6d05eb/debian/patches/neon-autodetection.patch @@ -0,0 +1,278 @@ +From 7b5894c122707b8df573a637550733679d5bb25f Mon Sep 17 00:00:00 2001 +From: Rony Nandy +Date: Wed, 21 Mar 2012 16:16:19 +0530 +Subject: [PATCH 1/1] NEON autodetection patches + +--- + libspeex/resample.c | 131 ++++++++++++++++++++++++++++++++++++++++++++- + libspeex/resample_neon.h | 10 ++-- + 2 files changed, 133 insertions(+), 8 deletions(-) + +Index: speex-1.2~rc1+git20090708+a6d05eb/libspeex/resample.c +=================================================================== +--- speex-1.2~rc1+git20090708+a6d05eb.orig/libspeex/resample.c 2012-03-26 07:21:55.694337228 -0300 ++++ speex-1.2~rc1+git20090708+a6d05eb/libspeex/resample.c 2012-03-26 07:21:55.706337288 -0300 +@@ -57,10 +57,16 @@ + The latter both reduces CPU time and makes the algorithm more SIMD-friendly. + */ + ++#include ++#include ++#include ++#include ++ ++ + #ifdef HAVE_CONFIG_H + #include "config.h" + #endif +- ++#define LOCAL(x) x + #ifdef OUTSIDE_SPEEX + #include + static void *speex_alloc (int size) {return calloc(size,1);} +@@ -95,6 +101,7 @@ + #define NULL 0 + #endif + ++ + #ifdef _USE_SSE + #include "resample_sse.h" + #endif +@@ -103,6 +110,8 @@ + #include "resample_neon.h" + #endif + ++int neon_flag; ++ + /* Numer of elements to allocate on the stack */ + #ifdef VAR_ARRAYS + #define FIXED_STACK_ALLOC 8192 +@@ -257,7 +266,46 @@ + /*sum = frac*accum[1] + (1-frac)*accum[2];*/ + return interp[0]*func->table[ind] + interp[1]*func->table[ind+1] + interp[2]*func->table[ind+2] + interp[3]*func->table[ind+3]; + } ++volatile ElfW(auxv_t) *auxv = NULL; ++ ++LOCAL (ElfW(auxv_t) *)get_auxv(void) ++{ ++ FILE *auxv_f; ++ ElfW(auxv_t) auxv_struct; ++ int i = 0; ++ ++ if(auxv == NULL) { ++ auxv_f = fopen("/proc/self/auxv", "r"); ++ ++ if(auxv_f == 0) { ++ perror("Error opening file for reading"); ++ return 0; ++ } ++ auxv =(ElfW(auxv_t) *)malloc(getpagesize()); ++ ++ do ++ { ++ fread(&auxv_struct, sizeof(ElfW(auxv_t)), 1, auxv_f); ++ auxv[i] = auxv_struct; ++ i++; ++ } while(auxv_struct.a_type != AT_NULL); ++ } ++ return auxv; ++} ++ ++void ++init_simd (void) ++{ ++ char *env=NULL; ++ ElfW(auxv_t) *tauxv=(ElfW(auxv_t) *)auxv; ++ ++ while (tauxv && tauxv->a_type != AT_HWCAP) ++ tauxv++; ++ ++ if( tauxv && tauxv->a_un.a_val & HWCAP_NEON ) ++ neon_flag = 1; + ++} + #if 0 + #include + int main(int argc, char **argv) +@@ -306,7 +354,10 @@ + but I know it's MMSE-optimal on a sinc */ + spx_word16_t x2, x3; + x2 = MULT16_16_P15(x, x); ++ ++ Printf("\nI am inside fixed point arithmetic\n"); + x3 = MULT16_16_P15(x, x2); ++ getch(); + interp[0] = PSHR32(MULT16_16(QCONST16(-0.16667f, 15),x) + MULT16_16(QCONST16(0.16667f, 15),x3),15); + interp[1] = EXTRACT16(EXTEND32(x) + SHR32(SUB32(EXTEND32(x2),EXTEND32(x3)),1)); + interp[3] = PSHR32(MULT16_16(QCONST16(-0.33333f, 15),x) + MULT16_16(QCONST16(.5f,15),x2) - MULT16_16(QCONST16(0.16667f, 15),x3),15); +@@ -329,6 +380,62 @@ + } + #endif + ++static int resampler_basic_direct_single_neon(SpeexResamplerState *st, spx_uint32_t channel_index, const spx_word16_t *in, spx_uint32_t *in_len, spx_word16_t *out, spx_uint32_t *out_len) ++{ ++ const int N = st->filt_len; ++ int out_sample = 0; ++ int last_sample = st->last_sample[channel_index]; ++ spx_uint32_t samp_frac_num = st->samp_frac_num[channel_index]; ++ const spx_word16_t *sinc_table = st->sinc_table; ++ const int out_stride = st->out_stride; ++ const int int_advance = st->int_advance; ++ const int frac_advance = st->frac_advance; ++ const spx_uint32_t den_rate = st->den_rate; ++ spx_word32_t sum; ++ int j; ++ ++ while (!(last_sample >= (spx_int32_t)*in_len || out_sample >= (spx_int32_t)*out_len)) ++ { ++ const spx_word16_t *sinc = & sinc_table[samp_frac_num*N]; ++ const spx_word16_t *iptr = & in[last_sample]; ++ ++#ifndef OVERRIDE_INNER_PRODUCT_SINGLE ++ sum = 0; ++ for(j=0;j= den_rate) ++ { ++ samp_frac_num -= den_rate; ++ last_sample++; ++ } ++ } ++ ++ st->last_sample[channel_index] = last_sample; ++ st->samp_frac_num[channel_index] = samp_frac_num; ++ return out_sample; ++} ++ + static int resampler_basic_direct_single(SpeexResamplerState *st, spx_uint32_t channel_index, const spx_word16_t *in, spx_uint32_t *in_len, spx_word16_t *out, spx_uint32_t *out_len) + { + const int N = st->filt_len; +@@ -366,7 +473,8 @@ + */ + sum = SATURATE32PSHR(sum, 15, 32767); + #else +- sum = inner_product_single(sinc, iptr, N); ++ sum = inner_product_single_neon(sinc, iptr, N); ++ + #endif + + out[out_stride * out_sample++] = sum; +@@ -384,6 +492,8 @@ + return out_sample; + } + ++ ++ + #ifdef FIXED_POINT + #else + /* This is the same as the previous function, except with a double-precision accumulator */ +@@ -559,10 +669,13 @@ + } + #endif + ++ ++ + static void update_filter(SpeexResamplerState *st) + { + spx_uint32_t old_length; + ++ + old_length = st->filt_len; + st->oversample = quality_map[st->quality].oversample; + st->filt_len = quality_map[st->quality].base_length; +@@ -614,7 +727,19 @@ + } + } + #ifdef FIXED_POINT +- st->resampler_ptr = resampler_basic_direct_single; ++ ++/*Neon detection code*/ ++ ++ init_simd (); ++ ++ if(neon_flag) ++ st->resampler_ptr = resampler_basic_direct_single_neon; ++ else ++ st->resampler_ptr = resampler_basic_direct_single; ++ ++ ++ ++ + #else + if (st->quality>8) + st->resampler_ptr = resampler_basic_direct_double; +Index: speex-1.2~rc1+git20090708+a6d05eb/libspeex/resample_neon.h +=================================================================== +--- speex-1.2~rc1+git20090708+a6d05eb.orig/libspeex/resample_neon.h 2012-03-26 07:21:55.698337252 -0300 ++++ speex-1.2~rc1+git20090708+a6d05eb/libspeex/resample_neon.h 2012-03-26 07:22:32.410519303 -0300 +@@ -40,7 +40,7 @@ + + #ifdef FIXED_POINT + #ifdef __thumb2__ +-static inline int32_t saturate_32bit_to_16bit(int32_t a) { ++static inline int32_t saturate_32bit_to_16bit_neon(int32_t a) { + int32_t ret; + asm ("ssat %[ret], #16, %[a]" + : [ret] "=&r" (ret) +@@ -49,7 +49,7 @@ + return ret; + } + #else +-static inline int32_t saturate_32bit_to_16bit(int32_t a) { ++static inline int32_t saturate_32bit_to_16bit_neon(int32_t a) { + int32_t ret; + asm ("vmov.s32 d0[0], %[a]\n" + "vqmovn.s32 d0, q0\n" +@@ -65,7 +65,7 @@ + + #define OVERRIDE_INNER_PRODUCT_SINGLE + /* Only works when len % 4 == 0 */ +-static inline int32_t inner_product_single(const int16_t *a, const int16_t *b, unsigned int len) ++static inline int32_t inner_product_single_neon(const int16_t *a, const int16_t *b, unsigned int len) + { + int32_t ret; + uint32_t remainder = len % 16; +@@ -123,7 +123,7 @@ + } + #elif defined(FLOATING_POINT) + +-static inline int32_t saturate_float_to_16bit(float a) { ++static inline int32_t saturate_float_to_16bit_neon(float a) { + int32_t ret; + asm ("vmov.f32 d0[0], %[a]\n" + "vcvt.s32.f32 d0, d0, #15\n" +@@ -135,11 +135,11 @@ + return ret; + } + #undef WORD2INT +-#define WORD2INT(x) (saturate_float_to_16bit(x)) ++#define WORD2INT(x) (saturate_float_to_16bit_neon(x)) + + #define OVERRIDE_INNER_PRODUCT_SINGLE + /* Only works when len % 4 == 0 */ +-static inline float inner_product_single(const float *a, const float *b, unsigned int len) ++static inline float inner_product_single_neon(const float *a, const float *b, unsigned int len) + { + float ret; + uint32_t remainder = len % 16; --- speex-1.2~rc1+git20090708+a6d05eb.orig/debian/patches/series +++ speex-1.2~rc1+git20090708+a6d05eb/debian/patches/series @@ -0,0 +1,2 @@ +enable-neon.patch +neon-autodetection.patch