michael@0: /******************************************************************** michael@0: * * michael@0: * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. * michael@0: * * michael@0: * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * michael@0: * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * michael@0: * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * michael@0: * * michael@0: * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002 * michael@0: * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ * michael@0: * * michael@0: ******************************************************************** michael@0: michael@0: function: window functions michael@0: michael@0: ********************************************************************/ michael@0: michael@0: #include michael@0: #include michael@0: #include "misc.h" michael@0: #include "window.h" michael@0: #include "window_lookup.h" michael@0: michael@0: const void *_vorbis_window(int type, int left){ michael@0: michael@0: switch(type){ michael@0: case 0: michael@0: michael@0: switch(left){ michael@0: case 32: michael@0: return vwin64; michael@0: case 64: michael@0: return vwin128; michael@0: case 128: michael@0: return vwin256; michael@0: case 256: michael@0: return vwin512; michael@0: case 512: michael@0: return vwin1024; michael@0: case 1024: michael@0: return vwin2048; michael@0: case 2048: michael@0: return vwin4096; michael@0: case 4096: michael@0: return vwin8192; michael@0: default: michael@0: return(0); michael@0: } michael@0: break; michael@0: default: michael@0: return(0); michael@0: } michael@0: } michael@0: michael@0: void _vorbis_apply_window(ogg_int32_t *d,const void *window_p[2], michael@0: long *blocksizes, michael@0: int lW,int W,int nW){ michael@0: michael@0: LOOKUP_T *window[2]={window_p[0],window_p[1]}; michael@0: long n=blocksizes[W]; michael@0: long ln=blocksizes[lW]; michael@0: long rn=blocksizes[nW]; michael@0: michael@0: long leftbegin=n/4-ln/4; michael@0: long leftend=leftbegin+ln/2; michael@0: michael@0: long rightbegin=n/2+n/4-rn/4; michael@0: long rightend=rightbegin+rn/2; michael@0: michael@0: int i,p; michael@0: michael@0: for(i=0;i