mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-18 03:19:31 +02:00
eabc5abf94
This work is sponsored by, and copyright, Google. This avoids loading and calculating coefficients that we know will be zero, and avoids filling the temp buffer with zeros in places where we know the second pass won't read. This gives a pretty substantial speedup for the smaller subpartitions. The code size increases from 14516 bytes to 22484 bytes. The idct16/32_end macros are moved above the individual functions; the instructions themselves are unchanged, but since new functions are added at the same place where the code is moved from, the diff looks rather messy. Before: Cortex A7 A8 A9 A53 vp9_inv_dct_dct_16x16_sub1_add_10_neon: 454.0 270.7 418.5 295.4 vp9_inv_dct_dct_16x16_sub2_add_10_neon: 3840.2 3244.8 3700.1 2337.9 vp9_inv_dct_dct_16x16_sub4_add_10_neon: 4212.5 3575.4 3996.9 2571.6 vp9_inv_dct_dct_16x16_sub8_add_10_neon: 5174.4 4270.5 4615.5 3031.9 vp9_inv_dct_dct_16x16_sub12_add_10_neon: 5676.0 4908.5 5226.5 3491.3 vp9_inv_dct_dct_16x16_sub16_add_10_neon: 6403.9 5589.0 5839.8 3948.5 vp9_inv_dct_dct_32x32_sub1_add_10_neon: 1710.7 944.7 1582.1 1045.4 vp9_inv_dct_dct_32x32_sub2_add_10_neon: 21040.7 16706.1 18687.7 13193.1 vp9_inv_dct_dct_32x32_sub4_add_10_neon: 22197.7 18282.7 19577.5 13918.6 vp9_inv_dct_dct_32x32_sub8_add_10_neon: 24511.5 20911.5 21472.5 15367.5 vp9_inv_dct_dct_32x32_sub12_add_10_neon: 26939.5 24264.3 23239.1 16830.3 vp9_inv_dct_dct_32x32_sub16_add_10_neon: 29419.5 26845.1 25020.6 18259.9 vp9_inv_dct_dct_32x32_sub20_add_10_neon: 31146.4 29633.5 26803.3 19721.7 vp9_inv_dct_dct_32x32_sub24_add_10_neon: 33376.3 32507.8 28642.4 21174.2 vp9_inv_dct_dct_32x32_sub28_add_10_neon: 35629.4 35439.6 30416.5 22625.7 vp9_inv_dct_dct_32x32_sub32_add_10_neon: 37269.9 37914.9 32271.9 24078.9 After: vp9_inv_dct_dct_16x16_sub1_add_10_neon: 454.0 276.0 418.5 295.1 vp9_inv_dct_dct_16x16_sub2_add_10_neon: 2336.2 1886.0 2251.0 1458.6 vp9_inv_dct_dct_16x16_sub4_add_10_neon: 2531.0 2054.7 2402.8 1591.1 vp9_inv_dct_dct_16x16_sub8_add_10_neon: 3848.6 3491.1 3845.7 2554.8 vp9_inv_dct_dct_16x16_sub12_add_10_neon: 5703.8 4831.6 5230.8 3493.4 vp9_inv_dct_dct_16x16_sub16_add_10_neon: 6399.5 5567.0 5832.4 3951.5 vp9_inv_dct_dct_32x32_sub1_add_10_neon: 1722.1 938.5 1577.3 1044.5 vp9_inv_dct_dct_32x32_sub2_add_10_neon: 15003.5 11576.8 13105.8 9602.2 vp9_inv_dct_dct_32x32_sub4_add_10_neon: 15768.5 12677.2 13726.0 10138.1 vp9_inv_dct_dct_32x32_sub8_add_10_neon: 17278.8 14825.4 14907.5 11185.7 vp9_inv_dct_dct_32x32_sub12_add_10_neon: 22335.7 21544.5 20379.5 15019.8 vp9_inv_dct_dct_32x32_sub16_add_10_neon: 24165.6 23881.7 21938.6 16308.2 vp9_inv_dct_dct_32x32_sub20_add_10_neon: 31082.2 30860.9 26835.3 19711.3 vp9_inv_dct_dct_32x32_sub24_add_10_neon: 33102.6 31922.8 28638.3 21161.0 vp9_inv_dct_dct_32x32_sub28_add_10_neon: 35104.9 34867.5 30411.7 22621.2 vp9_inv_dct_dct_32x32_sub32_add_10_neon: 37438.1 39103.4 32217.8 24067.6 Signed-off-by: Martin Storsjö <martin@martin.st> |
||
---|---|---|
.. | ||
aac.h | ||
aacpsdsp_init_arm.c | ||
aacpsdsp_neon.S | ||
ac3dsp_arm.S | ||
ac3dsp_armv6.S | ||
ac3dsp_init_arm.c | ||
ac3dsp_neon.S | ||
asm-offsets.h | ||
audiodsp_arm.h | ||
audiodsp_init_arm.c | ||
audiodsp_init_neon.c | ||
audiodsp_neon.S | ||
blockdsp_arm.h | ||
blockdsp_init_arm.c | ||
blockdsp_init_neon.c | ||
blockdsp_neon.S | ||
cabac.h | ||
dca.h | ||
fft_fixed_init_arm.c | ||
fft_fixed_neon.S | ||
fft_init_arm.c | ||
fft_neon.S | ||
fft_vfp.S | ||
flacdsp_arm.S | ||
flacdsp_init_arm.c | ||
fmtconvert_init_arm.c | ||
fmtconvert_neon.S | ||
fmtconvert_vfp.S | ||
g722dsp_init_arm.c | ||
g722dsp_neon.S | ||
h264chroma_init_arm.c | ||
h264cmc_neon.S | ||
h264dsp_init_arm.c | ||
h264dsp_neon.S | ||
h264idct_neon.S | ||
h264pred_init_arm.c | ||
h264pred_neon.S | ||
h264qpel_init_arm.c | ||
h264qpel_neon.S | ||
hevcdsp_arm.h | ||
hevcdsp_deblock_neon.S | ||
hevcdsp_idct_neon.S | ||
hevcdsp_init_arm.c | ||
hevcdsp_init_neon.c | ||
hevcdsp_qpel_neon.S | ||
hpeldsp_arm.h | ||
hpeldsp_arm.S | ||
hpeldsp_armv6.S | ||
hpeldsp_init_arm.c | ||
hpeldsp_init_armv6.c | ||
hpeldsp_init_neon.c | ||
hpeldsp_neon.S | ||
idct.h | ||
idctdsp_arm.h | ||
idctdsp_arm.S | ||
idctdsp_armv6.S | ||
idctdsp_init_arm.c | ||
idctdsp_init_armv5te.c | ||
idctdsp_init_armv6.c | ||
idctdsp_init_neon.c | ||
idctdsp_neon.S | ||
int_neon.S | ||
jrevdct_arm.S | ||
lossless_audiodsp_init_arm.c | ||
lossless_audiodsp_neon.S | ||
Makefile | ||
mathops.h | ||
mdct_fixed_neon.S | ||
mdct_neon.S | ||
mdct_vfp.S | ||
me_cmp_armv6.S | ||
me_cmp_init_arm.c | ||
mlpdsp_armv5te.S | ||
mlpdsp_armv6.S | ||
mlpdsp_init_arm.c | ||
mpegaudiodsp_fixed_armv6.S | ||
mpegaudiodsp_init_arm.c | ||
mpegvideo_arm.c | ||
mpegvideo_arm.h | ||
mpegvideo_armv5te_s.S | ||
mpegvideo_armv5te.c | ||
mpegvideo_neon.S | ||
mpegvideoencdsp_armv6.S | ||
mpegvideoencdsp_init_arm.c | ||
neon.S | ||
neontest.c | ||
pixblockdsp_armv6.S | ||
pixblockdsp_init_arm.c | ||
rdft_init_arm.c | ||
rdft_neon.S | ||
rv34dsp_init_arm.c | ||
rv34dsp_neon.S | ||
rv40dsp_init_arm.c | ||
rv40dsp_neon.S | ||
sbrdsp_init_arm.c | ||
sbrdsp_neon.S | ||
simple_idct_arm.S | ||
simple_idct_armv5te.S | ||
simple_idct_armv6.S | ||
simple_idct_neon.S | ||
startcode_armv6.S | ||
startcode.h | ||
synth_filter_init_arm.c | ||
synth_filter_neon.S | ||
synth_filter_vfp.S | ||
vc1dsp_init_arm.c | ||
vc1dsp_init_neon.c | ||
vc1dsp_neon.S | ||
vc1dsp.h | ||
videodsp_arm.h | ||
videodsp_armv5te.S | ||
videodsp_init_arm.c | ||
videodsp_init_armv5te.c | ||
vorbisdsp_init_arm.c | ||
vorbisdsp_neon.S | ||
vp3dsp_init_arm.c | ||
vp3dsp_neon.S | ||
vp6dsp_init_arm.c | ||
vp6dsp_neon.S | ||
vp8_armv6.S | ||
vp8.h | ||
vp8dsp_armv6.S | ||
vp8dsp_init_arm.c | ||
vp8dsp_init_armv6.c | ||
vp8dsp_init_neon.c | ||
vp8dsp_neon.S | ||
vp8dsp.h | ||
vp9dsp_init_10bpp_arm.c | ||
vp9dsp_init_12bpp_arm.c | ||
vp9dsp_init_16bpp_arm_template.c | ||
vp9dsp_init_arm.c | ||
vp9dsp_init.h | ||
vp9itxfm_16bpp_neon.S | ||
vp9itxfm_neon.S | ||
vp9lpf_16bpp_neon.S | ||
vp9lpf_neon.S | ||
vp9mc_16bpp_neon.S | ||
vp9mc_neon.S | ||
vp56_arith.h |