Line | Count | Source (jump to first uncovered line) |
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 | 16.2k | const void *_vorbis_window(int type, int left){ |
25 | | |
26 | 16.2k | switch(type){ |
27 | 16.2k | case 0: |
28 | | |
29 | 16.2k | switch(left){ |
30 | 2.59k | case 32: |
31 | 2.59k | return vwin64; |
32 | 2.72k | case 64: |
33 | 2.72k | return vwin128; |
34 | 1.89k | case 128: |
35 | 1.89k | return vwin256; |
36 | 1.25k | case 256: |
37 | 1.25k | return vwin512; |
38 | 2.94k | case 512: |
39 | 2.94k | return vwin1024; |
40 | 1.92k | case 1024: |
41 | 1.92k | return vwin2048; |
42 | 1.15k | case 2048: |
43 | 1.15k | return vwin4096; |
44 | 1.81k | case 4096: |
45 | 1.81k | return vwin8192; |
46 | 0 | default: |
47 | 0 | return(0); |
48 | 16.2k | } |
49 | 0 | break; |
50 | 0 | default: |
51 | 0 | return(0); |
52 | 16.2k | } |
53 | 16.2k | } |
54 | | |
55 | | void _vorbis_apply_window(ogg_int32_t *d,const void *window_p[2], |
56 | | long *blocksizes, |
57 | 78.5k | int lW,int W,int nW){ |
58 | | |
59 | 78.5k | LOOKUP_T *window[2]={window_p[0],window_p[1]}; |
60 | 78.5k | long n=blocksizes[W]; |
61 | 78.5k | long ln=blocksizes[lW]; |
62 | 78.5k | long rn=blocksizes[nW]; |
63 | | |
64 | 78.5k | long leftbegin=n/4-ln/4; |
65 | 78.5k | long leftend=leftbegin+ln/2; |
66 | | |
67 | 78.5k | long rightbegin=n/2+n/4-rn/4; |
68 | 78.5k | long rightend=rightbegin+rn/2; |
69 | | |
70 | 78.5k | int i,p; |
71 | | |
72 | 3.47M | for(i=0;i<leftbegin;i++) |
73 | 3.40M | d[i]=0; |
74 | | |
75 | 44.1M | for(p=0;i<leftend;i++,p++) |
76 | 44.1M | d[i]=MULT31(d[i],window[lW][p]); |
77 | | |
78 | 38.5M | for(i=rightbegin,p=rn/2-1;i<rightend;i++,p--) |
79 | 38.4M | d[i]=MULT31(d[i],window[nW][p]); |
80 | | |
81 | 6.31M | for(;i<n;i++) |
82 | 6.23M | d[i]=0; |
83 | 78.5k | } |