mirror of https://git.ffmpeg.org/ffmpeg.git
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@khirnov.net>
This commit is contained in:
parent
f37815b1d5
commit
25b6837f7c
|
@ -40,6 +40,7 @@ static int32_t parse_gain(const char *gain)
|
||||||
char *fraction;
|
char *fraction;
|
||||||
int scale = 10000;
|
int scale = 10000;
|
||||||
int32_t mb = 0;
|
int32_t mb = 0;
|
||||||
|
int sign = 1;
|
||||||
int db;
|
int db;
|
||||||
|
|
||||||
if (!gain)
|
if (!gain)
|
||||||
|
@ -47,6 +48,9 @@ static int32_t parse_gain(const char *gain)
|
||||||
|
|
||||||
gain += strspn(gain, " \t");
|
gain += strspn(gain, " \t");
|
||||||
|
|
||||||
|
if (*gain == '-')
|
||||||
|
sign = -1;
|
||||||
|
|
||||||
db = strtol(gain, &fraction, 0);
|
db = strtol(gain, &fraction, 0);
|
||||||
if (*fraction++ == '.') {
|
if (*fraction++ == '.') {
|
||||||
while (av_isdigit(*fraction) && scale) {
|
while (av_isdigit(*fraction) && scale) {
|
||||||
|
@ -59,7 +63,7 @@ static int32_t parse_gain(const char *gain)
|
||||||
if (abs(db) > (INT32_MAX - mb) / 100000)
|
if (abs(db) > (INT32_MAX - mb) / 100000)
|
||||||
return INT32_MIN;
|
return INT32_MIN;
|
||||||
|
|
||||||
return db * 100000 + FFSIGN(db) * mb;
|
return db * 100000 + sign * mb;
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint32_t parse_peak(const uint8_t *peak)
|
static uint32_t parse_peak(const uint8_t *peak)
|
||||||
|
|
Loading…
Reference in New Issue