summaryrefslogtreecommitdiff
path: root/libswresample/resample_template.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2014-06-29 13:55:29 +0200
committerMichael Niedermayer <michaelni@gmx.at>2014-06-29 22:19:57 +0200
commitc5a405c4f07066efa786b75865c2c9c8f2a399ed (patch)
tree38b007182d0213513ff7908aaf101f1bcaaf85c0 /libswresample/resample_template.c
parent7f5d75f95b65eb8499f6bf65535ce18a7c38ec5f (diff)
swresample/resample_template: flip order of operations in swri_resample_linear() for 32bit
Fixes integer overflow Found-by: BBB Reviewed-by: "Ronald S. Bultje" <rsbultje@gmail.com> Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libswresample/resample_template.c')
-rw-r--r--libswresample/resample_template.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/libswresample/resample_template.c b/libswresample/resample_template.c
index db208e3414..5983d46b79 100644
--- a/libswresample/resample_template.c
+++ b/libswresample/resample_template.c
@@ -62,7 +62,6 @@
# define DELEM int32_t
# define FELEM int32_t
# define FELEM2 int64_t
-# define FELEML int64_t
# define FELEM_MAX INT32_MAX
# define FELEM_MIN INT32_MIN
# define OUT(d, v) v = (v + (1<<(FILTER_SHIFT-1)))>>FILTER_SHIFT;\
@@ -174,7 +173,11 @@ int RENAME(swri_resample_linear)(ResampleContext *c,
v2 += src[sample_index + i] * (FELEM2)filter[i + c->filter_alloc];
}
#endif
+#ifdef FELEML
val += (v2 - val) * (FELEML) frac / c->src_incr;
+#else
+ val += (v2 - val) / c->src_incr * frac;
+#endif
OUT(dst[dst_index], val);
frac += c->dst_incr_mod;