Mercurial > mplayer.hg
view tremor/window.c @ 16624:e59617a9aea1
Check for eof instead of decoding the same data over and over.
The whole code could use a lot more checks on return values...
author | reimar |
---|---|
date | Sat, 01 Oct 2005 12:35:18 +0000 |
parents | 8631a3803289 |
children | e83eef58b30a |
line wrap: on
line source
/******************************************************************** * * * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. * * * * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002 * * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ * * * ******************************************************************** function: window functions ********************************************************************/ #include <stdlib.h> #include <math.h> #include "os.h" #include "misc.h" #include "window.h" #include "window_lookup.h" const void *_vorbis_window(int type, int left){ switch(type){ case 0: switch(left){ case 32: return vwin64; case 64: return vwin128; case 128: return vwin256; case 256: return vwin512; case 512: return vwin1024; case 1024: return vwin2048; case 2048: return vwin4096; case 4096: return vwin8192; default: return(0); } break; default: return(0); } } void _vorbis_apply_window(ogg_int32_t *d,const void *window_p[2], long *blocksizes, int lW,int W,int nW){ LOOKUP_T *window[2]={window_p[0],window_p[1]}; long n=blocksizes[W]; long ln=blocksizes[lW]; long rn=blocksizes[nW]; long leftbegin=n/4-ln/4; long leftend=leftbegin+ln/2; long rightbegin=n/2+n/4-rn/4; long rightend=rightbegin+rn/2; int i,p; for(i=0;i<leftbegin;i++) d[i]=0; for(p=0;i<leftend;i++,p++) d[i]=MULT31(d[i],window[lW][p]); for(i=rightbegin,p=rn/2-1;i<rightend;i++,p--) d[i]=MULT31(d[i],window[nW][p]); for(;i<n;i++) d[i]=0; }