[pulseaudio-discuss] [PATCH v2 1/6] core: add ARM NEON optimized mono-to-stereo/stereo-to-mono remapping code
Arun Raghavan
arun.raghavan at collabora.co.uk
Thu Mar 15 06:14:51 PDT 2012
Hey Peter,
On Sun, 2012-03-11 at 19:12 +0100, Peter Meerwald wrote:
> Hello Arun,
>
> thank you for testing; you are covering areas I have not thought of :)
>
> > > v2:
> > > * add ARM NEON stereo-to-mono remapping code
> > > * static __attribute__ ((noinline)) is necessary to prevent inlining and
> > > work around gcc 4.6 ICE, see https://bugs.launchpad.net/bugs/936863
> > > * call test code, the reference implementation is obtained using
> > > pa_get_init_remap_func()
> > > * remove check for NEON flags
> > > v1:
> > > * ARM NEON mono-to-stereo remapping code
>
> > A couple of issues here. Firstly, if I turn up the test loop count to
> > 100000, I can fairly reliably see a bunch of failures like the one
> > below.
>
> I have not been able to reproduce the issue so far; my setup is beagle-xm
> with softfp, the particular compiler might also be different
FWIW, you can get a Gentoo rootfs (stage3) snapshot at --
http://gentoo.osuosl.org/releases/arm/autobuilds/
> you get different results for remap_stereo_to_mono, s16
>
> are you testing the patches one-by-one? i.e. you have not yet applied
> '[PATCH 5/6] core: add stereo to mono special case remapping'?
I only pulled patches 1 through 4 for the first round of testing.
> I think there is an issue in run_test_s16_stereo_to_mono() when setting up
> the remap structure:
> remap.format = &sf;
> iss.format = PA_SAMPLE_S16NE;
> iss.channels = 2;
> oss.format = PA_SAMPLE_S16NE;
> oss.channels = 1;
> remap.i_ss = &iss;
> remap.o_ss = &oss;
> remap.map_table_f[0][0] = 1.0;
> remap.map_table_f[0][1] = 1.0;
> remap_init_func(&remap);
>
> what is missing is the map table for int values:
> remap.map_table_i[0][0] = 0x10000;
> remap.map_table_i[0][1] = 0x10000;
>
> in run_test_s16_mono_to_stereo() there is a similar issue, but here
> init_remap_c() in remap.c will use the remap_mono_to_stereo_c instead of
> the generic mapper; remap_mono_to_stereo_c does not need the map_table
>
> in '[PATCH 5/6] core: add stereo to mono special case remapping' a special
> case is added to init_remap_c() to cover the stereo-to-mono case which
> might mask the issue
>
> ... but I am just speculating here :(
>
> could you try above initialization?
Will do this and get back to you.
> > Next, I see the reference implementation doing better in the
> > mono-to-stereo float remapping.
>
> the C code seems a lot more efficient on the panda, it is well known that
> floats are handled better
>
> NEON remap_mono_to_stereo(float) is ~ 4x slower on panda, and only
> slightly faster on beagle
>
> remap_mono_to_stereo(s16) is ~ 1.5x slower on panda, and somewhat faster
> on beagle
>
> I'll try to build a hardfp system and see if the runtime can be improved
> (or at least avoid regressions)
I'll also try to get another rootfs up for my IGEPv2 board which is
OMAP3-based.
Given that this is a complicated change, I'd like to push merging this
to after 2.0. Unfortunately I've not had enough free time to look at
your patches for a while, and I'm sorry about the delay. Hopefully we
can iron out the kinks and get this merged early in the 3.0 cycle.
Regards,
Arun
More information about the pulseaudio-discuss
mailing list