aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRostislav Pehlivanov <atomnuker@gmail.com>2016-05-07 18:05:25 +0100
committerRostislav Pehlivanov <atomnuker@gmail.com>2016-05-08 19:09:42 +0100
commitb6c207f5358181f64e8cfadc929d61f0ed25266c (patch)
tree77514e90f845cb1045c9ff7d46038b877dd1cabd
parent64fd62d68abeb3a7325695061c9cb21e13c02d08 (diff)
downloadffmpeg-b6c207f5358181f64e8cfadc929d61f0ed25266c.tar.gz
vc2enc_dwt: use 32 bit coefficients by default
The problem is that with particularly complex images and especially at high bit depths and 5-level transforms the coefficients would overflow, causing huge artifacts to appear. This was discovered thanks to the fate tests, which will have to be redone as this fixes a multitude of problems and increases PSNR. There is a slight performance drop associated with this change, making the encoder slower by 1.15 times, however this is necessary in order to avoid undefined behavior and overflows. It would be worth to template the transforms to keep the performance for 8 bit images as 32 bit coefficients are unnecessary for that case, but the primary use of the encoder is to encode video at 10 bits. Reviewed-by: Christophe Gisquet <christophe.gisquet@gmail.com> Reviewed-by: Michael Niedermayer <michael@niedermayer.cc> Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
-rw-r--r--libavcodec/vc2enc_dwt.h2
1 files changed, 1 insertions, 1 deletions
diff --git a/libavcodec/vc2enc_dwt.h b/libavcodec/vc2enc_dwt.h
index af6fe3e2a2..7fbbfbe0ed 100644
--- a/libavcodec/vc2enc_dwt.h
+++ b/libavcodec/vc2enc_dwt.h
@@ -25,7 +25,7 @@
#include <stddef.h>
#include <stdint.h>
-typedef int16_t dwtcoef;
+typedef int32_t dwtcoef;
enum VC2TransformType {
VC2_TRANSFORM_9_7 = 0, /* Deslauriers-Dubuc (9,7) */