Coverage Report

Created: 2026-09-14 06:20

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
449
   ) {
24
449
       float max_ssqEn, fssqEn[NSUB_MAX], bssqEn[NSUB_MAX], *pp;
25
449
       int n, l, max_ssqEn_n;
26
449
       const float ssqEn_win[NSUB_MAX-1]={(float)0.8,(float)0.9,
27
449
           (float)1.0,(float)0.9,(float)0.8};
28
449
       const float sampEn_win[5]={(float)1.0/(float)6.0,
29
449
           (float)2.0/(float)6.0, (float)3.0/(float)6.0,
30
449
           (float)4.0/(float)6.0, (float)5.0/(float)6.0};
31
32
       /* init the front and back energies to zero */
33
34
449
       memset(fssqEn, 0, NSUB_MAX*sizeof(float));
35
449
       memset(bssqEn, 0, NSUB_MAX*sizeof(float));
36
37
       /* Calculate front of first seqence */
38
39
449
       n=0;
40
449
       pp=residual;
41
2.69k
       for (l=0; l<5; l++) {
42
2.24k
           fssqEn[n] += sampEn_win[l] * (*pp) * (*pp);
43
2.24k
           pp++;
44
2.24k
       }
45
16.1k
       for (l=5; l<SUBL; l++) {
46
47
48
49
50
51
15.7k
           fssqEn[n] += (*pp) * (*pp);
52
15.7k
           pp++;
53
15.7k
       }
54
55
       /* Calculate front and back of all middle sequences */
56
57
2.24k
       for (n=1; n<iLBCenc_inst->nsub-1; n++) {
58
1.79k
           pp=residual+n*SUBL;
59
10.7k
           for (l=0; l<5; l++) {
60
8.98k
               fssqEn[n] += sampEn_win[l] * (*pp) * (*pp);
61
8.98k
               bssqEn[n] += (*pp) * (*pp);
62
8.98k
               pp++;
63
8.98k
           }
64
55.6k
           for (l=5; l<SUBL-5; l++) {
65
53.8k
               fssqEn[n] += (*pp) * (*pp);
66
53.8k
               bssqEn[n] += (*pp) * (*pp);
67
53.8k
               pp++;
68
53.8k
           }
69
10.7k
           for (l=SUBL-5; l<SUBL; l++) {
70
8.98k
               fssqEn[n] += (*pp) * (*pp);
71
8.98k
               bssqEn[n] += sampEn_win[SUBL-l-1] * (*pp) * (*pp);
72
8.98k
               pp++;
73
8.98k
           }
74
1.79k
       }
75
76
       /* Calculate back of last seqence */
77
78
449
       n=iLBCenc_inst->nsub-1;
79
449
       pp=residual+n*SUBL;
80
16.1k
       for (l=0; l<SUBL-5; l++) {
81
15.7k
           bssqEn[n] += (*pp) * (*pp);
82
15.7k
           pp++;
83
15.7k
       }
84
2.69k
       for (l=SUBL-5; l<SUBL; l++) {
85
2.24k
           bssqEn[n] += sampEn_win[SUBL-l-1] * (*pp) * (*pp);
86
2.24k
           pp++;
87
2.24k
       }
88
89
       /* find the index to the weighted 80 sample with
90
          most energy */
91
92
449
       if (iLBCenc_inst->mode==20) l=1;
93
449
       else                        l=0;
94
95
449
       max_ssqEn=(fssqEn[0]+bssqEn[1])*ssqEn_win[l];
96
449
       max_ssqEn_n=1;
97
2.24k
       for (n=2; n<iLBCenc_inst->nsub; n++) {
98
99
100
101
102
103
104
1.79k
           l++;
105
1.79k
           if ((fssqEn[n-1]+bssqEn[n])*ssqEn_win[l] > max_ssqEn) {
106
588
               max_ssqEn=(fssqEn[n-1]+bssqEn[n]) *
107
588
                               ssqEn_win[l];
108
588
               max_ssqEn_n=n;
109
588
           }
110
1.79k
       }
111
112
449
       return max_ssqEn_n;
113
449
   }
114