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
..
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 x86inc: Drop SECTION_TEXT macro 2015-08-11 11:12:01 +02:00
af_volume_init.c x86: check for AV_CPU_FLAG_AVXSLOW where useful 2015-06-01 00:15:35 +02:00
avf_showcqt.asm x86/avf_showcqt: use the FMULADD_PS x86util macro 2016-08-20 02:12:33 -03:00
avf_showcqt_init.c avfilter/avf_showcqt: cqt_calc optimization on x86 2016-06-08 16:09:43 +07:00
colorspacedsp.asm vf_colorspace: x86-64 SIMD (SSE2) optimizations. 2016-04-12 16:42:48 -04:00
colorspacedsp_init.c vf_colorspace: use enums for bpp/subsampling array indices. 2016-05-10 08:37:56 -04:00
Makefile avfilter: add limiter filter 2017-07-08 11:49:54 +02:00
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 avfilter/vf_bwdif: Add yadif base information to copyright header 2016-03-16 00:05:45 -03:00
vf_bwdif_init.c avfilter/vf_bwdif: add x86 SIMD 2016-03-13 10:06:21 +01:00
vf_eq.c avfilter/vf_eq: mark src as const 2015-01-27 01:46:08 +01:00
vf_fspp.asm avfilter/x86/vf_fspp: Fix invalid combination of opcode and operands 2015-05-26 01:43:47 +02:00
vf_fspp_init.c x86/vf_fspp: port inline asm to yasm 2014-12-26 15:39:51 -03:00
vf_gradfun.asm Merge commit '0e73049416' 2013-10-24 10:35:39 +02:00
vf_gradfun_init.c build: Generalize yasm/nasm-related variable names 2017-06-21 17:00:29 -03:00
vf_hqdn3d.asm avfilter/x86/vf_hqdn3d: Fix register types 2015-05-27 05:18:55 +02:00
vf_hqdn3d_init.c build: Generalize yasm/nasm-related variable names 2017-06-21 17:00:29 -03:00
vf_idet.asm x86inc: Drop SECTION_TEXT macro 2015-08-04 20:13:09 +02:00
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 x86/vf_maskedmerge: make ff_maskedmerge8_sse2 work on x86_32 2015-12-24 13:05:18 -03:00
vf_maskedmerge_init.c x86/vf_maskedmerge: make ff_maskedmerge8_sse2 work on x86_32 2015-12-24 13:05:18 -03:00
vf_noise.c asm: FF_-prefix internal macros used in inline assembly 2016-06-27 17:21:18 +02:00
vf_pp7.asm x86/vf_pp7: port dctB_mmx to yasm 2015-01-09 20:02:27 -03:00
vf_pp7_init.c x86/vf_pp7: port dctB_mmx to yasm 2015-01-09 20:02:27 -03:00
vf_psnr.asm avfilter/x86/vf_psnr.asm: fix typo 2015-10-01 21:53:13 +02:00
vf_psnr_init.c vf_psnr: sse2 optimizations for sum-squared-error. 2015-07-14 17:57:14 +02:00
vf_pullup.asm x86inc: Drop SECTION_TEXT macro 2015-08-04 20:13:09 +02:00
vf_pullup_init.c build: Generalize yasm/nasm-related variable names 2017-06-21 17:00:29 -03:00
vf_removegrain.asm doc: fix spelling errors 2015-10-09 22:09:08 +02:00
vf_removegrain_init.c avfilter/vf_removegrain: add x86 and x86_64 SSE2 functions 2015-07-14 23:50:50 +00:00
vf_spp.c vf_spp: only assign function pointers if permutation matches expectations. 2017-06-24 07:53:15 -04:00
vf_ssim.asm x86/vf_ssim: add ff_ssim_4x4_line_xop 2015-07-20 13:18:05 -03:00
vf_ssim_init.c x86/vf_ssim: add ff_ssim_4x4_line_xop 2015-07-20 13:18:05 -03:00
vf_stereo3d.asm x86/vf_stereo3d: remove a few unnecessary movas 2016-01-03 02:09:02 -03:00
vf_stereo3d_init.c x86/vf_stereo3d: make ff_anaglyph_sse4 work on x86_32 2015-12-28 17:20:24 -03:00
vf_tinterlace_init.c avfilter/interlace: add complex vertical low-pass filter 2017-05-02 14:09:50 -03:00
vf_w3fdif.asm x86/vf_w3fdif: 32-bit compatibility for w3fdif_simple_high 2016-01-08 11:56:43 +01:00
vf_w3fdif_init.c avfilter/vf_w3fdif: add >8 but <16 bit support 2016-12-25 09:50:36 +01:00
vf_yadif.asm x86util: add and use RSHIFT/LSHIFT macros 2014-06-15 13:19:27 +02:00
vf_yadif_init.c Merge commit 'dc40a70c57' 2016-06-26 15:53:00 +02:00
yadif-10.asm x86/yadif-10: remove duplicate ABS macro 2014-07-10 21:06:51 +02:00
yadif-16.asm fix spelling errors 2014-07-12 22:33:27 +02:00