summaryrefslogtreecommitdiff
path: root/core/multimedia/opieplayer/vorbis/tremor/window.c
Unidiff
Diffstat (limited to 'core/multimedia/opieplayer/vorbis/tremor/window.c') (more/less context) (show whitespace changes)
-rw-r--r--core/multimedia/opieplayer/vorbis/tremor/window.c84
1 files changed, 84 insertions, 0 deletions
diff --git a/core/multimedia/opieplayer/vorbis/tremor/window.c b/core/multimedia/opieplayer/vorbis/tremor/window.c
new file mode 100644
index 0000000..4d6e79e
--- a/dev/null
+++ b/core/multimedia/opieplayer/vorbis/tremor/window.c
@@ -0,0 +1,84 @@
1/********************************************************************
2 * *
3 * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE. *
4 * *
5 * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS *
6 * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
7 * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
8 * *
9 * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002 *
10 * BY THE Xiph.Org FOUNDATION http://www.xiph.org/ *
11 * *
12 ********************************************************************
13
14 function: window functions
15
16 ********************************************************************/
17
18#include <stdlib.h>
19#include <math.h>
20#include "os.h"
21#include "misc.h"
22#include "window.h"
23#include "window_lookup.h"
24
25const void *_vorbis_window(int type, int left){
26
27 switch(type){
28 case 0:
29
30 switch(left){
31 case 32:
32 return vwin64;
33 case 64:
34 return vwin128;
35 case 128:
36 return vwin256;
37 case 256:
38 return vwin512;
39 case 512:
40 return vwin1024;
41 case 1024:
42 return vwin2048;
43 case 2048:
44 return vwin4096;
45 case 4096:
46 return vwin8192;
47 default:
48 return(0);
49 }
50 break;
51 default:
52 return(0);
53 }
54}
55
56void _vorbis_apply_window(ogg_int32_t *d,const void *window_p[2],
57 long *blocksizes,
58 int lW,int W,int nW){
59
60 LOOKUP_T *window[2]={window_p[0],window_p[1]};
61 long n=blocksizes[W];
62 long ln=blocksizes[lW];
63 long rn=blocksizes[nW];
64
65 long leftbegin=n/4-ln/4;
66 long leftend=leftbegin+ln/2;
67
68 long rightbegin=n/2+n/4-rn/4;
69 long rightend=rightbegin+rn/2;
70
71 int i,p;
72
73 for(i=0;i<leftbegin;i++)
74 d[i]=0;
75
76 for(p=0;i<leftend;i++,p++)
77 d[i]=MULT31(d[i],window[lW][p]);
78
79 for(i=rightbegin,p=rn/2-1;i<rightend;i++,p--)
80 d[i]=MULT31(d[i],window[nW][p]);
81
82 for(;i<n;i++)
83 d[i]=0;
84}