1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2025-03-03 14:32:16 +02:00
FFmpeg/libavcodec
Ben Avison 87552d54d3 armv6: Accelerate ff_fft_calc for general case (nbits != 4)
The previous implementation targeted DTS Coherent Acoustics, which only
requires nbits == 4 (fft16()). This case was (and still is) linked directly
rather than being indirected through ff_fft_calc_vfp(), but now the full
range from radix-4 up to radix-65536 is available. This benefits other codecs
such as AAC and AC3.

The implementaion is based upon the C version, with each routine larger than
radix-16 calling a hierarchy of smaller FFT functions, then performing a
post-processing pass. This pass benefits a lot from loop unrolling to
counter the long pipelines in the VFP. A relaxed calling standard also
reduces the overhead of the call hierarchy, and avoiding the excessive
inlining performed by GCC probably helps with I-cache utilisation too.

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 the FFT routines (fft4() to fft512() and pass()) for the
same sample AAC stream:

              Before          After
              Mean   StdDev   Mean   StdDev  Confidence  Change
Audio decode  2245.5 53.1     1599.6 43.8    100.0%      +40.4%
FFT routines  940.6  22.0     348.1  20.8    100.0%      +170.2%

Signed-off-by: Martin Storsjö <martin@martin.st>
2014-07-18 01:34:23 +03:00
..
2014-05-01 13:00:57 +02:00
2014-01-04 14:42:38 -08:00
2014-01-04 14:42:38 -08:00
2014-03-25 12:28:22 +01:00
2014-07-09 13:37:18 +00:00
2014-07-09 13:37:18 +00:00
2014-07-09 13:37:18 +00:00
2014-03-22 14:08:20 +01:00
2014-05-15 06:49:34 +02:00
2014-01-09 19:33:07 +01:00
2014-01-09 19:33:07 +01:00
2014-01-09 19:33:07 +01:00
2014-01-09 19:33:07 +01:00
2013-11-16 12:46:20 +01:00
2014-03-28 00:08:24 +01:00
2014-03-22 14:08:20 +01:00
2013-11-16 17:43:05 +01:00
2013-11-16 17:43:05 +01:00
2014-07-06 10:58:43 -07:00
2014-07-06 10:58:43 -07:00
2014-03-27 18:27:23 +01:00
2013-11-16 12:47:49 +01:00
2014-03-09 00:45:34 +01:00
2014-03-09 00:45:33 +01:00
2013-11-16 12:48:25 +01:00
2014-07-06 09:28:20 -07:00
2014-07-06 09:28:20 -07:00
2014-04-23 19:57:44 +02:00
2014-03-04 11:45:32 +01:00
2014-03-22 14:08:20 +01:00
2014-04-11 12:09:08 +02:00
2014-04-11 12:09:08 +02:00
2013-11-16 17:43:36 +01:00
2013-11-16 12:52:36 +01:00
2014-04-01 00:10:15 +02:00
2014-04-01 00:10:15 +02:00
2014-04-22 19:35:40 +02:00
2014-04-22 19:35:40 +02:00
2014-03-13 05:50:27 -07:00
2014-03-13 05:50:27 -07:00
2013-11-16 17:50:51 +01:00
2014-04-23 17:53:00 +01:00
2014-05-01 13:00:57 +02:00
2013-11-16 17:47:25 +01:00
2013-11-21 20:53:06 +01:00
2013-11-26 08:31:10 +01:00
2013-11-26 08:31:10 +01:00
2013-11-26 08:31:10 +01:00
2013-11-26 08:31:10 +01:00
2013-11-26 08:31:10 +01:00
2013-11-26 08:31:10 +01:00
2014-03-25 12:28:22 +01:00
2014-07-17 03:05:24 -07:00
2014-04-04 04:00:11 +02:00
2014-02-09 19:53:43 +01:00
2014-05-19 07:10:03 +02:00
2014-06-26 19:17:33 +02:00
2014-06-26 19:17:33 +02:00
2014-06-19 13:13:20 +02:00
2014-06-26 19:17:33 +02:00
2014-06-26 19:17:33 +02:00
2014-06-26 19:17:33 +02:00
2014-06-26 19:17:33 +02:00
2013-11-16 17:50:28 +01:00
2013-11-16 17:46:01 +01:00
2014-04-11 00:09:34 +02:00
2014-01-03 16:40:43 +01:00
2013-11-21 20:53:06 +01:00
2014-03-04 11:45:32 +01:00
2014-03-25 12:28:22 +01:00
2014-03-04 11:45:32 +01:00
2014-04-11 00:09:34 +02:00
2013-11-26 08:31:10 +01:00
2013-11-26 08:31:10 +01:00
2013-11-16 13:20:19 +01:00
2013-11-16 17:41:32 +01:00
2014-04-23 19:57:44 +02:00
2014-05-18 10:17:41 +02:00
2014-05-15 18:17:02 +02:00
2014-05-15 18:17:02 +02:00
2014-05-15 18:17:02 +02:00
2014-05-15 06:49:34 +02:00
2014-05-15 06:49:34 +02:00
2014-05-15 06:49:34 +02:00
2014-05-15 18:17:02 +02:00
2014-05-15 06:49:34 +02:00
2014-07-06 09:36:17 -07:00
2014-07-06 09:36:17 -07:00
2013-12-09 08:41:20 +01:00
2014-05-09 16:07:15 +02:00
2013-11-16 17:49:47 +01:00
2014-03-16 23:29:50 +01:00
2014-03-16 23:29:50 +01:00
2014-03-16 23:29:50 +01:00
2013-12-09 08:41:20 +01:00
2013-12-09 08:41:20 +01:00
2013-12-09 08:41:20 +01:00
2014-03-04 11:45:32 +01:00
2013-11-16 12:52:18 +01:00
2013-11-16 12:49:18 +01:00
2014-03-04 11:45:32 +01:00
2013-11-16 17:49:40 +01:00
2014-04-06 16:40:27 +02:00
2014-04-01 01:13:18 +02:00
2014-04-01 01:19:03 +02:00
2013-11-16 17:40:57 +01:00
2014-02-20 04:16:15 -08:00
2014-06-17 21:24:12 +02:00
2013-11-16 17:44:54 +01:00
2014-05-11 15:00:03 +02:00
2014-05-11 15:00:03 +02:00
2014-05-11 15:00:03 +02:00
2014-05-11 15:00:03 +02:00
2014-04-06 16:41:39 +02:00
2014-07-07 07:45:00 -07:00
2014-07-07 07:45:00 -07:00
2013-11-16 13:25:29 +01:00
2014-03-04 11:45:32 +01:00
2014-04-01 23:47:25 +02:00
2014-04-01 23:47:25 +02:00
2014-03-29 16:11:09 +01:00
2014-04-04 04:00:11 +02:00
2014-04-04 04:00:11 +02:00
2014-04-04 04:00:11 +02:00
2014-05-03 18:25:17 +02:00
2013-11-15 10:16:28 +01:00
2013-11-15 10:16:28 +01:00
2013-11-15 10:16:28 +01:00
2013-11-15 10:16:28 +01:00
2013-11-15 10:16:28 +01:00
2013-11-16 13:25:17 +01:00
2014-03-27 23:59:13 +01:00
2014-03-27 23:57:51 +01:00
2014-04-02 00:27:22 +02:00
2013-11-16 13:24:56 +01:00