• Ben Avison's avatar
    armv6: Accelerate ff_imdct_half for general case (mdct_bits != 6) · 42c1cc35
    Ben Avison authored
    The previous implementation targeted DTS Coherent Acoustics, which only
    requires mdct_bits == 6. This relatively small size lent itself to
    unrolling the loops a small number of times, and encoding offsets
    calculated at assembly time within the load/store instructions of each
    iteration.
    
    In the more general case (codecs such as AAC and AC3) much larger arrays
    are used - mdct_bits == [8, 9, 11]. The old method does not scale for
    these cases, so more integer registers are used with non-unrolled versions
    of the loops (and with some stack spillage). The postrotation filter loop
    is still unrolled by a factor of 2 to permit the double-buffering of some
    VFP registers to facilitate overlap of neighbouring iterations.
    
    I benchmarked the result by measuring the number of gperftools samples
    that hit anywhere in the AAC decoder (starting from aac_decode_frame())
    or specifically in ff_imdct_half_c / ff_imdct_half_vfp, for the same
    example AAC stream:
    
                      Before          After
                      Mean   StdDev   Mean   StdDev  Confidence  Change
    aac_decode_frame  2368.1 35.8     2117.2 35.3    100.0%      +11.8%
    ff_imdct_half_*   457.5  22.4     251.2  16.2    100.0%      +82.1%
    Signed-off-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
    42c1cc35
Name
Last commit
Last update
compat Loading commit data...
doc Loading commit data...
libavcodec Loading commit data...
libavdevice Loading commit data...
libavfilter Loading commit data...
libavformat Loading commit data...
libavresample Loading commit data...
libavutil Loading commit data...
libpostproc Loading commit data...
libswresample Loading commit data...
libswscale Loading commit data...
presets Loading commit data...
tests Loading commit data...
tools Loading commit data...
.gitignore Loading commit data...
COPYING.GPLv2 Loading commit data...
COPYING.GPLv3 Loading commit data...
COPYING.LGPLv2.1 Loading commit data...
COPYING.LGPLv3 Loading commit data...
CREDITS Loading commit data...
Changelog Loading commit data...
INSTALL.md Loading commit data...
LICENSE.md Loading commit data...
MAINTAINERS Loading commit data...
Makefile Loading commit data...
README.md Loading commit data...
RELEASE Loading commit data...
arch.mak Loading commit data...
cmdutils.c Loading commit data...
cmdutils.h Loading commit data...
cmdutils_common_opts.h Loading commit data...
cmdutils_opencl.c Loading commit data...
common.mak Loading commit data...
configure Loading commit data...
ffmpeg.c Loading commit data...
ffmpeg.h Loading commit data...
ffmpeg_dxva2.c Loading commit data...
ffmpeg_filter.c Loading commit data...
ffmpeg_opt.c Loading commit data...
ffmpeg_vda.c Loading commit data...
ffmpeg_vdpau.c Loading commit data...
ffplay.c Loading commit data...
ffprobe.c Loading commit data...
ffserver.c Loading commit data...
library.mak Loading commit data...
version.sh Loading commit data...