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 +}