• Ganesh Ajjanagadde's avatar
    avfilter/vf_deshake: replace qsort with AV_QSORT · 7910a2c2
    Ganesh Ajjanagadde authored
    qsort is called indirectly in filter_frame, suggesting its performance
    criticality. AV_QSORT is substantially faster due to the inlining of the
    comparison callback. Thus, the increase in performance should be worth
    the increase in binary size.
    
    This optimization is just a low hanging fruit. The trac ticket 1430 is
    a request for an improved deshake filter.
    
    Sample benchmark (x86-64, Haswell, GNU/Linux):
    File: original from https://trac.ffmpeg.org/ticket/1430
    command: ffmpeg -stream_loop 8 -i file.webm -vf deshake=rx=64:ry=64 -f null -
    
    Timer truncated at 1024 runs.
    new:
    28260 decicycles in qsort,       1 runs,      0 skips
    35570 decicycles in qsort,       2 runs,      0 skips
    39010 decicycles in qsort,       4 runs,      0 skips
    46897 decicycles in qsort,       8 runs,      0 skips
    40442 decicycles in qsort,      16 runs,      0 skips
    41611 decicycles in qsort,      32 runs,      0 skips
    40345 decicycles in qsort,      64 runs,      0 skips
    38967 decicycles in qsort,     128 runs,      0 skips
    38647 decicycles in qsort,     256 runs,      0 skips
    40238 decicycles in qsort,     512 runs,      0 skips
    39676 decicycles in qsort,    1024 runs,      0 skips
    
    old:
    1740280 decicycles in qsort,       1 runs,      0 skips
     923560 decicycles in qsort,       2 runs,      0 skips
     511330 decicycles in qsort,       4 runs,      0 skips
     309720 decicycles in qsort,       8 runs,      0 skips
     194900 decicycles in qsort,      16 runs,      0 skips
     142686 decicycles in qsort,      32 runs,      0 skips
     112516 decicycles in qsort,      64 runs,      0 skips
      98166 decicycles in qsort,     128 runs,      0 skips
      88147 decicycles in qsort,     256 runs,      0 skips
      88706 decicycles in qsort,     512 runs,      0 skips
      86783 decicycles in qsort,    1024 runs,      0 skips
    Reviewed-by: 's avatarNicolas George <george@nsup.org>
    Reviewed-by: 's avatarMichael Niedermayer <michael@niedermayer.cc>
    Signed-off-by: 's avatarGanesh Ajjanagadde <gajjanagadde@gmail.com>
    7910a2c2
Name
Last commit
Last update
..
x86 Loading commit data...
Makefile Loading commit data...
aeval.c Loading commit data...
af_adelay.c Loading commit data...
af_aecho.c Loading commit data...
af_afade.c Loading commit data...
af_aformat.c Loading commit data...
af_agate.c Loading commit data...
af_alimiter.c Loading commit data...
af_amerge.c Loading commit data...
af_amix.c Loading commit data...
af_anull.c Loading commit data...
af_apad.c Loading commit data...
af_aphaser.c Loading commit data...
af_aresample.c Loading commit data...
af_asetnsamples.c Loading commit data...
af_asetrate.c Loading commit data...
af_ashowinfo.c Loading commit data...
af_astats.c Loading commit data...
af_astreamsync.c Loading commit data...
af_asyncts.c Loading commit data...
af_atempo.c Loading commit data...
af_biquads.c Loading commit data...
af_bs2b.c Loading commit data...
af_channelmap.c Loading commit data...
af_channelsplit.c Loading commit data...
af_chorus.c Loading commit data...
af_compand.c Loading commit data...
af_dcshift.c Loading commit data...
af_dynaudnorm.c Loading commit data...
af_earwax.c Loading commit data...
af_extrastereo.c Loading commit data...
af_flanger.c Loading commit data...
af_join.c Loading commit data...
af_ladspa.c Loading commit data...
af_pan.c Loading commit data...
af_replaygain.c Loading commit data...
af_resample.c Loading commit data...
af_rubberband.c Loading commit data...
af_sidechaincompress.c Loading commit data...
af_silencedetect.c Loading commit data...
af_silenceremove.c Loading commit data...
af_stereotools.c Loading commit data...
af_stereowiden.c Loading commit data...
af_tremolo.c Loading commit data...
af_vibrato.c Loading commit data...
af_volume.c Loading commit data...
af_volume.h Loading commit data...
af_volumedetect.c Loading commit data...
all_channel_layouts.inc Loading commit data...
allfilters.c Loading commit data...
asink_anullsink.c Loading commit data...
asrc_anullsrc.c Loading commit data...
asrc_flite.c Loading commit data...
asrc_sine.c Loading commit data...
audio.c Loading commit data...
audio.h Loading commit data...
avf_aphasemeter.c Loading commit data...
avf_avectorscope.c Loading commit data...
avf_concat.c Loading commit data...
avf_showcqt.c Loading commit data...
avf_showcqt.h Loading commit data...
avf_showfreqs.c Loading commit data...
avf_showspectrum.c Loading commit data...
avf_showvolume.c Loading commit data...
avf_showwaves.c Loading commit data...
avfilter.c Loading commit data...
avfilter.h Loading commit data...
avfiltergraph.c Loading commit data...
avfiltergraph.h Loading commit data...
avfilterres.rc Loading commit data...
bbox.c Loading commit data...
bbox.h Loading commit data...
blend.h Loading commit data...
bufferqueue.h Loading commit data...
buffersink.c Loading commit data...
buffersink.h Loading commit data...
buffersrc.c Loading commit data...
buffersrc.h Loading commit data...
deshake.h Loading commit data...
deshake_opencl.c Loading commit data...
deshake_opencl.h Loading commit data...
deshake_opencl_kernel.h Loading commit data...
drawutils.c Loading commit data...
drawutils.h Loading commit data...
dualinput.c Loading commit data...
dualinput.h Loading commit data...
f_drawgraph.c Loading commit data...
f_ebur128.c Loading commit data...
f_interleave.c Loading commit data...
f_perms.c Loading commit data...
f_reverse.c Loading commit data...
f_select.c Loading commit data...
f_sendcmd.c Loading commit data...
f_zmq.c Loading commit data...
fifo.c Loading commit data...
filtfmts.c Loading commit data...
formats.c Loading commit data...
formats.h Loading commit data...
framesync.c Loading commit data...
framesync.h Loading commit data...
generate_wave_table.c Loading commit data...
generate_wave_table.h Loading commit data...
gradfun.h Loading commit data...
graphdump.c Loading commit data...
graphparser.c Loading commit data...
hermite.h Loading commit data...
interlace.h Loading commit data...
internal.h Loading commit data...
lavfutils.c Loading commit data...
lavfutils.h Loading commit data...
libavfilter.v Loading commit data...
log2_tab.c Loading commit data...
lswsutils.c Loading commit data...
lswsutils.h Loading commit data...
maskedmerge.h Loading commit data...
opencl_allkernels.c Loading commit data...
opencl_allkernels.h Loading commit data...
psnr.h Loading commit data...
pthread.c Loading commit data...
removegrain.h Loading commit data...
setpts.c Loading commit data...
settb.c Loading commit data...
split.c Loading commit data...
src_movie.c Loading commit data...
ssim.h Loading commit data...
stereo3d.h Loading commit data...
thread.h Loading commit data...
tinterlace.h Loading commit data...
transform.c Loading commit data...
transform.h Loading commit data...
trim.c Loading commit data...
unsharp.h Loading commit data...
unsharp_opencl.c Loading commit data...
unsharp_opencl.h Loading commit data...
unsharp_opencl_kernel.h Loading commit data...
version.h Loading commit data...
vf_alphamerge.c Loading commit data...
vf_aspect.c Loading commit data...
vf_atadenoise.c Loading commit data...
vf_bbox.c Loading commit data...
vf_blackdetect.c Loading commit data...
vf_blackframe.c Loading commit data...
vf_blend.c Loading commit data...
vf_boxblur.c Loading commit data...
vf_chromakey.c Loading commit data...
vf_codecview.c Loading commit data...
vf_colorbalance.c Loading commit data...
vf_colorchannelmixer.c Loading commit data...
vf_colorkey.c Loading commit data...
vf_colorlevels.c Loading commit data...
vf_colormatrix.c Loading commit data...
vf_copy.c Loading commit data...
vf_cover_rect.c Loading commit data...
vf_crop.c Loading commit data...
vf_cropdetect.c Loading commit data...
vf_curves.c Loading commit data...
vf_dctdnoiz.c Loading commit data...
vf_deband.c Loading commit data...
vf_decimate.c Loading commit data...
vf_dejudder.c Loading commit data...
vf_delogo.c Loading commit data...
vf_deshake.c Loading commit data...
vf_detelecine.c Loading commit data...
vf_displace.c Loading commit data...
vf_drawbox.c Loading commit data...
vf_drawtext.c Loading commit data...
vf_edgedetect.c Loading commit data...
vf_elbg.c Loading commit data...
vf_eq.c Loading commit data...
vf_eq.h Loading commit data...
vf_extractplanes.c Loading commit data...
vf_fade.c Loading commit data...
vf_fftfilt.c Loading commit data...
vf_field.c Loading commit data...
vf_fieldmatch.c Loading commit data...
vf_fieldorder.c Loading commit data...
vf_find_rect.c Loading commit data...
vf_format.c Loading commit data...
vf_fps.c Loading commit data...
vf_framepack.c Loading commit data...
vf_framerate.c Loading commit data...
vf_framestep.c Loading commit data...
vf_frei0r.c Loading commit data...
vf_fspp.c Loading commit data...
vf_fspp.h Loading commit data...
vf_geq.c Loading commit data...
vf_gradfun.c Loading commit data...
vf_hflip.c Loading commit data...
vf_histeq.c Loading commit data...
vf_histogram.c Loading commit data...
vf_hqdn3d.c Loading commit data...
vf_hqdn3d.h Loading commit data...
vf_hqx.c Loading commit data...
vf_hue.c Loading commit data...
vf_idet.c Loading commit data...
vf_idet.h Loading commit data...
vf_il.c Loading commit data...
vf_interlace.c Loading commit data...
vf_kerndeint.c Loading commit data...
vf_lenscorrection.c Loading commit data...
vf_libopencv.c Loading commit data...
vf_lut.c Loading commit data...
vf_lut3d.c Loading commit data...
vf_maskedmerge.c Loading commit data...
vf_mcdeint.c Loading commit data...
vf_mergeplanes.c Loading commit data...
vf_mpdecimate.c Loading commit data...
vf_neighbor.c Loading commit data...
vf_noise.c Loading commit data...
vf_noise.h Loading commit data...
vf_null.c Loading commit data...
vf_ocr.c Loading commit data...
vf_overlay.c Loading commit data...
vf_owdenoise.c Loading commit data...
vf_pad.c Loading commit data...
vf_palettegen.c Loading commit data...
vf_paletteuse.c Loading commit data...
vf_perspective.c Loading commit data...
vf_phase.c Loading commit data...
vf_pixdesctest.c Loading commit data...
vf_pp.c Loading commit data...
vf_pp7.c Loading commit data...
vf_pp7.h Loading commit data...
vf_psnr.c Loading commit data...
vf_pullup.c Loading commit data...
vf_pullup.h Loading commit data...
vf_qp.c Loading commit data...
vf_random.c Loading commit data...
vf_removegrain.c Loading commit data...
vf_removelogo.c Loading commit data...
vf_repeatfields.c Loading commit data...
vf_rotate.c Loading commit data...
vf_sab.c Loading commit data...
vf_scale.c Loading commit data...
vf_selectivecolor.c Loading commit data...
vf_separatefields.c Loading commit data...
vf_setfield.c Loading commit data...
vf_showinfo.c Loading commit data...
vf_showpalette.c Loading commit data...
vf_shuffleframes.c Loading commit data...
vf_shuffleplanes.c Loading commit data...
vf_signalstats.c Loading commit data...
vf_smartblur.c Loading commit data...
vf_spp.c Loading commit data...
vf_spp.h Loading commit data...
vf_ssim.c Loading commit data...
vf_stack.c Loading commit data...
vf_stereo3d.c Loading commit data...
vf_subtitles.c Loading commit data...
vf_super2xsai.c Loading commit data...
vf_swapuv.c Loading commit data...
vf_telecine.c Loading commit data...
vf_thumbnail.c Loading commit data...
vf_tile.c Loading commit data...
vf_tinterlace.c Loading commit data...
vf_transpose.c Loading commit data...
vf_unsharp.c Loading commit data...
vf_uspp.c Loading commit data...
vf_vectorscope.c Loading commit data...
vf_vflip.c Loading commit data...
vf_vidstabdetect.c Loading commit data...
vf_vidstabtransform.c Loading commit data...
vf_vignette.c Loading commit data...
vf_w3fdif.c Loading commit data...
vf_waveform.c Loading commit data...
vf_xbr.c Loading commit data...
vf_yadif.c Loading commit data...
vf_zoompan.c Loading commit data...
vf_zscale.c Loading commit data...
video.c Loading commit data...
video.h Loading commit data...
vidstabutils.c Loading commit data...
vidstabutils.h Loading commit data...
vsink_nullsink.c Loading commit data...
vsrc_cellauto.c Loading commit data...
vsrc_life.c Loading commit data...
vsrc_mandelbrot.c Loading commit data...
vsrc_mptestsrc.c Loading commit data...
vsrc_testsrc.c Loading commit data...
w3fdif.h Loading commit data...
yadif.h Loading commit data...