audio: Avoid unsigned sample wraparound
When !defined(SIGNED), nv - HALF will wrap around if nv < HALF because nv and HALF are unsigned. Fix it by casting nv to mixeng_real, which is signed. Signed-off-by: Akihiko Odaki <odaki@rsg.ci.i.u-tokyo.ac.jp> Acked-by: Marc-André Lureau <marcandre.lureau@redhat.com> Message-Id: <20260423-audio-v1-1-e1d6b65c76f9@rsg.ci.i.u-tokyo.ac.jp>
Akihiko Odaki committed
Apr 23, 2026 at 22:55 UTC
133c52f63eefb8c35d9a2e0e28d1db99089a46e5
1 file changed
+2
-2
audio/mixeng_template.h
+2
-2
@@ -43,13 +43,13 @@ static inline mixeng_real glue (conv_, ET) (IN_T v)
43
#ifdef SIGNED
44
return nv * (2.f / ((mixeng_real)IN_MAX - IN_MIN));
45
#else
46
- return (nv - HALF) * (2.f / (mixeng_real)IN_MAX);
46
+ return ((mixeng_real)nv - HALF) * (2.f / (mixeng_real)IN_MAX);
47
#endif
48
#else /* !RECIPROCAL */
49
#ifdef SIGNED
50
return nv / (((mixeng_real)IN_MAX - IN_MIN) / 2.f);
51
#else
52
- return (nv - HALF) / ((mixeng_real)IN_MAX / 2.f);
52
+ return ((mixeng_real)nv - HALF) / ((mixeng_real)IN_MAX / 2.f);
53
#endif
54
#endif
55
}