[SCM] libav/experimental: replaygain: fix gain sign decoding
siretart at users.alioth.debian.org
siretart at users.alioth.debian.org
Sun Aug 10 16:02:40 UTC 2014
The following commit has been merged in the experimental branch:
commit 25b6837f7cacd691b19cbc12b9dad1ce84a318a1
Author: Alessandro Ghedini <alessandro at ghedini.me>
Date: Fri Apr 4 11:50:43 2014 +0200
replaygain: fix gain sign decoding
The gain sign was incorrectly decoded: since the FFSIGN() macro treats 0 as
negative, gain values starting with "0." were always decoded as negative.
Signed-off-by: Anton Khirnov <anton at khirnov.net>
diff --git a/libavformat/replaygain.c b/libavformat/replaygain.c
index cf4dbf8..6983601 100644
--- a/libavformat/replaygain.c
+++ b/libavformat/replaygain.c
@@ -40,6 +40,7 @@ static int32_t parse_gain(const char *gain)
char *fraction;
int scale = 10000;
int32_t mb = 0;
+ int sign = 1;
int db;
if (!gain)
@@ -47,6 +48,9 @@ static int32_t parse_gain(const char *gain)
gain += strspn(gain, " \t");
+ if (*gain == '-')
+ sign = -1;
+
db = strtol(gain, &fraction, 0);
if (*fraction++ == '.') {
while (av_isdigit(*fraction) && scale) {
@@ -59,7 +63,7 @@ static int32_t parse_gain(const char *gain)
if (abs(db) > (INT32_MAX - mb) / 100000)
return INT32_MIN;
- return db * 100000 + FFSIGN(db) * mb;
+ return db * 100000 + sign * mb;
}
static uint32_t parse_peak(const uint8_t *peak)
--
Libav/FFmpeg packaging
More information about the pkg-multimedia-commits
mailing list