Preecho clamping code is now active.
authorMonty <xiphmont@xiph.org>
Wed, 13 Oct 1999 02:23:36 +0000 (02:23 +0000)
committerMonty <xiphmont@xiph.org>
Wed, 13 Oct 1999 02:23:36 +0000 (02:23 +0000)
Monty

svn path=/trunk/vorbis/; revision=146

lib/analysis.c
lib/envelope.c
lib/synthesis.c

index d617d6a..533e3be 100644 (file)
@@ -58,11 +58,11 @@ int vorbis_analysis(vorbis_block *vb,ogg_packet *op){
   _oggpack_write(opb,vb->W,1);
 
   /* we have the preecho metrics; decide what to do with them */
-  /*_ve_envelope_sparsify(vb);
-    _ve_envelope_apply(vb,0);*/
+  _ve_envelope_sparsify(vb);
+  _ve_envelope_apply(vb,0);
 
   /* Encode the envelope */
-  /*if(_ve_envelope_encode(vb))return(-1);*/
+  if(_ve_envelope_encode(vb))return(-1);
   
   /* time domain PCM -> MDCT domain */
   for(i=0;i<vi->channels;i++)
index 514ef89..1a93304 100644 (file)
@@ -200,6 +200,8 @@ void _ve_envelope_sparsify(vorbis_block *vb){
          
          mult[i]=floor(log(mult[i]/clamp/vi->preecho_clamp)/log(2))-1;
          if(mult[i]>15)mult[i]=15;
+         if(mult[i]<1)mult[i]=1;
+
        }else{
          mult[i]=0;
        }
@@ -213,7 +215,7 @@ void _ve_envelope_apply(vorbis_block *vb,int multp){
   vorbis_info *vi=vb->vd->vi;
   double env[vb->multend*vi->envelopesa];
   envelope_lookup *look=&vb->vd->ve;
-  int i,j,k;
+  int i,j;
   
   for(i=0;i<vi->envelopech;i++){
     double *mult=vb->mult[i];
@@ -224,29 +226,21 @@ void _ve_envelope_apply(vorbis_block *vb,int multp){
     for(j=0;j<vb->multend;j++){
       if(mult[j]){
        last=mult[j];
-      }else
+      }else{
        mult[j]=last;
+      }
     }
 
     /* compute the envelope curve */
     if(_ve_envelope_generate(mult,env,look->window,vb->multend,
                             vi->envelopesa)){
-      
-      /* apply the envelope curve */
-      for(j=0;j<vi->channels;j++){
-       
-       /* check to see if the generated envelope applies to this channel */
-       /*if(vi->envelopemap[j]==i){ not mapping yet */
-       if(j==i){
-         
-         if(multp)
-           for(k=0;k<vb->multend*vi->envelopesa;k++)
-             vb->pcm[j][k]*=env[k];
-         else
-           for(k=0;k<vb->multend*vi->envelopesa;k++)
-             vb->pcm[j][k]/=env[k];
-       }
-      }
+      if(multp)
+       for(j=0;j<vb->multend*vi->envelopesa;j++)
+         vb->pcm[i][j]*=env[j];
+      else
+       for(j=0;j<vb->multend*vi->envelopesa;j++)
+         vb->pcm[i][j]/=env[j];
+
     }
   }
 }
@@ -263,8 +257,9 @@ int _ve_envelope_encode(vorbis_block *vb){
 
   for(i=0;i<vi->envelopech;i++){
     double *mult=vb->mult[i];
-    for(j=0;j<n;j++)
+    for(j=0;j<n;j++){
       _oggpack_write(&vb->opb,(int)(mult[j]),4);
+    }
   }
   return(0);
 }
@@ -288,3 +283,6 @@ int _ve_envelope_decode(vorbis_block *vb){
 }
 
 
+
+
+
index e32d32b..fed19e5 100644 (file)
@@ -56,10 +56,10 @@ int vorbis_synthesis(vorbis_block *vb,ogg_packet *op){
 
   /* The storage vectors are large enough; set the use markers */
   n=vb->pcmend=vi->blocksize[vb->W];
-  vb->multend=vb->pcmend/vi->envelopesa;
+  vb->multend=n/vi->envelopesa;
   
   /* recover the time envelope */
-  /*if(_ve_envelope_decode(vb)<0)return(-1);*/
+  if(_ve_envelope_decode(vb)<0)return(-1);
 
   for(i=0;i<vi->channels;i++){
     double *lpc=vb->lpc[i];
@@ -81,9 +81,10 @@ int vorbis_synthesis(vorbis_block *vb,ogg_packet *op){
     /* MDCT->time */
     mdct_backward(&vb->vd->vm[vb->W],vb->pcm[i],vb->pcm[i]);
     
-    /* apply time domain envelope */
-    /*_ve_envelope_apply(vb,1);*/
   }
+
+  /* apply time domain envelope */
+  _ve_envelope_apply(vb,1);
   
   return(0);
 }