]> git.sesse.net Git - ffmpeg/commit
aarch64/opusdsp: implement NEON accelerated postfilter and deemphasis
authorLynne <dev@lynne.ee>
Fri, 15 Mar 2019 14:37:31 +0000 (14:37 +0000)
committerCarl Eugen Hoyos <ceffmpeg@gmail.com>
Tue, 9 Apr 2019 23:08:54 +0000 (01:08 +0200)
commit4d2f62150dba814eeb28de0d6723f6beb3638be9
treedb8525d9d273b177f6423a6d8629d5c659e1e798
parent1c50d61a5a689f8eabef37f504c6f8f33eb178ba
aarch64/opusdsp: implement NEON accelerated postfilter and deemphasis

153372 UNITS in postfilter_c,   65536 runs,      0 skips
73164 UNITS in postfilter_neon,   65536 runs,      0 skips -> 2.1x speedup

80591 UNITS in deemphasis_c,  131072 runs,      0 skips
43969 UNITS in deemphasis_neon,  131072 runs,      0 skips -> 1.83x speedup

Total decoder speedup: ~15% on a Raspberry Pi 3 (from 28.1x to 33.5x realtime)

Deemphasis SIMD based on the following unrolling:
const float c1 = CELT_EMPH_COEFF, c2 = c1*c1, c3 = c2*c1, c4 = c3*c1;
float state = coeff;

for (int i = 0; i < len; i += 4) {
    y[0] = x[0] + c1*state;
    y[1] = x[1] + c2*state + c1*x[0];
    y[2] = x[2] + c3*state + c1*x[1] + c2*x[0];
    y[3] = x[3] + c4*state + c1*x[2] + c2*x[1] + c3*x[0];

    state = y[3];
    y += 4;
    x += 4;
}

Unlike the x86 version, duplication is used instead of pslldq so
the structure and tables are different.
libavcodec/aarch64/Makefile
libavcodec/aarch64/opusdsp_init.c [new file with mode: 0644]
libavcodec/aarch64/opusdsp_neon.S [new file with mode: 0644]
libavcodec/opusdsp.c
libavcodec/opusdsp.h