Coverage Report

Created: 2025-07-18 06:54

/src/tremor/window.c
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
}