Coverage Report

Created: 2026-10-28 06:39

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/pjsip/third_party/ilbc/FrameClassify.c
Line
Count
Source
1
2
   /******************************************************************
3
4
       iLBC Speech Coder ANSI-C Source Code
5
6
       FrameClassify.c
7
8
       Copyright (C) The Internet Society (2004).
9
       All Rights Reserved.
10
11
   ******************************************************************/
12
13
   #include "iLBC_define.h"
14
15
   /*---------------------------------------------------------------*
16
    *  Classification of subframes to localize start state
17
    *--------------------------------------------------------------*/
18
19
   int FrameClassify(      /* index to the max-energy sub-frame */
20
       iLBC_Enc_Inst_t *iLBCenc_inst,
21
                           /* (i/o) the encoder state structure */
22
       float *residual     /* (i) lpc residual signal */
23
364
   ) {
24
364
       float max_ssqEn, fssqEn[NSUB_MAX], bssqEn[NSUB_MAX], *pp;
25
364
       int n, l, max_ssqEn_n;
26
364
       const float ssqEn_win[NSUB_MAX-1]={(float)0.8,(float)0.9,
27
364
           (float)1.0,(float)0.9,(float)0.8};
28
364
       const float sampEn_win[5]={(float)1.0/(float)6.0,
29
364
           (float)2.0/(float)6.0, (float)3.0/(float)6.0,
30
364
           (float)4.0/(float)6.0, (float)5.0/(float)6.0};
31
32
       /* init the front and back energies to zero */
33
34
364
       memset(fssqEn, 0, NSUB_MAX*sizeof(float));
35
364
       memset(bssqEn, 0, NSUB_MAX*sizeof(float));
36
37
       /* Calculate front of first seqence */
38
39
364
       n=0;
40
364
       pp=residual;
41
2.18k
       for (l=0; l<5; l++) {
42
1.82k
           fssqEn[n] += sampEn_win[l] * (*pp) * (*pp);
43
1.82k
           pp++;
44
1.82k
       }
45
13.1k
       for (l=5; l<SUBL; l++) {
46
47
48
49
50
51
12.7k
           fssqEn[n] += (*pp) * (*pp);
52
12.7k
           pp++;
53
12.7k
       }
54
55
       /* Calculate front and back of all middle sequences */
56
57
1.82k
       for (n=1; n<iLBCenc_inst->nsub-1; n++) {
58
1.45k
           pp=residual+n*SUBL;
59
8.73k
           for (l=0; l<5; l++) {
60
7.28k
               fssqEn[n] += sampEn_win[l] * (*pp) * (*pp);
61
7.28k
               bssqEn[n] += (*pp) * (*pp);
62
7.28k
               pp++;
63
7.28k
           }
64
45.1k
           for (l=5; l<SUBL-5; l++) {
65
43.6k
               fssqEn[n] += (*pp) * (*pp);
66
43.6k
               bssqEn[n] += (*pp) * (*pp);
67
43.6k
               pp++;
68
43.6k
           }
69
8.73k
           for (l=SUBL-5; l<SUBL; l++) {
70
7.28k
               fssqEn[n] += (*pp) * (*pp);
71
7.28k
               bssqEn[n] += sampEn_win[SUBL-l-1] * (*pp) * (*pp);
72
7.28k
               pp++;
73
7.28k
           }
74
1.45k
       }
75
76
       /* Calculate back of last seqence */
77
78
364
       n=iLBCenc_inst->nsub-1;
79
364
       pp=residual+n*SUBL;
80
13.1k
       for (l=0; l<SUBL-5; l++) {
81
12.7k
           bssqEn[n] += (*pp) * (*pp);
82
12.7k
           pp++;
83
12.7k
       }
84
2.18k
       for (l=SUBL-5; l<SUBL; l++) {
85
1.82k
           bssqEn[n] += sampEn_win[SUBL-l-1] * (*pp) * (*pp);
86
1.82k
           pp++;
87
1.82k
       }
88
89
       /* find the index to the weighted 80 sample with
90
          most energy */
91
92
364
       if (iLBCenc_inst->mode==20) l=1;
93
364
       else                        l=0;
94
95
364
       max_ssqEn=(fssqEn[0]+bssqEn[1])*ssqEn_win[l];
96
364
       max_ssqEn_n=1;
97
1.82k
       for (n=2; n<iLBCenc_inst->nsub; n++) {
98
99
100
101
102
103
104
1.45k
           l++;
105
1.45k
           if ((fssqEn[n-1]+bssqEn[n])*ssqEn_win[l] > max_ssqEn) {
106
448
               max_ssqEn=(fssqEn[n-1]+bssqEn[n]) *
107
448
                               ssqEn_win[l];
108
448
               max_ssqEn_n=n;
109
448
           }
110
1.45k
       }
111
112
364
       return max_ssqEn_n;
113
364
   }
114