Line | Count | Source |
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 "misc.h" |
21 | | #include "window.h" |
22 | | #include "window_lookup.h" |
23 | | |
24 | 22.8k | const void *_vorbis_window(int type, int left){ |
25 | | |
26 | 22.8k | switch(type){ |
27 | 22.8k | case 0: |
28 | | |
29 | 22.8k | switch(left){ |
30 | 2.41k | case 32: |
31 | 2.41k | return vwin64; |
32 | 4.80k | case 64: |
33 | 4.80k | return vwin128; |
34 | 2.42k | case 128: |
35 | 2.42k | return vwin256; |
36 | 1.71k | case 256: |
37 | 1.71k | return vwin512; |
38 | 2.83k | case 512: |
39 | 2.83k | return vwin1024; |
40 | 3.34k | case 1024: |
41 | 3.34k | return vwin2048; |
42 | 1.68k | case 2048: |
43 | 1.68k | return vwin4096; |
44 | 3.13k | case 4096: |
45 | 3.13k | return vwin8192; |
46 | 480 | default: |
47 | 480 | return(0); |
48 | 22.8k | } |
49 | 0 | break; |
50 | 0 | default: |
51 | 0 | return(0); |
52 | 22.8k | } |
53 | 22.8k | } |
54 | | |
55 | | void _vorbis_apply_window(ogg_int32_t *d,const void *window_p[2], |
56 | | long *blocksizes, |
57 | 104k | int lW,int W,int nW){ |
58 | | |
59 | 104k | LOOKUP_T *window[2]={window_p[0],window_p[1]}; |
60 | 104k | long n=blocksizes[W]; |
61 | 104k | long ln=blocksizes[lW]; |
62 | 104k | long rn=blocksizes[nW]; |
63 | | |
64 | 104k | long leftbegin=n/4-ln/4; |
65 | 104k | long leftend=leftbegin+ln/2; |
66 | | |
67 | 104k | long rightbegin=n/2+n/4-rn/4; |
68 | 104k | long rightend=rightbegin+rn/2; |
69 | | |
70 | 104k | int i,p; |
71 | | |
72 | 5.76M | for(i=0;i<leftbegin;i++) |
73 | 5.65M | d[i]=0; |
74 | | |
75 | 67.7M | for(p=0;i<leftend;i++,p++) |
76 | 67.6M | d[i]=MULT31(d[i],window[lW][p]); |
77 | | |
78 | 60.2M | for(i=rightbegin,p=rn/2-1;i<rightend;i++,p--) |
79 | 60.1M | d[i]=MULT31(d[i],window[nW][p]); |
80 | | |
81 | 9.51M | for(;i<n;i++) |
82 | 9.40M | d[i]=0; |
83 | 104k | } |