Skip to content

Commit

Permalink
af_volnorm: fix output range with float input
Browse files Browse the repository at this point in the history
af_volnorm can process either int16_t or float audio data. The float
version used 0 to INT_MAX as full value range, when it should be 0 to
1. This effectively disabled the filter (due to all input being
considered to fall in the silence range). Fix.

Reported by Tobias Jacobi <liquid.acid@gmx.net>.
  • Loading branch information
Uoti Urpala committed Jan 2, 2013
1 parent 1bfd2c5 commit 6541c4a
Showing 1 changed file with 3 additions and 3 deletions.
6 changes: 3 additions & 3 deletions libaf/af_volnorm.c
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@
// Silence level
// FIXME: should be relative to the level of the samples
#define SIL_S16 (SHRT_MAX * 0.01)
#define SIL_FLOAT (INT_MAX * 0.01) // FIXME
#define SIL_FLOAT 0.01

// smooth must be in ]0.0, 1.0[
#define SMOOTH_MUL 0.06
Expand Down Expand Up @@ -106,7 +106,7 @@ static int control(struct af_instance_s* af, int cmd, void* arg)
return AF_ERROR;
s->method = i-1;
s->mid_s16 = ((float)SHRT_MAX) * target;
s->mid_float = ((float)INT_MAX) * target;
s->mid_float = target;
return AF_OK;
}
}
Expand Down Expand Up @@ -333,7 +333,7 @@ static int af_open(af_instance_t* af){
((af_volnorm_t*)af->setup)->lastavg = ((float)SHRT_MAX) * DEFAULT_TARGET;
((af_volnorm_t*)af->setup)->idx = 0;
((af_volnorm_t*)af->setup)->mid_s16 = ((float)SHRT_MAX) * DEFAULT_TARGET;
((af_volnorm_t*)af->setup)->mid_float = ((float)INT_MAX) * DEFAULT_TARGET;
((af_volnorm_t*)af->setup)->mid_float = DEFAULT_TARGET;
for (i = 0; i < NSAMPLES; i++)
{
((af_volnorm_t*)af->setup)->mem[i].len = 0;
Expand Down

0 comments on commit 6541c4a

Please sign in to comment.