ffmpeg/libavcodec
Ben Avison 42c1cc35b7 armv6: Accelerate ff_imdct_half for general case (mdct_bits != 6)
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: Michael Niedermayer <michaelni@gmx.at>
2014-07-13 15:17:04 +02:00
..
2014-06-02 20:18:44 +02:00
2014-06-03 10:58:19 -08:00
2014-06-15 12:11:46 +02:00
2014-06-15 12:11:46 +02:00
2014-02-17 20:50:33 +01:00
2014-04-22 20:44:31 +02:00
2014-01-09 19:33:07 +01:00
2014-04-22 02:38:03 +02:00
2014-06-03 10:58:19 -08:00
2014-05-11 20:06:45 +02:00
2014-04-22 20:44:31 +02:00
2014-04-22 20:44:31 +02:00
2014-04-22 20:08:30 +02:00
2014-04-01 00:10:15 +02:00
2014-04-01 00:10:15 +02:00
2014-04-12 05:40:37 +02:00
2014-02-07 19:32:16 +00:00
2014-04-20 17:02:16 +02:00
2014-04-05 03:32:11 +02:00
2014-04-22 20:44:31 +02:00
2014-04-12 15:41:00 +02:00
2014-02-06 02:51:19 +01:00
2014-04-28 00:22:38 +02:00
2014-07-10 15:29:54 +02:00
2014-04-04 04:00:11 +02:00
2014-07-10 17:27:56 +02:00
2014-06-17 13:23:36 +02:00
2014-06-17 13:23:36 +02:00
2014-05-31 13:41:10 +02:00
2014-06-05 20:31:59 +02:00
2014-06-05 20:31:59 +02:00
2014-01-02 22:07:09 +01:00
2013-12-31 12:19:59 +01:00
2014-05-25 05:19:09 +02:00
2013-12-31 12:19:59 +01:00
2014-01-31 18:34:14 +01:00
2014-05-09 16:07:15 +02:00
2014-07-12 01:09:51 +02:00
2014-05-25 19:25:10 +02:00
2014-02-21 16:57:26 -03:00
2014-02-21 16:57:26 -03:00
2014-04-22 20:44:31 +02:00
2014-01-04 04:16:46 +01:00
2014-04-27 13:03:28 +02:00
2014-07-12 22:33:27 +02:00
2014-04-30 17:41:31 +02:00
2014-06-07 17:44:23 +02:00
2014-06-07 17:44:14 +02:00
2014-06-07 17:44:14 +02:00
2013-12-22 14:59:31 +01:00
2014-05-12 03:27:04 +02:00
2014-07-10 15:29:54 +02:00
2014-06-18 03:13:37 +02:00
2014-06-18 03:13:37 +02:00
2014-06-18 03:13:37 +02:00
2014-03-29 18:13:15 +01:00
2014-06-18 03:13:36 +02:00
2014-06-18 03:13:36 +02:00
2014-04-22 02:41:05 +02:00
2014-03-27 23:57:51 +01:00
2013-12-22 22:03:47 +01:00
2013-12-22 22:03:47 +01:00