media/libtremor/lib/tremor_window.c

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/media/libtremor/lib/tremor_window.c	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,83 @@
     1.4 +/********************************************************************
     1.5 + *                                                                  *
     1.6 + * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE.   *
     1.7 + *                                                                  *
     1.8 + * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
     1.9 + * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
    1.10 + * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
    1.11 + *                                                                  *
    1.12 + * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002    *
    1.13 + * BY THE Xiph.Org FOUNDATION http://www.xiph.org/                  *
    1.14 + *                                                                  *
    1.15 + ********************************************************************
    1.16 +
    1.17 + function: window functions
    1.18 +
    1.19 + ********************************************************************/
    1.20 +
    1.21 +#include <stdlib.h>
    1.22 +#include <math.h>
    1.23 +#include "misc.h"
    1.24 +#include "window.h"
    1.25 +#include "window_lookup.h"
    1.26 +
    1.27 +const void *_vorbis_window(int type, int left){
    1.28 +
    1.29 +  switch(type){
    1.30 +  case 0:
    1.31 +
    1.32 +    switch(left){
    1.33 +    case 32:
    1.34 +      return vwin64;
    1.35 +    case 64:
    1.36 +      return vwin128;
    1.37 +    case 128:
    1.38 +      return vwin256;
    1.39 +    case 256:
    1.40 +      return vwin512;
    1.41 +    case 512:
    1.42 +      return vwin1024;
    1.43 +    case 1024:
    1.44 +      return vwin2048;
    1.45 +    case 2048:
    1.46 +      return vwin4096;
    1.47 +    case 4096:
    1.48 +      return vwin8192;
    1.49 +    default:
    1.50 +      return(0);
    1.51 +    }
    1.52 +    break;
    1.53 +  default:
    1.54 +    return(0);
    1.55 +  }
    1.56 +}
    1.57 +
    1.58 +void _vorbis_apply_window(ogg_int32_t *d,const void *window_p[2],
    1.59 +			  long *blocksizes,
    1.60 +			  int lW,int W,int nW){
    1.61 +  
    1.62 +  LOOKUP_T *window[2]={window_p[0],window_p[1]};
    1.63 +  long n=blocksizes[W];
    1.64 +  long ln=blocksizes[lW];
    1.65 +  long rn=blocksizes[nW];
    1.66 +
    1.67 +  long leftbegin=n/4-ln/4;
    1.68 +  long leftend=leftbegin+ln/2;
    1.69 +
    1.70 +  long rightbegin=n/2+n/4-rn/4;
    1.71 +  long rightend=rightbegin+rn/2;
    1.72 +  
    1.73 +  int i,p;
    1.74 +
    1.75 +  for(i=0;i<leftbegin;i++)
    1.76 +    d[i]=0;
    1.77 +
    1.78 +  for(p=0;i<leftend;i++,p++)
    1.79 +    d[i]=MULT31(d[i],window[lW][p]);
    1.80 +
    1.81 +  for(i=rightbegin,p=rn/2-1;i<rightend;i++,p--)
    1.82 +    d[i]=MULT31(d[i],window[nW][p]);
    1.83 +
    1.84 +  for(;i<n;i++)
    1.85 +    d[i]=0;
    1.86 +}

mercurial