summaryrefslogtreecommitdiff
path: root/lib/psy.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/psy.c')
-rw-r--r--lib/psy.c73
1 files changed, 35 insertions, 38 deletions
diff --git a/lib/psy.c b/lib/psy.c
index 96267282..cdfb2914 100644
--- a/lib/psy.c
+++ b/lib/psy.c
@@ -11,7 +11,7 @@
********************************************************************
function: psychoacoustics not including preecho
- last mod: $Id: psy.c,v 1.64.2.1 2001/12/27 08:09:33 xiphmont Exp $
+ last mod: $Id: psy.c,v 1.64.2.2 2002/01/01 02:27:24 xiphmont Exp $
********************************************************************/
@@ -942,7 +942,7 @@ void _vp_quantize_couple(vorbis_look_psy *p,
int passno){
int i,j,k,n=p->n;
- vorbis_info_psy *info=p->vi;
+ vorbis_info_psy *info=p->vi;
/* perform any requested channel coupling */
for(i=0;i<vi->coupling_steps;i++){
@@ -1013,45 +1013,42 @@ static int apsort(const void *a, const void *b){
}
void psy_normalize_noise(vorbis_block *vb,float *pcm,int n){
- /* sort in ascending order */
- int i;
- float **index=alloca(n*sizeof(*index));
- float acc=0,qacc=0;
-
- for(i=0;i<n;i++)index[i]=pcm+i;
- qsort(index,n,sizeof(*index),apsort);
-
- for(i=0;i<n;i++)acc+=fabs(pcm[i]);
- for(i=0;i<n;i++){
- float qval=rint(*index[i]);
-
- if(qval!=0.f){
- qacc+=fabs(qval);
- }else{
- if(fabs(*index[i])<.1f)break;
- if(*index[i]<0){
- qacc+=1.f;
- *index[i]= -1.;
+ vorbis_dsp_state *vd=vb->vd;
+ vorbis_info *vi=vd->vi;
+ codec_setup_info *ci=vi->codec_setup;
+ highlevel_encode_setup *hi=&ci->hi;
+
+ if(hi->normalize_noise_p){
+ /* sort in decending order */
+ int i;
+ float **index=alloca(n*sizeof(*index));
+ float acc=0,qacc=0;
+
+ for(i=0;i<n;i++)index[i]=pcm+i;
+ qsort(index,n,sizeof(*index),apsort);
+
+ for(i=0;i<n;i++)acc+=fabs(pcm[i]);
+ for(i=0;i<n;i++){
+ float qval=rint(*index[i]);
+
+ if(qval!=0.f){
+ qacc+=fabs(qval);
}else{
- qacc+=1.f;
- *index[i]=1.;
+ if(fabs(*index[i])<hi->normalize_noise_minimum_upgrade)break;
+ if(*index[i]<0){
+ qacc+=hi->normalize_noise_unit_weight;
+ *index[i]= -1.;
+ }else{
+ qacc+=hi->normalize_noise_unit_weight;
+ *index[i]= 1.;
+ }
+ if(qacc>acc)break;
}
- if(qacc>acc)break;
+
+ }
+ for(;i<n;i++){
+ *index[i]=0.;
}
-
- }
- for(;i<n;i++){
- *index[i]=0.;
}
-
}
-
-
-
-
-
-
-
-
-