ffmpeg/libavfilter/x86
Thomas Mundt a7f6bfdc18 avfilter/interlace: prevent over-sharpening with the complex low-pass filter
The complex vertical low-pass filter slightly over-sharpens the picture. This becomes visible when several transcodings are cascaded and the error potentises, e.g. some generations of HD->SD SD->HD.
To prevent this behaviour the destination pixel must not exceed the source pixel when the average of the pixels above and below is less than the source pixel. And the other way around.

Tested and approved in a visual transcoding cascade test by video professionals.
SSIM/PSNR test with the first generation of an HD->SD file as a reference against the 6th generation(3 x SD->HD HD->SD):
Results without the patch:
SSIM Y:0.956508 (13.615881) U:0.991601 (20.757750) V:0.993004 (21.551382) All:0.974405 (15.918463)
PSNR y:31.838009 u:48.424280 v:48.962711 average:34.759466 min:31.699297 max:40.857847
Results with the patch:
SSIM Y:0.970051 (15.236232) U:0.991883 (20.905857) V:0.993174 (21.658049) All:0.981290 (17.279202)
PSNR y:34.412108 u:48.504454 v:48.969496 average:37.264644 min:34.310637 max:42.373392

Signed-off-by: Thomas Mundt <tmundt75@gmail.com>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2017-09-15 22:40:21 +02:00
..
Makefile avfilter: add limiter filter 2017-07-08 11:49:54 +02:00
af_afir.asm avfilter: add arbitrary audio FIR filter 2017-05-09 20:47:52 +02:00
af_afir_init.c avfilter: add arbitrary audio FIR filter 2017-05-09 20:47:52 +02:00
af_volume.asm
af_volume_init.c
avf_showcqt.asm
avf_showcqt_init.c
colorspacedsp.asm
colorspacedsp_init.c
vf_blend.asm avfilter/vf_blend: rename addition128 and difference128 to grainmerge and grainextract 2017-08-24 14:45:52 +02:00
vf_blend_init.c avfilter/vf_blend: rename addition128 and difference128 to grainmerge and grainextract 2017-08-24 14:45:52 +02:00
vf_bwdif.asm
vf_bwdif_init.c
vf_eq.c
vf_fspp.asm
vf_fspp_init.c
vf_gradfun.asm
vf_gradfun_init.c build: Generalize yasm/nasm-related variable names 2017-06-21 17:00:29 -03:00
vf_hqdn3d.asm
vf_hqdn3d_init.c build: Generalize yasm/nasm-related variable names 2017-06-21 17:00:29 -03:00
vf_idet.asm
vf_idet_init.c build: Generalize yasm/nasm-related variable names 2017-06-21 17:00:29 -03:00
vf_interlace.asm avfilter/interlace: prevent over-sharpening with the complex low-pass filter 2017-09-15 22:40:21 +02:00
vf_interlace_init.c avfilter/interlace: add complex vertical low-pass filter 2017-05-02 14:09:50 -03:00
vf_limiter.asm x86/vf_limiter: make limiter functions work on x86_32 2017-07-13 18:17:17 -03:00
vf_limiter_init.c x86/vf_limiter: make limiter functions work on x86_32 2017-07-13 18:17:17 -03:00
vf_maskedmerge.asm
vf_maskedmerge_init.c
vf_noise.c
vf_pp7.asm
vf_pp7_init.c
vf_psnr.asm
vf_psnr_init.c
vf_pullup.asm
vf_pullup_init.c build: Generalize yasm/nasm-related variable names 2017-06-21 17:00:29 -03:00
vf_removegrain.asm
vf_removegrain_init.c
vf_spp.c vf_spp: only assign function pointers if permutation matches expectations. 2017-06-24 07:53:15 -04:00
vf_ssim.asm
vf_ssim_init.c
vf_stereo3d.asm
vf_stereo3d_init.c
vf_tinterlace_init.c avfilter/interlace: add complex vertical low-pass filter 2017-05-02 14:09:50 -03:00
vf_w3fdif.asm
vf_w3fdif_init.c
vf_yadif.asm
vf_yadif_init.c
yadif-10.asm
yadif-16.asm