[FFmpeg-cvslog] replaygain: fix gain sign decoding

Alessandro Ghedini git at videolan.org
Fri Apr 4 22:51:51 CEST 2014


ffmpeg | branch: master | Alessandro Ghedini <alessandro at ghedini.me> | Fri Apr  4 11:50:43 2014 +0200| [25b6837f7cacd691b19cbc12b9dad1ce84a318a1] | committer: Anton Khirnov

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>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=25b6837f7cacd691b19cbc12b9dad1ce84a318a1
---

 libavformat/replaygain.c |    6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

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)



More information about the ffmpeg-cvslog mailing list