mirror of https://git.ffmpeg.org/ffmpeg.git
9c8bc74c2b
This work is sponsored by, and copyright, Google. Previously all subpartitions except the eob=1 (DC) case ran with the same runtime: Cortex A7 A8 A9 A53 vp9_inv_dct_dct_16x16_sub16_add_neon: 3188.1 2435.4 2499.0 1969.0 vp9_inv_dct_dct_32x32_sub32_add_neon: 18531.7 16582.3 14207.6 12000.3 By skipping individual 4x16 or 4x32 pixel slices in the first pass, we reduce the runtime of these functions like this: vp9_inv_dct_dct_16x16_sub1_add_neon: 274.6 189.5 211.7 235.8 vp9_inv_dct_dct_16x16_sub2_add_neon: 2064.0 1534.8 1719.4 1248.7 vp9_inv_dct_dct_16x16_sub4_add_neon: 2135.0 1477.2 1736.3 1249.5 vp9_inv_dct_dct_16x16_sub8_add_neon: 2446.7 1828.7 1993.6 1494.7 vp9_inv_dct_dct_16x16_sub12_add_neon: 2832.4 2118.3 2266.5 1735.1 vp9_inv_dct_dct_16x16_sub16_add_neon: 3211.7 2475.3 2523.5 1983.1 vp9_inv_dct_dct_32x32_sub1_add_neon: 756.2 456.7 862.0 553.9 vp9_inv_dct_dct_32x32_sub2_add_neon: 10682.2 8190.4 8539.2 6762.5 vp9_inv_dct_dct_32x32_sub4_add_neon: 10813.5 8014.9 8518.3 6762.8 vp9_inv_dct_dct_32x32_sub8_add_neon: 11859.6 9313.0 9347.4 7514.5 vp9_inv_dct_dct_32x32_sub12_add_neon: 12946.6 10752.4 10192.2 8280.2 vp9_inv_dct_dct_32x32_sub16_add_neon: 14074.6 11946.5 11001.4 9008.6 vp9_inv_dct_dct_32x32_sub20_add_neon: 15269.9 13662.7 11816.1 9762.6 vp9_inv_dct_dct_32x32_sub24_add_neon: 16327.9 14940.1 12626.7 10516.0 vp9_inv_dct_dct_32x32_sub28_add_neon: 17462.7 15776.1 13446.2 11264.7 vp9_inv_dct_dct_32x32_sub32_add_neon: 18575.5 17157.0 14249.3 12015.1 I.e. in general a very minor overhead for the full subpartition case due to the additional loads and cmps, but a significant speedup for the cases when we only need to process a small part of the actual input data. In common VP9 content in a few inspected clips, 70-90% of the non-dc-only 16x16 and 32x32 IDCTs only have nonzero coefficients in the upper left 8x8 or 16x16 subpartitions respectively. Signed-off-by: Martin Storsjö <martin@martin.st> |
||
---|---|---|
.. | ||
Makefile | ||
aac.h | ||
aacpsdsp_init_arm.c | ||
aacpsdsp_neon.S | ||
ac3dsp_arm.S | ||
ac3dsp_armv6.S | ||
ac3dsp_init_arm.c | ||
ac3dsp_neon.S | ||
apedsp_init_arm.c | ||
apedsp_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 | ||
dcadsp_init_arm.c | ||
dcadsp_neon.S | ||
dcadsp_vfp.S | ||
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 | ||
hpeldsp_arm.S | ||
hpeldsp_arm.h | ||
hpeldsp_armv6.S | ||
hpeldsp_init_arm.c | ||
hpeldsp_init_armv6.c | ||
hpeldsp_init_neon.c | ||
hpeldsp_neon.S | ||
idct.h | ||
idctdsp_arm.S | ||
idctdsp_arm.h | ||
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 | ||
mathops.h | ||
mdct_fixed_init_arm.c | ||
mdct_fixed_neon.S | ||
mdct_init_arm.c | ||
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.c | ||
mpegvideo_armv5te_s.S | ||
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.h | ||
startcode_armv6.S | ||
synth_filter_neon.S | ||
synth_filter_vfp.S | ||
vc1dsp.h | ||
vc1dsp_init_arm.c | ||
vc1dsp_init_neon.c | ||
vc1dsp_neon.S | ||
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.h | ||
vp8_armv6.S | ||
vp8dsp.h | ||
vp8dsp_armv6.S | ||
vp8dsp_init_arm.c | ||
vp8dsp_init_armv6.c | ||
vp8dsp_init_neon.c | ||
vp8dsp_neon.S | ||
vp9dsp_init_arm.c | ||
vp9itxfm_neon.S | ||
vp9lpf_neon.S | ||
vp9mc_neon.S | ||
vp56_arith.h |