summaryrefslogtreecommitdiff
path: root/apps/codecs/Tremor/window.c
diff options
context:
space:
mode:
authorMarcoen Hirschberg <marcoen@gmail.com>2005-02-17 09:08:18 +0000
committerMarcoen Hirschberg <marcoen@gmail.com>2005-02-17 09:08:18 +0000
commit99d2599b79649fd5a7df13b4e43383c428cc5657 (patch)
tree5512330f8ad66d5bae14a0ed990601e3bf29f520 /apps/codecs/Tremor/window.c
parente3e116d3c732c99d95fe11f11726ed8a5b587fc4 (diff)
downloadrockbox-99d2599b79649fd5a7df13b4e43383c428cc5657.zip
rockbox-99d2599b79649fd5a7df13b4e43383c428cc5657.tar.gz
rockbox-99d2599b79649fd5a7df13b4e43383c428cc5657.tar.bz2
rockbox-99d2599b79649fd5a7df13b4e43383c428cc5657.tar.xz
Initial commit of the the Ogg Vorbis 'Tremor' integer playback codec
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@5996 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/codecs/Tremor/window.c')
-rw-r--r--apps/codecs/Tremor/window.c84
1 files changed, 84 insertions, 0 deletions
diff --git a/apps/codecs/Tremor/window.c b/apps/codecs/Tremor/window.c
new file mode 100644
index 0000000..4d6e79e
--- /dev/null
+++ b/apps/codecs/Tremor/window.c
@@ -0,0 +1,84 @@
+/********************************************************************
+ * *
+ * 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;
+}