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 | 14.0k | const void *_vorbis_window(int type, int left){ |
25 | | |
26 | 14.0k | switch(type){ |
27 | 14.0k | case 0: |
28 | | |
29 | 14.0k | switch(left){ |
30 | 2.12k | case 32: |
31 | 2.12k | return vwin64; |
32 | 2.71k | case 64: |
33 | 2.71k | return vwin128; |
34 | 1.48k | case 128: |
35 | 1.48k | return vwin256; |
36 | 915 | case 256: |
37 | 915 | return vwin512; |
38 | 2.09k | case 512: |
39 | 2.09k | return vwin1024; |
40 | 1.68k | case 1024: |
41 | 1.68k | return vwin2048; |
42 | 1.24k | case 2048: |
43 | 1.24k | return vwin4096; |
44 | 1.81k | case 4096: |
45 | 1.81k | return vwin8192; |
46 | 0 | default: |
47 | 0 | return(0); |
48 | 14.0k | } |
49 | 0 | break; |
50 | 0 | default: |
51 | 0 | return(0); |
52 | 14.0k | } |
53 | 14.0k | } |
54 | | |
55 | | void _vorbis_apply_window(ogg_int32_t *d,const void *window_p[2], |
56 | | long *blocksizes, |
57 | 92.0k | int lW,int W,int nW){ |
58 | | |
59 | 92.0k | LOOKUP_T *window[2]={window_p[0],window_p[1]}; |
60 | 92.0k | long n=blocksizes[W]; |
61 | 92.0k | long ln=blocksizes[lW]; |
62 | 92.0k | long rn=blocksizes[nW]; |
63 | | |
64 | 92.0k | long leftbegin=n/4-ln/4; |
65 | 92.0k | long leftend=leftbegin+ln/2; |
66 | | |
67 | 92.0k | long rightbegin=n/2+n/4-rn/4; |
68 | 92.0k | long rightend=rightbegin+rn/2; |
69 | | |
70 | 92.0k | int i,p; |
71 | | |
72 | 3.81M | for(i=0;i<leftbegin;i++) |
73 | 3.72M | d[i]=0; |
74 | | |
75 | 56.5M | for(p=0;i<leftend;i++,p++) |
76 | 56.4M | d[i]=MULT31(d[i],window[lW][p]); |
77 | | |
78 | 50.4M | for(i=rightbegin,p=rn/2-1;i<rightend;i++,p--) |
79 | 50.3M | d[i]=MULT31(d[i],window[nW][p]); |
80 | | |
81 | 6.84M | for(;i<n;i++) |
82 | 6.75M | d[i]=0; |
83 | 92.0k | } |