_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++)
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;
}
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];
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];
+
}
}
}
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);
}
}
+
+
+
/* 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];
/* 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);
}