10l memory leak + bug fixes in ms to sample time conversion

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@8675 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
anders 2002-12-31 05:42:20 +00:00
parent 630d1fcf94
commit ec6de0f24a
5 changed files with 17 additions and 15 deletions

View File

@ -187,9 +187,9 @@ int af_from_dB(int n, float* in, float* out, float k, float mi, float ma);
AF_OK if of and AF_ERROR if fail */ AF_OK if of and AF_ERROR if fail */
int af_to_dB(int n, float* in, float* out, float k); int af_to_dB(int n, float* in, float* out, float k);
/* Helper function used to convert from ms to sample time*/ /* Helper function used to convert from ms to sample time*/
int af_from_ms(int n, float* in, float* out, int rate, float mi, float ma); int af_from_ms(int n, float* in, int* out, int rate, float mi, float ma);
/* Helper function used to convert from sample time to ms */ /* Helper function used to convert from sample time to ms */
int af_to_ms(int n, float* in, float* out, int rate); int af_to_ms(int n, int* in, float* out, int rate);
/* Helper function for testing the output format */ /* Helper function for testing the output format */
int af_test_output(struct af_instance_s* af, af_data_t* out); int af_test_output(struct af_instance_s* af, af_data_t* out);

View File

@ -26,8 +26,8 @@ typedef struct af_comp_s
float time[AF_NCH]; // Forgetting factor for power estimate float time[AF_NCH]; // Forgetting factor for power estimate
float pow[AF_NCH]; // Estimated power level [dB] float pow[AF_NCH]; // Estimated power level [dB]
float tresh[AF_NCH]; // Threshold [dB] float tresh[AF_NCH]; // Threshold [dB]
float attack[AF_NCH]; // Attack time [ms] int attack[AF_NCH]; // Attack time [ms]
float release[AF_NCH]; // Release time [ms] int release[AF_NCH]; // Release time [ms]
float ratio[AF_NCH]; // Compression ratio float ratio[AF_NCH]; // Compression ratio
}af_comp_t; }af_comp_t;

View File

@ -26,8 +26,8 @@ typedef struct af_gate_s
float time[AF_NCH]; // Forgetting factor for power estimate float time[AF_NCH]; // Forgetting factor for power estimate
float pow[AF_NCH]; // Estimated power level [dB] float pow[AF_NCH]; // Estimated power level [dB]
float tresh[AF_NCH]; // Threshold [dB] float tresh[AF_NCH]; // Threshold [dB]
float attack[AF_NCH]; // Attack time [ms] int attack[AF_NCH]; // Attack time [ms]
float release[AF_NCH]; // Release time [ms] int release[AF_NCH]; // Release time [ms]
float range[AF_NCH]; // Range level [dB] float range[AF_NCH]; // Range level [dB]
}af_gate_t; }af_gate_t;

View File

@ -113,6 +113,8 @@ static int control(struct af_instance_s* af, int cmd, void* arg)
// Deallocate memory // Deallocate memory
static void uninit(struct af_instance_s* af) static void uninit(struct af_instance_s* af)
{ {
if(af->data->audio)
free(af->data->audio);
if(af->data) if(af->data)
free(af->data); free(af->data);
if(af->setup) if(af->setup)

View File

@ -29,7 +29,7 @@ inline int af_to_dB(int n, float* in, float* out, float k)
if(!in || !out) if(!in || !out)
return AF_ERROR; return AF_ERROR;
for(i=0;i<AF_NCH;i++){ for(i=0;i<n;i++){
if(in[i] == 0.0) if(in[i] == 0.0)
out[i]=-200.0; out[i]=-200.0;
else else
@ -38,30 +38,30 @@ inline int af_to_dB(int n, float* in, float* out, float k)
return AF_OK; return AF_OK;
} }
/* Convert from ms to sample time*/ /* Convert from ms to sample time */
inline int af_from_ms(int n, float* in, float* out, int rate, float mi, float ma) inline int af_from_ms(int n, float* in, int* out, int rate, float mi, float ma)
{ {
int i = 0; int i = 0;
// Sanity check // Sanity check
if(!in || !out) if(!in || !out)
return AF_ERROR; return AF_ERROR;
for(i=0;i<AF_NCH;i++) for(i=0;i<n;i++)
out[i]=clamp(in[i],ma,mi); out[i]=(int)((float)rate * clamp(in[i],mi,ma)/1000.0);
return AF_OK; return AF_OK;
} }
/* Convert from sample time to ms */ /* Convert from sample time to ms */
inline int af_to_ms(int n, float* in, float* out, int rate) inline int af_to_ms(int n, int* in, float* out, int rate)
{ {
int i = 0; int i = 0;
// Sanity check // Sanity check
if(!in || !out) if(!in || !out || !rate)
return AF_ERROR; return AF_ERROR;
for(i=0;i<AF_NCH;i++) for(i=0;i<n;i++)
out[i]=in[i]; out[i]=1000.0 * (float)in[i]/((float)rate);
return AF_OK; return AF_OK;
} }