avfilter/interlace: prevent over-sharpening with the complex low-pass filter
authorThomas Mundt <tmundt75@gmail.com>
Wed, 30 Aug 2017 01:37:18 +0000 (03:37 +0200)
committerMichael Niedermayer <michael@niedermayer.cc>
Fri, 15 Sep 2017 20:40:21 +0000 (22:40 +0200)
commita7f6bfdc185a04a703bedd712ee306435372af12
tree6acb620c777348c07a8fdd6250e23bf082c6e4ed
parent1a85fb7e1eb375b37ee9863ce8e6e7ada1742dbe
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>
libavfilter/vf_interlace.c
libavfilter/vf_tinterlace.c
libavfilter/x86/vf_interlace.asm
tests/ref/fate/filter-interlace-complex