[Bug 685637] New: [PATCH] [audioresample] Performance improvements & ARM NEON support

GStreamer (bugzilla.gnome.org) bugzilla at gnome.org
Sat Oct 6 18:39:27 PDT 2012


https://bugzilla.gnome.org/show_bug.cgi?id=685637
  GStreamer | gst-plugins-base | 1.0.0

           Summary: [PATCH] [audioresample] Performance improvements & ARM
                    NEON support
    Classification: Platform
           Product: GStreamer
           Version: 1.0.0
        OS/Version: Linux
            Status: UNCONFIRMED
          Severity: enhancement
          Priority: Normal
         Component: gst-plugins-base
        AssignedTo: gstreamer-bugs at lists.freedesktop.org
        ReportedBy: dv at pseudoterminal.org
         QAContact: gstreamer-bugs at lists.freedesktop.org
     GNOME version: ---


This set of patches introduces resampler speedups and support for the
ARM NEON instruction set. The patches were originally done for Speex
upstream by Jyri Sarha, and can be found in the Speex mailing list:

   http://lists.xiph.org/pipermail/speex-dev/2011-September/008242.html
   http://lists.xiph.org/pipermail/speex-dev/2011-September/008243.html
   http://lists.xiph.org/pipermail/speex-dev/2011-September/008241.html
   http://lists.xiph.org/pipermail/speex-dev/2011-September/008240.html
   http://lists.xiph.org/pipermail/speex-dev/2011-September/008239.html
   http://lists.xiph.org/pipermail/speex-dev/2011-September/008238.html

These patches were then discovered by Branislav Katreniak
( branislav.katreniak at streamunlimited.com ) for our projects at
StreamUnlimited ( http://streamunlimited.com/ ). He did an initial
adaptation of the patches for the GStreamer audioresample element.
Tests showed a significant speedup; resampling of 44.1 to 48 kHz ran
up to 5 times faster on a 720Mhz ARM Cortex-A8 CPU.

I then adapted the patches for GStreamer 1.0 and added extra
functionality to control the behavior better and to check for ARM NEON
support in configure.ac.

Two new properties are introduced: sinc-filter-mode and
sinc-filter-auto-threshold. These control the way the sinc filter table
behaves and gets computed. The default behavior is what has been used
until now, "interpolated" (sparse filter table with cubic interpolation);
other modes are "full" (all filter values computed) and "auto" (full table
unless estimated size of said table exceeds the threshold).

The "auto" mode exists, because in extreme cases (like resampling from
48000 to 48001 Hz) the full filter table can become very large, and take
a long time to compute. Default threshold is 1 MB.

As for the default mode: I thought setting it to "interpolated" is useful
for backwards compatibility, but "auto" as default makes sense, too.
Thoughts?

In addition, the very first patch reintroduces SSE header checks
to configure.ac , which re-enables the SSE/SSE2 code paths inside the
resampler and also helps with the performance.

-- 
Configure bugmail: https://bugzilla.gnome.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
You are the assignee for the bug.


More information about the gstreamer-bugs mailing list