Coverage Report

Created: 2025-08-28 06:40

/src/libldac/src/mdct_ldac.c
Line
Count
Source
1
/*
2
 * Copyright (C) 2003 - 2016 Sony Corporation
3
 *
4
 * Licensed under the Apache License, Version 2.0 (the "License");
5
 * you may not use this file except in compliance with the License.
6
 * You may obtain a copy of the License at
7
 *
8
 *      http://www.apache.org/licenses/LICENSE-2.0
9
 *
10
 * Unless required by applicable law or agreed to in writing, software
11
 * distributed under the License is distributed on an "AS IS" BASIS,
12
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
 * See the License for the specific language governing permissions and
14
 * limitations under the License.
15
 */
16
17
#include "ldac.h"
18
19
/***************************************************************************************************
20
    Subfunction: Process MDCT Core
21
***************************************************************************************************/
22
static void proc_mdct_core_ldac(
23
SCALAR *p_x,
24
SCALAR *p_y,
25
int nlnn)
26
42
{
27
42
    int i, j, k;
28
42
    int loop1, loop2;
29
42
    int coef, index0, index1, offset;
30
42
    int nsmpl = npow2_ldac(nlnn);
31
42
    const int *p_p;
32
42
    const SCALAR *p_w, *p_c, *p_s;
33
42
    SCALAR a_work[LDAC_MAXLSU];
34
42
    SCALAR *p_work = a_work;
35
42
    SCALAR a, b, c, d, tmp;
36
42
    SCALAR cc, cs;
37
38
42
    i = nlnn - LDAC_1FSLNN;
39
42
    p_w = gaa_fwin_ldac[i];
40
42
    p_c = gaa_wcos_ldac[i];
41
42
    p_s = gaa_wsin_ldac[i];
42
42
    p_p = gaa_perm_ldac[i];
43
44
    /* Windowing */
45
2.73k
    for (i = 0; i < nsmpl>>1; i++) {
46
2.68k
        p_work[p_p[i]] = -p_x[3*nsmpl/2-1-i] * p_w[nsmpl/2+i] - p_x[3*nsmpl/2+i] * p_w[nsmpl/2-1-i];
47
48
2.68k
        p_work[p_p[nsmpl/2+i]] = p_x[i] * p_w[i] - p_x[nsmpl-1-i] * p_w[nsmpl-1-i];
49
2.68k
    }
50
51
    /* Butterfly */
52
42
    coef = 0;
53
294
    for (i = 0; i < nlnn-1; ++i) {
54
252
        loop1 = 1 << (nlnn-2-i);
55
252
        loop2 = 1 << i;
56
252
        index0 = 0;
57
252
        index1 = 1 << (i+1);
58
252
        offset = 1 << (i+2);
59
60
2.89k
        for (k = 0; k < loop2; ++k) {
61
2.64k
            cc = p_c[coef];
62
2.64k
            cs = p_s[coef++];
63
10.7k
            for (j = 0; j < loop1; ++j) {
64
8.06k
                a = p_work[index0+0];
65
8.06k
                b = p_work[index0+1];
66
8.06k
                c = p_work[index1+0] * cc + p_work[index1+1] * cs;
67
8.06k
                d = p_work[index1+0] * cs - p_work[index1+1] * cc;
68
69
8.06k
                p_work[index0+0] = a + c;
70
8.06k
                p_work[index0+1] = b + d;
71
8.06k
                p_work[index1+0] = a - c;
72
8.06k
                p_work[index1+1] = b - d;
73
8.06k
                index0 += offset;
74
8.06k
                index1 += offset;
75
8.06k
            }
76
2.64k
            index0 += 2 - nsmpl;
77
2.64k
            index1 += 2 - nsmpl;
78
2.64k
        }
79
252
    }
80
81
42
    tmp = _scalar(1.0) / (SCALAR)(nsmpl>>1);
82
2.73k
    for (i = 0; i < nsmpl>>1; i++) {
83
2.68k
        cc = p_c[coef];
84
2.68k
        cs = p_s[coef++];
85
86
2.68k
        index0 = i << 1;
87
2.68k
        a = p_work[index0] * cc + p_work[index0+1] * cs;
88
2.68k
        b = p_work[index0] * cs - p_work[index0+1] * cc;
89
90
2.68k
        p_y[index0] = a * tmp;
91
2.68k
        p_y[nsmpl-index0-1] = b * tmp;
92
2.68k
    }
93
94
42
    return;
95
42
}
96
97
/***************************************************************************************************
98
    Process MDCT
99
***************************************************************************************************/
100
DECLFUNC void proc_mdct_ldac(
101
SFINFO *p_sfinfo,
102
int nlnn)
103
21
{
104
21
    AC *p_ac;
105
21
    int ich;
106
21
    int nchs = p_sfinfo->cfg.ch;
107
108
63
    for (ich = 0; ich < nchs; ich++) {
109
42
        p_ac = p_sfinfo->ap_ac[ich];
110
42
        proc_mdct_core_ldac(p_ac->p_acsub->a_time, p_ac->p_acsub->a_spec, nlnn);
111
42
    }
112
113
21
    return;
114
21
}
115