Coverage Report

Created: 2026-07-25 07:52

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/ffmpeg/libavcodec/simple_idct_template.c
Line
Count
Source
1
/*
2
 * Simple IDCT
3
 *
4
 * Copyright (c) 2001 Michael Niedermayer <michaelni@gmx.at>
5
 *
6
 * This file is part of FFmpeg.
7
 *
8
 * FFmpeg is free software; you can redistribute it and/or
9
 * modify it under the terms of the GNU Lesser General Public
10
 * License as published by the Free Software Foundation; either
11
 * version 2.1 of the License, or (at your option) any later version.
12
 *
13
 * FFmpeg is distributed in the hope that it will be useful,
14
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16
 * Lesser General Public License for more details.
17
 *
18
 * You should have received a copy of the GNU Lesser General Public
19
 * License along with FFmpeg; if not, write to the Free Software
20
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21
 */
22
23
/**
24
 * @file
25
 * simpleidct in C.
26
 */
27
28
/* Based upon some commented-out C code from mpeg2dec (idct_mmx.c
29
 * written by Aaron Holtzman <aholtzma@ess.engr.uvic.ca>). */
30
31
#include "bit_depth_template.c"
32
33
#undef W1
34
#undef W2
35
#undef W3
36
#undef W4
37
#undef W5
38
#undef W6
39
#undef W7
40
#undef ROW_SHIFT
41
#undef COL_SHIFT
42
#undef DC_SHIFT
43
#undef MUL
44
#undef MAC
45
46
#if BIT_DEPTH == 8
47
48
#define W1  22725  //cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5
49
3.47G
#define W2  21407  //cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5
50
#define W3  19266  //cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5
51
3.73G
#define W4  16383  //cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5
52
#define W5  12873  //cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5
53
3.47G
#define W6  8867   //cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5
54
#define W7  4520   //cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5
55
56
901M
#define ROW_SHIFT 11
57
2.62G
#define COL_SHIFT 20
58
2.79G
#define DC_SHIFT 3
59
60
6.44G
#define MUL(a, b)    MUL16(a, b)
61
7.38G
#define MAC(a, b, c) MAC16(a, b, c)
62
63
#elif BIT_DEPTH == 10 || BIT_DEPTH == 12
64
65
# if BIT_DEPTH == 10
66
#define W1 22725 // 90901
67
213M
#define W2 21407 //  85627
68
#define W3 19265 //  77062
69
215M
#define W4 16384 //  65535
70
#define W5 12873 //  51491
71
213M
#define W6  8867 //  35468
72
#define W7  4520 //  18081
73
74
#   ifdef EXTRA_SHIFT
75
1.28M
#define ROW_SHIFT 13
76
19.6M
#define COL_SHIFT 18
77
6.11M
#define DC_SHIFT  1
78
#   elif IN_IDCT_DEPTH == 32
79
3.71M
#define ROW_SHIFT 13
80
412k
#define COL_SHIFT 21
81
#define DC_SHIFT  2
82
#   else
83
6.33M
#define ROW_SHIFT 12
84
101M
#define COL_SHIFT 19
85
201M
#define DC_SHIFT  2
86
#   endif
87
88
# else
89
#define W1 45451
90
131M
#define W2 42813
91
#define W3 38531
92
130M
#define W4 32767
93
#define W5 25746
94
131M
#define W6 17734
95
#define W7 9041
96
97
20.2M
#define ROW_SHIFT 16
98
80.4M
#define COL_SHIFT 17
99
182M
#define DC_SHIFT -1
100
# endif
101
102
682M
#define MUL(a, b)    ((int)((SUINT)(a) * (b)))
103
700M
#define MAC(a, b, c) ((a) += (SUINT)(b) * (c))
104
105
#else
106
107
#error "Unsupported bitdepth"
108
109
#endif
110
111
#ifdef EXTRA_SHIFT
112
static inline void FUNC(idctRowCondDC_extrashift)(int16_t *row, int extra_shift)
113
#else
114
static inline void FUNC6(idctRowCondDC)(idctin *row, int extra_shift)
115
#endif
116
1.66G
{
117
1.66G
    SUINT a0, a1, a2, a3, b0, b1, b2, b3;
118
119
// TODO: Add DC-only support for int32_t input
120
#if IN_IDCT_DEPTH == 16
121
#if HAVE_FAST_64BIT
122
#define ROW0_MASK (0xffffULL << 48 * HAVE_BIGENDIAN)
123
    if (((AV_RN64A(row) & ~ROW0_MASK) | AV_RN64A(row+4)) == 0) {
124
        uint64_t temp;
125
        if (DC_SHIFT - extra_shift >= 0) {
126
            temp = (row[0] * (1 << (DC_SHIFT - extra_shift))) & 0xffff;
127
        } else {
128
            temp = ((row[0] + (1<<(extra_shift - DC_SHIFT-1))) >> (extra_shift - DC_SHIFT)) & 0xffff;
129
        }
130
        temp += temp * (1 << 16);
131
        temp += temp * ((uint64_t) 1 << 32);
132
        AV_WN64A(row, temp);
133
        AV_WN64A(row + 4, temp);
134
        return;
135
    }
136
#else
137
1.66G
    if (!(AV_RN32A(row+2) |
138
1.66G
          AV_RN32A(row+4) |
139
1.66G
          AV_RN32A(row+6) |
140
1.66G
          row[1])) {
141
1.56G
        uint32_t temp;
142
1.56G
        if (DC_SHIFT - extra_shift >= 0) {
143
1.49G
            temp = (row[0] * (1 << (DC_SHIFT - extra_shift))) & 0xffff;
144
1.49G
        } else {
145
62.8M
            temp = ((row[0] + (1<<(extra_shift - DC_SHIFT-1))) >> (extra_shift - DC_SHIFT)) & 0xffff;
146
62.8M
        }
147
1.56G
        temp += temp * (1 << 16);
148
1.56G
        AV_WN32A(row, temp);
149
1.56G
        AV_WN32A(row+2, temp);
150
1.56G
        AV_WN32A(row+4, temp);
151
1.56G
        AV_WN32A(row+6, temp);
152
1.56G
        return;
153
1.56G
    }
154
101M
#endif
155
101M
#endif
156
157
103M
    a0 = ((SUINT)W4 * row[0]) + (1 << (ROW_SHIFT + extra_shift - 1));
158
101M
    a1 = a0;
159
101M
    a2 = a0;
160
101M
    a3 = a0;
161
162
103M
    a0 += (SUINT)W2 * row[2];
163
103M
    a1 += (SUINT)W6 * row[2];
164
103M
    a2 -= (SUINT)W6 * row[2];
165
103M
    a3 -= (SUINT)W2 * row[2];
166
167
103M
    b0 = MUL(W1, row[1]);
168
103M
    MAC(b0, W3, row[3]);
169
103M
    b1 = MUL(W3, row[1]);
170
103M
    MAC(b1, -W7, row[3]);
171
103M
    b2 = MUL(W5, row[1]);
172
103M
    MAC(b2, -W1, row[3]);
173
103M
    b3 = MUL(W7, row[1]);
174
103M
    MAC(b3, -W5, row[3]);
175
176
#if IN_IDCT_DEPTH == 32
177
2.32M
    if (AV_RN64A(row + 4) | AV_RN64A(row + 6)) {
178
#else
179
101M
    if (AV_RN64A(row + 4)) {
180
50.3M
#endif
181
50.4M
        a0 += (SUINT)  W4*row[4] + (SUINT)W6*row[6];
182
50.4M
        a1 += (SUINT)- W4*row[4] - (SUINT)W2*row[6];
183
50.4M
        a2 += (SUINT)- W4*row[4] + (SUINT)W2*row[6];
184
50.4M
        a3 += (SUINT)  W4*row[4] - (SUINT)W6*row[6];
185
186
50.4M
        MAC(b0,  W5, row[5]);
187
50.4M
        MAC(b0,  W7, row[7]);
188
189
50.4M
        MAC(b1, -W1, row[5]);
190
50.4M
        MAC(b1, -W5, row[7]);
191
192
50.4M
        MAC(b2,  W7, row[5]);
193
50.4M
        MAC(b2,  W3, row[7]);
194
195
50.4M
        MAC(b3,  W3, row[5]);
196
50.4M
        MAC(b3, -W1, row[7]);
197
50.3M
    }
198
199
103M
    row[0] = (int)(a0 + b0) >> (ROW_SHIFT + extra_shift);
200
103M
    row[7] = (int)(a0 - b0) >> (ROW_SHIFT + extra_shift);
201
103M
    row[1] = (int)(a1 + b1) >> (ROW_SHIFT + extra_shift);
202
103M
    row[6] = (int)(a1 - b1) >> (ROW_SHIFT + extra_shift);
203
103M
    row[2] = (int)(a2 + b2) >> (ROW_SHIFT + extra_shift);
204
103M
    row[5] = (int)(a2 - b2) >> (ROW_SHIFT + extra_shift);
205
103M
    row[3] = (int)(a3 + b3) >> (ROW_SHIFT + extra_shift);
206
103M
    row[4] = (int)(a3 - b3) >> (ROW_SHIFT + extra_shift);
207
101M
}
simple_idct.c:idctRowCondDC_int16_8bit
Line
Count
Source
116
1.49G
{
117
1.49G
    SUINT a0, a1, a2, a3, b0, b1, b2, b3;
118
119
// TODO: Add DC-only support for int32_t input
120
1.49G
#if IN_IDCT_DEPTH == 16
121
#if HAVE_FAST_64BIT
122
#define ROW0_MASK (0xffffULL << 48 * HAVE_BIGENDIAN)
123
    if (((AV_RN64A(row) & ~ROW0_MASK) | AV_RN64A(row+4)) == 0) {
124
        uint64_t temp;
125
        if (DC_SHIFT - extra_shift >= 0) {
126
            temp = (row[0] * (1 << (DC_SHIFT - extra_shift))) & 0xffff;
127
        } else {
128
            temp = ((row[0] + (1<<(extra_shift - DC_SHIFT-1))) >> (extra_shift - DC_SHIFT)) & 0xffff;
129
        }
130
        temp += temp * (1 << 16);
131
        temp += temp * ((uint64_t) 1 << 32);
132
        AV_WN64A(row, temp);
133
        AV_WN64A(row + 4, temp);
134
        return;
135
    }
136
#else
137
1.49G
    if (!(AV_RN32A(row+2) |
138
1.49G
          AV_RN32A(row+4) |
139
1.49G
          AV_RN32A(row+6) |
140
1.49G
          row[1])) {
141
1.39G
        uint32_t temp;
142
1.39G
        if (DC_SHIFT - extra_shift >= 0) {
143
1.39G
            temp = (row[0] * (1 << (DC_SHIFT - extra_shift))) & 0xffff;
144
1.39G
        } else {
145
0
            temp = ((row[0] + (1<<(extra_shift - DC_SHIFT-1))) >> (extra_shift - DC_SHIFT)) & 0xffff;
146
0
        }
147
1.39G
        temp += temp * (1 << 16);
148
1.39G
        AV_WN32A(row, temp);
149
1.39G
        AV_WN32A(row+2, temp);
150
1.39G
        AV_WN32A(row+4, temp);
151
1.39G
        AV_WN32A(row+6, temp);
152
1.39G
        return;
153
1.39G
    }
154
100M
#endif
155
100M
#endif
156
157
100M
    a0 = ((SUINT)W4 * row[0]) + (1 << (ROW_SHIFT + extra_shift - 1));
158
100M
    a1 = a0;
159
100M
    a2 = a0;
160
100M
    a3 = a0;
161
162
100M
    a0 += (SUINT)W2 * row[2];
163
100M
    a1 += (SUINT)W6 * row[2];
164
100M
    a2 -= (SUINT)W6 * row[2];
165
100M
    a3 -= (SUINT)W2 * row[2];
166
167
100M
    b0 = MUL(W1, row[1]);
168
100M
    MAC(b0, W3, row[3]);
169
100M
    b1 = MUL(W3, row[1]);
170
100M
    MAC(b1, -W7, row[3]);
171
100M
    b2 = MUL(W5, row[1]);
172
100M
    MAC(b2, -W1, row[3]);
173
100M
    b3 = MUL(W7, row[1]);
174
100M
    MAC(b3, -W5, row[3]);
175
176
#if IN_IDCT_DEPTH == 32
177
    if (AV_RN64A(row + 4) | AV_RN64A(row + 6)) {
178
#else
179
100M
    if (AV_RN64A(row + 4)) {
180
49.5M
#endif
181
49.5M
        a0 += (SUINT)  W4*row[4] + (SUINT)W6*row[6];
182
49.5M
        a1 += (SUINT)- W4*row[4] - (SUINT)W2*row[6];
183
49.5M
        a2 += (SUINT)- W4*row[4] + (SUINT)W2*row[6];
184
49.5M
        a3 += (SUINT)  W4*row[4] - (SUINT)W6*row[6];
185
186
49.5M
        MAC(b0,  W5, row[5]);
187
49.5M
        MAC(b0,  W7, row[7]);
188
189
49.5M
        MAC(b1, -W1, row[5]);
190
49.5M
        MAC(b1, -W5, row[7]);
191
192
49.5M
        MAC(b2,  W7, row[5]);
193
49.5M
        MAC(b2,  W3, row[7]);
194
195
49.5M
        MAC(b3,  W3, row[5]);
196
49.5M
        MAC(b3, -W1, row[7]);
197
49.5M
    }
198
199
100M
    row[0] = (int)(a0 + b0) >> (ROW_SHIFT + extra_shift);
200
100M
    row[7] = (int)(a0 - b0) >> (ROW_SHIFT + extra_shift);
201
100M
    row[1] = (int)(a1 + b1) >> (ROW_SHIFT + extra_shift);
202
100M
    row[6] = (int)(a1 - b1) >> (ROW_SHIFT + extra_shift);
203
100M
    row[2] = (int)(a2 + b2) >> (ROW_SHIFT + extra_shift);
204
100M
    row[5] = (int)(a2 - b2) >> (ROW_SHIFT + extra_shift);
205
100M
    row[3] = (int)(a3 + b3) >> (ROW_SHIFT + extra_shift);
206
100M
    row[4] = (int)(a3 - b3) >> (ROW_SHIFT + extra_shift);
207
100M
}
simple_idct.c:idctRowCondDC_int16_10bit
Line
Count
Source
116
101M
{
117
101M
    SUINT a0, a1, a2, a3, b0, b1, b2, b3;
118
119
// TODO: Add DC-only support for int32_t input
120
101M
#if IN_IDCT_DEPTH == 16
121
#if HAVE_FAST_64BIT
122
#define ROW0_MASK (0xffffULL << 48 * HAVE_BIGENDIAN)
123
    if (((AV_RN64A(row) & ~ROW0_MASK) | AV_RN64A(row+4)) == 0) {
124
        uint64_t temp;
125
        if (DC_SHIFT - extra_shift >= 0) {
126
            temp = (row[0] * (1 << (DC_SHIFT - extra_shift))) & 0xffff;
127
        } else {
128
            temp = ((row[0] + (1<<(extra_shift - DC_SHIFT-1))) >> (extra_shift - DC_SHIFT)) & 0xffff;
129
        }
130
        temp += temp * (1 << 16);
131
        temp += temp * ((uint64_t) 1 << 32);
132
        AV_WN64A(row, temp);
133
        AV_WN64A(row + 4, temp);
134
        return;
135
    }
136
#else
137
101M
    if (!(AV_RN32A(row+2) |
138
101M
          AV_RN32A(row+4) |
139
101M
          AV_RN32A(row+6) |
140
101M
          row[1])) {
141
100M
        uint32_t temp;
142
100M
        if (DC_SHIFT - extra_shift >= 0) {
143
100M
            temp = (row[0] * (1 << (DC_SHIFT - extra_shift))) & 0xffff;
144
100M
        } else {
145
0
            temp = ((row[0] + (1<<(extra_shift - DC_SHIFT-1))) >> (extra_shift - DC_SHIFT)) & 0xffff;
146
0
        }
147
100M
        temp += temp * (1 << 16);
148
100M
        AV_WN32A(row, temp);
149
100M
        AV_WN32A(row+2, temp);
150
100M
        AV_WN32A(row+4, temp);
151
100M
        AV_WN32A(row+6, temp);
152
100M
        return;
153
100M
    }
154
703k
#endif
155
703k
#endif
156
157
703k
    a0 = ((SUINT)W4 * row[0]) + (1 << (ROW_SHIFT + extra_shift - 1));
158
703k
    a1 = a0;
159
703k
    a2 = a0;
160
703k
    a3 = a0;
161
162
703k
    a0 += (SUINT)W2 * row[2];
163
703k
    a1 += (SUINT)W6 * row[2];
164
703k
    a2 -= (SUINT)W6 * row[2];
165
703k
    a3 -= (SUINT)W2 * row[2];
166
167
703k
    b0 = MUL(W1, row[1]);
168
703k
    MAC(b0, W3, row[3]);
169
703k
    b1 = MUL(W3, row[1]);
170
703k
    MAC(b1, -W7, row[3]);
171
703k
    b2 = MUL(W5, row[1]);
172
703k
    MAC(b2, -W1, row[3]);
173
703k
    b3 = MUL(W7, row[1]);
174
703k
    MAC(b3, -W5, row[3]);
175
176
#if IN_IDCT_DEPTH == 32
177
    if (AV_RN64A(row + 4) | AV_RN64A(row + 6)) {
178
#else
179
703k
    if (AV_RN64A(row + 4)) {
180
579k
#endif
181
579k
        a0 += (SUINT)  W4*row[4] + (SUINT)W6*row[6];
182
579k
        a1 += (SUINT)- W4*row[4] - (SUINT)W2*row[6];
183
579k
        a2 += (SUINT)- W4*row[4] + (SUINT)W2*row[6];
184
579k
        a3 += (SUINT)  W4*row[4] - (SUINT)W6*row[6];
185
186
579k
        MAC(b0,  W5, row[5]);
187
579k
        MAC(b0,  W7, row[7]);
188
189
579k
        MAC(b1, -W1, row[5]);
190
579k
        MAC(b1, -W5, row[7]);
191
192
579k
        MAC(b2,  W7, row[5]);
193
579k
        MAC(b2,  W3, row[7]);
194
195
579k
        MAC(b3,  W3, row[5]);
196
579k
        MAC(b3, -W1, row[7]);
197
579k
    }
198
199
703k
    row[0] = (int)(a0 + b0) >> (ROW_SHIFT + extra_shift);
200
703k
    row[7] = (int)(a0 - b0) >> (ROW_SHIFT + extra_shift);
201
703k
    row[1] = (int)(a1 + b1) >> (ROW_SHIFT + extra_shift);
202
703k
    row[6] = (int)(a1 - b1) >> (ROW_SHIFT + extra_shift);
203
703k
    row[2] = (int)(a2 + b2) >> (ROW_SHIFT + extra_shift);
204
703k
    row[5] = (int)(a2 - b2) >> (ROW_SHIFT + extra_shift);
205
703k
    row[3] = (int)(a3 + b3) >> (ROW_SHIFT + extra_shift);
206
703k
    row[4] = (int)(a3 - b3) >> (ROW_SHIFT + extra_shift);
207
703k
}
simple_idct.c:idctRowCondDC_int16_12bit
Line
Count
Source
116
60.8M
{
117
60.8M
    SUINT a0, a1, a2, a3, b0, b1, b2, b3;
118
119
// TODO: Add DC-only support for int32_t input
120
60.8M
#if IN_IDCT_DEPTH == 16
121
#if HAVE_FAST_64BIT
122
#define ROW0_MASK (0xffffULL << 48 * HAVE_BIGENDIAN)
123
    if (((AV_RN64A(row) & ~ROW0_MASK) | AV_RN64A(row+4)) == 0) {
124
        uint64_t temp;
125
        if (DC_SHIFT - extra_shift >= 0) {
126
            temp = (row[0] * (1 << (DC_SHIFT - extra_shift))) & 0xffff;
127
        } else {
128
            temp = ((row[0] + (1<<(extra_shift - DC_SHIFT-1))) >> (extra_shift - DC_SHIFT)) & 0xffff;
129
        }
130
        temp += temp * (1 << 16);
131
        temp += temp * ((uint64_t) 1 << 32);
132
        AV_WN64A(row, temp);
133
        AV_WN64A(row + 4, temp);
134
        return;
135
    }
136
#else
137
60.8M
    if (!(AV_RN32A(row+2) |
138
60.8M
          AV_RN32A(row+4) |
139
60.8M
          AV_RN32A(row+6) |
140
60.8M
          row[1])) {
141
60.5M
        uint32_t temp;
142
60.5M
        if (DC_SHIFT - extra_shift >= 0) {
143
0
            temp = (row[0] * (1 << (DC_SHIFT - extra_shift))) & 0xffff;
144
60.5M
        } else {
145
60.5M
            temp = ((row[0] + (1<<(extra_shift - DC_SHIFT-1))) >> (extra_shift - DC_SHIFT)) & 0xffff;
146
60.5M
        }
147
60.5M
        temp += temp * (1 << 16);
148
60.5M
        AV_WN32A(row, temp);
149
60.5M
        AV_WN32A(row+2, temp);
150
60.5M
        AV_WN32A(row+4, temp);
151
60.5M
        AV_WN32A(row+6, temp);
152
60.5M
        return;
153
60.5M
    }
154
325k
#endif
155
325k
#endif
156
157
325k
    a0 = ((SUINT)W4 * row[0]) + (1 << (ROW_SHIFT + extra_shift - 1));
158
325k
    a1 = a0;
159
325k
    a2 = a0;
160
325k
    a3 = a0;
161
162
325k
    a0 += (SUINT)W2 * row[2];
163
325k
    a1 += (SUINT)W6 * row[2];
164
325k
    a2 -= (SUINT)W6 * row[2];
165
325k
    a3 -= (SUINT)W2 * row[2];
166
167
325k
    b0 = MUL(W1, row[1]);
168
325k
    MAC(b0, W3, row[3]);
169
325k
    b1 = MUL(W3, row[1]);
170
325k
    MAC(b1, -W7, row[3]);
171
325k
    b2 = MUL(W5, row[1]);
172
325k
    MAC(b2, -W1, row[3]);
173
325k
    b3 = MUL(W7, row[1]);
174
325k
    MAC(b3, -W5, row[3]);
175
176
#if IN_IDCT_DEPTH == 32
177
    if (AV_RN64A(row + 4) | AV_RN64A(row + 6)) {
178
#else
179
325k
    if (AV_RN64A(row + 4)) {
180
204k
#endif
181
204k
        a0 += (SUINT)  W4*row[4] + (SUINT)W6*row[6];
182
204k
        a1 += (SUINT)- W4*row[4] - (SUINT)W2*row[6];
183
204k
        a2 += (SUINT)- W4*row[4] + (SUINT)W2*row[6];
184
204k
        a3 += (SUINT)  W4*row[4] - (SUINT)W6*row[6];
185
186
204k
        MAC(b0,  W5, row[5]);
187
204k
        MAC(b0,  W7, row[7]);
188
189
204k
        MAC(b1, -W1, row[5]);
190
204k
        MAC(b1, -W5, row[7]);
191
192
204k
        MAC(b2,  W7, row[5]);
193
204k
        MAC(b2,  W3, row[7]);
194
195
204k
        MAC(b3,  W3, row[5]);
196
204k
        MAC(b3, -W1, row[7]);
197
204k
    }
198
199
325k
    row[0] = (int)(a0 + b0) >> (ROW_SHIFT + extra_shift);
200
325k
    row[7] = (int)(a0 - b0) >> (ROW_SHIFT + extra_shift);
201
325k
    row[1] = (int)(a1 + b1) >> (ROW_SHIFT + extra_shift);
202
325k
    row[6] = (int)(a1 - b1) >> (ROW_SHIFT + extra_shift);
203
325k
    row[2] = (int)(a2 + b2) >> (ROW_SHIFT + extra_shift);
204
325k
    row[5] = (int)(a2 - b2) >> (ROW_SHIFT + extra_shift);
205
325k
    row[3] = (int)(a3 + b3) >> (ROW_SHIFT + extra_shift);
206
325k
    row[4] = (int)(a3 - b3) >> (ROW_SHIFT + extra_shift);
207
325k
}
simple_idct.c:idctRowCondDC_int32_10bit
Line
Count
Source
116
412k
{
117
412k
    SUINT a0, a1, a2, a3, b0, b1, b2, b3;
118
119
// TODO: Add DC-only support for int32_t input
120
#if IN_IDCT_DEPTH == 16
121
#if HAVE_FAST_64BIT
122
#define ROW0_MASK (0xffffULL << 48 * HAVE_BIGENDIAN)
123
    if (((AV_RN64A(row) & ~ROW0_MASK) | AV_RN64A(row+4)) == 0) {
124
        uint64_t temp;
125
        if (DC_SHIFT - extra_shift >= 0) {
126
            temp = (row[0] * (1 << (DC_SHIFT - extra_shift))) & 0xffff;
127
        } else {
128
            temp = ((row[0] + (1<<(extra_shift - DC_SHIFT-1))) >> (extra_shift - DC_SHIFT)) & 0xffff;
129
        }
130
        temp += temp * (1 << 16);
131
        temp += temp * ((uint64_t) 1 << 32);
132
        AV_WN64A(row, temp);
133
        AV_WN64A(row + 4, temp);
134
        return;
135
    }
136
#else
137
    if (!(AV_RN32A(row+2) |
138
          AV_RN32A(row+4) |
139
          AV_RN32A(row+6) |
140
          row[1])) {
141
        uint32_t temp;
142
        if (DC_SHIFT - extra_shift >= 0) {
143
            temp = (row[0] * (1 << (DC_SHIFT - extra_shift))) & 0xffff;
144
        } else {
145
            temp = ((row[0] + (1<<(extra_shift - DC_SHIFT-1))) >> (extra_shift - DC_SHIFT)) & 0xffff;
146
        }
147
        temp += temp * (1 << 16);
148
        AV_WN32A(row, temp);
149
        AV_WN32A(row+2, temp);
150
        AV_WN32A(row+4, temp);
151
        AV_WN32A(row+6, temp);
152
        return;
153
    }
154
#endif
155
#endif
156
157
412k
    a0 = ((SUINT)W4 * row[0]) + (1 << (ROW_SHIFT + extra_shift - 1));
158
412k
    a1 = a0;
159
412k
    a2 = a0;
160
412k
    a3 = a0;
161
162
412k
    a0 += (SUINT)W2 * row[2];
163
412k
    a1 += (SUINT)W6 * row[2];
164
412k
    a2 -= (SUINT)W6 * row[2];
165
412k
    a3 -= (SUINT)W2 * row[2];
166
167
412k
    b0 = MUL(W1, row[1]);
168
412k
    MAC(b0, W3, row[3]);
169
412k
    b1 = MUL(W3, row[1]);
170
412k
    MAC(b1, -W7, row[3]);
171
412k
    b2 = MUL(W5, row[1]);
172
412k
    MAC(b2, -W1, row[3]);
173
412k
    b3 = MUL(W7, row[1]);
174
412k
    MAC(b3, -W5, row[3]);
175
176
412k
#if IN_IDCT_DEPTH == 32
177
412k
    if (AV_RN64A(row + 4) | AV_RN64A(row + 6)) {
178
#else
179
    if (AV_RN64A(row + 4)) {
180
#endif
181
55.0k
        a0 += (SUINT)  W4*row[4] + (SUINT)W6*row[6];
182
55.0k
        a1 += (SUINT)- W4*row[4] - (SUINT)W2*row[6];
183
55.0k
        a2 += (SUINT)- W4*row[4] + (SUINT)W2*row[6];
184
55.0k
        a3 += (SUINT)  W4*row[4] - (SUINT)W6*row[6];
185
186
55.0k
        MAC(b0,  W5, row[5]);
187
55.0k
        MAC(b0,  W7, row[7]);
188
189
55.0k
        MAC(b1, -W1, row[5]);
190
55.0k
        MAC(b1, -W5, row[7]);
191
192
55.0k
        MAC(b2,  W7, row[5]);
193
55.0k
        MAC(b2,  W3, row[7]);
194
195
55.0k
        MAC(b3,  W3, row[5]);
196
55.0k
        MAC(b3, -W1, row[7]);
197
55.0k
    }
198
199
412k
    row[0] = (int)(a0 + b0) >> (ROW_SHIFT + extra_shift);
200
412k
    row[7] = (int)(a0 - b0) >> (ROW_SHIFT + extra_shift);
201
412k
    row[1] = (int)(a1 + b1) >> (ROW_SHIFT + extra_shift);
202
412k
    row[6] = (int)(a1 - b1) >> (ROW_SHIFT + extra_shift);
203
412k
    row[2] = (int)(a2 + b2) >> (ROW_SHIFT + extra_shift);
204
412k
    row[5] = (int)(a2 - b2) >> (ROW_SHIFT + extra_shift);
205
412k
    row[3] = (int)(a3 + b3) >> (ROW_SHIFT + extra_shift);
206
412k
    row[4] = (int)(a3 - b3) >> (ROW_SHIFT + extra_shift);
207
412k
}
proresdsp.c:idctRowCondDC_extrashift_10
Line
Count
Source
116
2.18M
{
117
2.18M
    SUINT a0, a1, a2, a3, b0, b1, b2, b3;
118
119
// TODO: Add DC-only support for int32_t input
120
2.18M
#if IN_IDCT_DEPTH == 16
121
#if HAVE_FAST_64BIT
122
#define ROW0_MASK (0xffffULL << 48 * HAVE_BIGENDIAN)
123
    if (((AV_RN64A(row) & ~ROW0_MASK) | AV_RN64A(row+4)) == 0) {
124
        uint64_t temp;
125
        if (DC_SHIFT - extra_shift >= 0) {
126
            temp = (row[0] * (1 << (DC_SHIFT - extra_shift))) & 0xffff;
127
        } else {
128
            temp = ((row[0] + (1<<(extra_shift - DC_SHIFT-1))) >> (extra_shift - DC_SHIFT)) & 0xffff;
129
        }
130
        temp += temp * (1 << 16);
131
        temp += temp * ((uint64_t) 1 << 32);
132
        AV_WN64A(row, temp);
133
        AV_WN64A(row + 4, temp);
134
        return;
135
    }
136
#else
137
2.18M
    if (!(AV_RN32A(row+2) |
138
2.18M
          AV_RN32A(row+4) |
139
2.18M
          AV_RN32A(row+6) |
140
2.18M
          row[1])) {
141
2.03M
        uint32_t temp;
142
2.03M
        if (DC_SHIFT - extra_shift >= 0) {
143
0
            temp = (row[0] * (1 << (DC_SHIFT - extra_shift))) & 0xffff;
144
2.03M
        } else {
145
2.03M
            temp = ((row[0] + (1<<(extra_shift - DC_SHIFT-1))) >> (extra_shift - DC_SHIFT)) & 0xffff;
146
2.03M
        }
147
2.03M
        temp += temp * (1 << 16);
148
2.03M
        AV_WN32A(row, temp);
149
2.03M
        AV_WN32A(row+2, temp);
150
2.03M
        AV_WN32A(row+4, temp);
151
2.03M
        AV_WN32A(row+6, temp);
152
2.03M
        return;
153
2.03M
    }
154
143k
#endif
155
143k
#endif
156
157
143k
    a0 = ((SUINT)W4 * row[0]) + (1 << (ROW_SHIFT + extra_shift - 1));
158
143k
    a1 = a0;
159
143k
    a2 = a0;
160
143k
    a3 = a0;
161
162
143k
    a0 += (SUINT)W2 * row[2];
163
143k
    a1 += (SUINT)W6 * row[2];
164
143k
    a2 -= (SUINT)W6 * row[2];
165
143k
    a3 -= (SUINT)W2 * row[2];
166
167
143k
    b0 = MUL(W1, row[1]);
168
143k
    MAC(b0, W3, row[3]);
169
143k
    b1 = MUL(W3, row[1]);
170
143k
    MAC(b1, -W7, row[3]);
171
143k
    b2 = MUL(W5, row[1]);
172
143k
    MAC(b2, -W1, row[3]);
173
143k
    b3 = MUL(W7, row[1]);
174
143k
    MAC(b3, -W5, row[3]);
175
176
#if IN_IDCT_DEPTH == 32
177
    if (AV_RN64A(row + 4) | AV_RN64A(row + 6)) {
178
#else
179
143k
    if (AV_RN64A(row + 4)) {
180
50.2k
#endif
181
50.2k
        a0 += (SUINT)  W4*row[4] + (SUINT)W6*row[6];
182
50.2k
        a1 += (SUINT)- W4*row[4] - (SUINT)W2*row[6];
183
50.2k
        a2 += (SUINT)- W4*row[4] + (SUINT)W2*row[6];
184
50.2k
        a3 += (SUINT)  W4*row[4] - (SUINT)W6*row[6];
185
186
50.2k
        MAC(b0,  W5, row[5]);
187
50.2k
        MAC(b0,  W7, row[7]);
188
189
50.2k
        MAC(b1, -W1, row[5]);
190
50.2k
        MAC(b1, -W5, row[7]);
191
192
50.2k
        MAC(b2,  W7, row[5]);
193
50.2k
        MAC(b2,  W3, row[7]);
194
195
50.2k
        MAC(b3,  W3, row[5]);
196
50.2k
        MAC(b3, -W1, row[7]);
197
50.2k
    }
198
199
143k
    row[0] = (int)(a0 + b0) >> (ROW_SHIFT + extra_shift);
200
143k
    row[7] = (int)(a0 - b0) >> (ROW_SHIFT + extra_shift);
201
143k
    row[1] = (int)(a1 + b1) >> (ROW_SHIFT + extra_shift);
202
143k
    row[6] = (int)(a1 - b1) >> (ROW_SHIFT + extra_shift);
203
143k
    row[2] = (int)(a2 + b2) >> (ROW_SHIFT + extra_shift);
204
143k
    row[5] = (int)(a2 - b2) >> (ROW_SHIFT + extra_shift);
205
143k
    row[3] = (int)(a3 + b3) >> (ROW_SHIFT + extra_shift);
206
143k
    row[4] = (int)(a3 - b3) >> (ROW_SHIFT + extra_shift);
207
143k
}
proresdsp.c:idctRowCondDC_int16_12bit
Line
Count
Source
116
259k
{
117
259k
    SUINT a0, a1, a2, a3, b0, b1, b2, b3;
118
119
// TODO: Add DC-only support for int32_t input
120
259k
#if IN_IDCT_DEPTH == 16
121
#if HAVE_FAST_64BIT
122
#define ROW0_MASK (0xffffULL << 48 * HAVE_BIGENDIAN)
123
    if (((AV_RN64A(row) & ~ROW0_MASK) | AV_RN64A(row+4)) == 0) {
124
        uint64_t temp;
125
        if (DC_SHIFT - extra_shift >= 0) {
126
            temp = (row[0] * (1 << (DC_SHIFT - extra_shift))) & 0xffff;
127
        } else {
128
            temp = ((row[0] + (1<<(extra_shift - DC_SHIFT-1))) >> (extra_shift - DC_SHIFT)) & 0xffff;
129
        }
130
        temp += temp * (1 << 16);
131
        temp += temp * ((uint64_t) 1 << 32);
132
        AV_WN64A(row, temp);
133
        AV_WN64A(row + 4, temp);
134
        return;
135
    }
136
#else
137
259k
    if (!(AV_RN32A(row+2) |
138
259k
          AV_RN32A(row+4) |
139
259k
          AV_RN32A(row+6) |
140
259k
          row[1])) {
141
244k
        uint32_t temp;
142
244k
        if (DC_SHIFT - extra_shift >= 0) {
143
0
            temp = (row[0] * (1 << (DC_SHIFT - extra_shift))) & 0xffff;
144
244k
        } else {
145
244k
            temp = ((row[0] + (1<<(extra_shift - DC_SHIFT-1))) >> (extra_shift - DC_SHIFT)) & 0xffff;
146
244k
        }
147
244k
        temp += temp * (1 << 16);
148
244k
        AV_WN32A(row, temp);
149
244k
        AV_WN32A(row+2, temp);
150
244k
        AV_WN32A(row+4, temp);
151
244k
        AV_WN32A(row+6, temp);
152
244k
        return;
153
244k
    }
154
15.5k
#endif
155
15.5k
#endif
156
157
15.5k
    a0 = ((SUINT)W4 * row[0]) + (1 << (ROW_SHIFT + extra_shift - 1));
158
15.5k
    a1 = a0;
159
15.5k
    a2 = a0;
160
15.5k
    a3 = a0;
161
162
15.5k
    a0 += (SUINT)W2 * row[2];
163
15.5k
    a1 += (SUINT)W6 * row[2];
164
15.5k
    a2 -= (SUINT)W6 * row[2];
165
15.5k
    a3 -= (SUINT)W2 * row[2];
166
167
15.5k
    b0 = MUL(W1, row[1]);
168
15.5k
    MAC(b0, W3, row[3]);
169
15.5k
    b1 = MUL(W3, row[1]);
170
15.5k
    MAC(b1, -W7, row[3]);
171
15.5k
    b2 = MUL(W5, row[1]);
172
15.5k
    MAC(b2, -W1, row[3]);
173
15.5k
    b3 = MUL(W7, row[1]);
174
15.5k
    MAC(b3, -W5, row[3]);
175
176
#if IN_IDCT_DEPTH == 32
177
    if (AV_RN64A(row + 4) | AV_RN64A(row + 6)) {
178
#else
179
15.5k
    if (AV_RN64A(row + 4)) {
180
5.95k
#endif
181
5.95k
        a0 += (SUINT)  W4*row[4] + (SUINT)W6*row[6];
182
5.95k
        a1 += (SUINT)- W4*row[4] - (SUINT)W2*row[6];
183
5.95k
        a2 += (SUINT)- W4*row[4] + (SUINT)W2*row[6];
184
5.95k
        a3 += (SUINT)  W4*row[4] - (SUINT)W6*row[6];
185
186
5.95k
        MAC(b0,  W5, row[5]);
187
5.95k
        MAC(b0,  W7, row[7]);
188
189
5.95k
        MAC(b1, -W1, row[5]);
190
5.95k
        MAC(b1, -W5, row[7]);
191
192
5.95k
        MAC(b2,  W7, row[5]);
193
5.95k
        MAC(b2,  W3, row[7]);
194
195
5.95k
        MAC(b3,  W3, row[5]);
196
5.95k
        MAC(b3, -W1, row[7]);
197
5.95k
    }
198
199
15.5k
    row[0] = (int)(a0 + b0) >> (ROW_SHIFT + extra_shift);
200
15.5k
    row[7] = (int)(a0 - b0) >> (ROW_SHIFT + extra_shift);
201
15.5k
    row[1] = (int)(a1 + b1) >> (ROW_SHIFT + extra_shift);
202
15.5k
    row[6] = (int)(a1 - b1) >> (ROW_SHIFT + extra_shift);
203
15.5k
    row[2] = (int)(a2 + b2) >> (ROW_SHIFT + extra_shift);
204
15.5k
    row[5] = (int)(a2 - b2) >> (ROW_SHIFT + extra_shift);
205
15.5k
    row[3] = (int)(a3 + b3) >> (ROW_SHIFT + extra_shift);
206
15.5k
    row[4] = (int)(a3 - b3) >> (ROW_SHIFT + extra_shift);
207
15.5k
}
proresdsp.c:idctRowCondDC_int32_12bit
Line
Count
Source
116
1.91M
{
117
1.91M
    SUINT a0, a1, a2, a3, b0, b1, b2, b3;
118
119
// TODO: Add DC-only support for int32_t input
120
#if IN_IDCT_DEPTH == 16
121
#if HAVE_FAST_64BIT
122
#define ROW0_MASK (0xffffULL << 48 * HAVE_BIGENDIAN)
123
    if (((AV_RN64A(row) & ~ROW0_MASK) | AV_RN64A(row+4)) == 0) {
124
        uint64_t temp;
125
        if (DC_SHIFT - extra_shift >= 0) {
126
            temp = (row[0] * (1 << (DC_SHIFT - extra_shift))) & 0xffff;
127
        } else {
128
            temp = ((row[0] + (1<<(extra_shift - DC_SHIFT-1))) >> (extra_shift - DC_SHIFT)) & 0xffff;
129
        }
130
        temp += temp * (1 << 16);
131
        temp += temp * ((uint64_t) 1 << 32);
132
        AV_WN64A(row, temp);
133
        AV_WN64A(row + 4, temp);
134
        return;
135
    }
136
#else
137
    if (!(AV_RN32A(row+2) |
138
          AV_RN32A(row+4) |
139
          AV_RN32A(row+6) |
140
          row[1])) {
141
        uint32_t temp;
142
        if (DC_SHIFT - extra_shift >= 0) {
143
            temp = (row[0] * (1 << (DC_SHIFT - extra_shift))) & 0xffff;
144
        } else {
145
            temp = ((row[0] + (1<<(extra_shift - DC_SHIFT-1))) >> (extra_shift - DC_SHIFT)) & 0xffff;
146
        }
147
        temp += temp * (1 << 16);
148
        AV_WN32A(row, temp);
149
        AV_WN32A(row+2, temp);
150
        AV_WN32A(row+4, temp);
151
        AV_WN32A(row+6, temp);
152
        return;
153
    }
154
#endif
155
#endif
156
157
1.91M
    a0 = ((SUINT)W4 * row[0]) + (1 << (ROW_SHIFT + extra_shift - 1));
158
1.91M
    a1 = a0;
159
1.91M
    a2 = a0;
160
1.91M
    a3 = a0;
161
162
1.91M
    a0 += (SUINT)W2 * row[2];
163
1.91M
    a1 += (SUINT)W6 * row[2];
164
1.91M
    a2 -= (SUINT)W6 * row[2];
165
1.91M
    a3 -= (SUINT)W2 * row[2];
166
167
1.91M
    b0 = MUL(W1, row[1]);
168
1.91M
    MAC(b0, W3, row[3]);
169
1.91M
    b1 = MUL(W3, row[1]);
170
1.91M
    MAC(b1, -W7, row[3]);
171
1.91M
    b2 = MUL(W5, row[1]);
172
1.91M
    MAC(b2, -W1, row[3]);
173
1.91M
    b3 = MUL(W7, row[1]);
174
1.91M
    MAC(b3, -W5, row[3]);
175
176
1.91M
#if IN_IDCT_DEPTH == 32
177
1.91M
    if (AV_RN64A(row + 4) | AV_RN64A(row + 6)) {
178
#else
179
    if (AV_RN64A(row + 4)) {
180
#endif
181
17.5k
        a0 += (SUINT)  W4*row[4] + (SUINT)W6*row[6];
182
17.5k
        a1 += (SUINT)- W4*row[4] - (SUINT)W2*row[6];
183
17.5k
        a2 += (SUINT)- W4*row[4] + (SUINT)W2*row[6];
184
17.5k
        a3 += (SUINT)  W4*row[4] - (SUINT)W6*row[6];
185
186
17.5k
        MAC(b0,  W5, row[5]);
187
17.5k
        MAC(b0,  W7, row[7]);
188
189
17.5k
        MAC(b1, -W1, row[5]);
190
17.5k
        MAC(b1, -W5, row[7]);
191
192
17.5k
        MAC(b2,  W7, row[5]);
193
17.5k
        MAC(b2,  W3, row[7]);
194
195
17.5k
        MAC(b3,  W3, row[5]);
196
17.5k
        MAC(b3, -W1, row[7]);
197
17.5k
    }
198
199
1.91M
    row[0] = (int)(a0 + b0) >> (ROW_SHIFT + extra_shift);
200
1.91M
    row[7] = (int)(a0 - b0) >> (ROW_SHIFT + extra_shift);
201
1.91M
    row[1] = (int)(a1 + b1) >> (ROW_SHIFT + extra_shift);
202
1.91M
    row[6] = (int)(a1 - b1) >> (ROW_SHIFT + extra_shift);
203
1.91M
    row[2] = (int)(a2 + b2) >> (ROW_SHIFT + extra_shift);
204
1.91M
    row[5] = (int)(a2 - b2) >> (ROW_SHIFT + extra_shift);
205
1.91M
    row[3] = (int)(a3 + b3) >> (ROW_SHIFT + extra_shift);
206
1.91M
    row[4] = (int)(a3 - b3) >> (ROW_SHIFT + extra_shift);
207
1.91M
}
208
209
1.67G
#define IDCT_COLS do {                                  \
210
1.67G
        a0 = (SUINT)W4 * (col[8*0] + ((1<<(COL_SHIFT-1))/W4)); \
211
1.67G
        a1 = a0;                                        \
212
1.67G
        a2 = a0;                                        \
213
1.67G
        a3 = a0;                                        \
214
1.67G
                                                        \
215
1.67G
        a0 += (SUINT) W2*col[8*2];                             \
216
1.67G
        a1 += (SUINT) W6*col[8*2];                             \
217
1.67G
        a2 += (SUINT)-W6*col[8*2];                             \
218
1.67G
        a3 += (SUINT)-W2*col[8*2];                             \
219
1.67G
                                                        \
220
1.67G
        b0 = MUL(W1, col[8*1]);                         \
221
1.67G
        b1 = MUL(W3, col[8*1]);                         \
222
1.67G
        b2 = MUL(W5, col[8*1]);                         \
223
1.67G
        b3 = MUL(W7, col[8*1]);                         \
224
1.67G
                                                        \
225
1.67G
        MAC(b0,  W3, col[8*3]);                         \
226
1.67G
        MAC(b1, -W7, col[8*3]);                         \
227
1.67G
        MAC(b2, -W1, col[8*3]);                         \
228
1.67G
        MAC(b3, -W5, col[8*3]);                         \
229
1.67G
                                                        \
230
1.67G
        if (col[8*4]) {                                 \
231
103M
            a0 += (SUINT) W4*col[8*4];                         \
232
103M
            a1 += (SUINT)-W4*col[8*4];                         \
233
103M
            a2 += (SUINT)-W4*col[8*4];                         \
234
103M
            a3 += (SUINT) W4*col[8*4];                         \
235
103M
        }                                               \
236
1.67G
                                                        \
237
1.67G
        if (col[8*5]) {                                 \
238
80.4M
            MAC(b0,  W5, col[8*5]);                     \
239
80.4M
            MAC(b1, -W1, col[8*5]);                     \
240
80.4M
            MAC(b2,  W7, col[8*5]);                     \
241
80.4M
            MAC(b3,  W3, col[8*5]);                     \
242
80.4M
        }                                               \
243
1.67G
                                                        \
244
1.67G
        if (col[8*6]) {                                 \
245
74.6M
            a0 += (SUINT) W6*col[8*6];                         \
246
74.6M
            a1 += (SUINT)-W2*col[8*6];                         \
247
74.6M
            a2 += (SUINT) W2*col[8*6];                         \
248
74.6M
            a3 += (SUINT)-W6*col[8*6];                         \
249
74.6M
        }                                               \
250
1.67G
                                                        \
251
1.67G
        if (col[8*7]) {                                 \
252
56.3M
            MAC(b0,  W7, col[8*7]);                     \
253
56.3M
            MAC(b1, -W5, col[8*7]);                     \
254
56.3M
            MAC(b2,  W3, col[8*7]);                     \
255
56.3M
            MAC(b3, -W1, col[8*7]);                     \
256
56.3M
        }                                               \
257
1.67G
    } while (0)
258
259
#ifdef EXTRA_SHIFT
260
static inline void FUNC(idctSparseCol_extrashift)(int16_t *col)
261
#else
262
static inline void FUNC6(idctSparseCol)(idctin *col)
263
#endif
264
143M
{
265
143M
    unsigned a0, a1, a2, a3, b0, b1, b2, b3;
266
267
143M
    IDCT_COLS;
268
269
143M
    col[0 ] = ((int)(a0 + b0) >> COL_SHIFT);
270
143M
    col[8 ] = ((int)(a1 + b1) >> COL_SHIFT);
271
143M
    col[16] = ((int)(a2 + b2) >> COL_SHIFT);
272
143M
    col[24] = ((int)(a3 + b3) >> COL_SHIFT);
273
143M
    col[32] = ((int)(a3 - b3) >> COL_SHIFT);
274
143M
    col[40] = ((int)(a2 - b2) >> COL_SHIFT);
275
143M
    col[48] = ((int)(a1 - b1) >> COL_SHIFT);
276
143M
    col[56] = ((int)(a0 - b0) >> COL_SHIFT);
277
143M
}
simple_idct.c:idctSparseCol_int16_8bit
Line
Count
Source
264
139M
{
265
139M
    unsigned a0, a1, a2, a3, b0, b1, b2, b3;
266
267
139M
    IDCT_COLS;
268
269
139M
    col[0 ] = ((int)(a0 + b0) >> COL_SHIFT);
270
139M
    col[8 ] = ((int)(a1 + b1) >> COL_SHIFT);
271
139M
    col[16] = ((int)(a2 + b2) >> COL_SHIFT);
272
139M
    col[24] = ((int)(a3 + b3) >> COL_SHIFT);
273
139M
    col[32] = ((int)(a3 - b3) >> COL_SHIFT);
274
139M
    col[40] = ((int)(a2 - b2) >> COL_SHIFT);
275
139M
    col[48] = ((int)(a1 - b1) >> COL_SHIFT);
276
139M
    col[56] = ((int)(a0 - b0) >> COL_SHIFT);
277
139M
}
Unexecuted instantiation: simple_idct.c:idctSparseCol_int16_10bit
Unexecuted instantiation: simple_idct.c:idctSparseCol_int16_12bit
Unexecuted instantiation: simple_idct.c:idctSparseCol_int32_10bit
proresdsp.c:idctSparseCol_extrashift_10
Line
Count
Source
264
2.18M
{
265
2.18M
    unsigned a0, a1, a2, a3, b0, b1, b2, b3;
266
267
2.18M
    IDCT_COLS;
268
269
2.18M
    col[0 ] = ((int)(a0 + b0) >> COL_SHIFT);
270
2.18M
    col[8 ] = ((int)(a1 + b1) >> COL_SHIFT);
271
2.18M
    col[16] = ((int)(a2 + b2) >> COL_SHIFT);
272
2.18M
    col[24] = ((int)(a3 + b3) >> COL_SHIFT);
273
2.18M
    col[32] = ((int)(a3 - b3) >> COL_SHIFT);
274
2.18M
    col[40] = ((int)(a2 - b2) >> COL_SHIFT);
275
2.18M
    col[48] = ((int)(a1 - b1) >> COL_SHIFT);
276
2.18M
    col[56] = ((int)(a0 - b0) >> COL_SHIFT);
277
2.18M
}
proresdsp.c:idctSparseCol_int16_12bit
Line
Count
Source
264
259k
{
265
259k
    unsigned a0, a1, a2, a3, b0, b1, b2, b3;
266
267
259k
    IDCT_COLS;
268
269
259k
    col[0 ] = ((int)(a0 + b0) >> COL_SHIFT);
270
259k
    col[8 ] = ((int)(a1 + b1) >> COL_SHIFT);
271
259k
    col[16] = ((int)(a2 + b2) >> COL_SHIFT);
272
259k
    col[24] = ((int)(a3 + b3) >> COL_SHIFT);
273
259k
    col[32] = ((int)(a3 - b3) >> COL_SHIFT);
274
259k
    col[40] = ((int)(a2 - b2) >> COL_SHIFT);
275
259k
    col[48] = ((int)(a1 - b1) >> COL_SHIFT);
276
259k
    col[56] = ((int)(a0 - b0) >> COL_SHIFT);
277
259k
}
proresdsp.c:idctSparseCol_int32_12bit
Line
Count
Source
264
1.91M
{
265
1.91M
    unsigned a0, a1, a2, a3, b0, b1, b2, b3;
266
267
1.91M
    IDCT_COLS;
268
269
1.91M
    col[0 ] = ((int)(a0 + b0) >> COL_SHIFT);
270
1.91M
    col[8 ] = ((int)(a1 + b1) >> COL_SHIFT);
271
1.91M
    col[16] = ((int)(a2 + b2) >> COL_SHIFT);
272
1.91M
    col[24] = ((int)(a3 + b3) >> COL_SHIFT);
273
1.91M
    col[32] = ((int)(a3 - b3) >> COL_SHIFT);
274
1.91M
    col[40] = ((int)(a2 - b2) >> COL_SHIFT);
275
1.91M
    col[48] = ((int)(a1 - b1) >> COL_SHIFT);
276
1.91M
    col[56] = ((int)(a0 - b0) >> COL_SHIFT);
277
1.91M
}
278
279
#ifndef PRORES_ONLY
280
#ifndef EXTRA_SHIFT
281
static inline void FUNC6(idctSparseColPut)(pixel *dest, ptrdiff_t line_size,
282
                                          idctin *col)
283
1.44G
{
284
1.44G
    SUINT a0, a1, a2, a3, b0, b1, b2, b3;
285
286
1.44G
    IDCT_COLS;
287
288
1.44G
    dest[0] = av_clip_pixel((int)(a0 + b0) >> COL_SHIFT);
289
1.44G
    dest += line_size;
290
1.44G
    dest[0] = av_clip_pixel((int)(a1 + b1) >> COL_SHIFT);
291
1.44G
    dest += line_size;
292
1.44G
    dest[0] = av_clip_pixel((int)(a2 + b2) >> COL_SHIFT);
293
1.44G
    dest += line_size;
294
1.44G
    dest[0] = av_clip_pixel((int)(a3 + b3) >> COL_SHIFT);
295
1.44G
    dest += line_size;
296
1.44G
    dest[0] = av_clip_pixel((int)(a3 - b3) >> COL_SHIFT);
297
1.44G
    dest += line_size;
298
1.44G
    dest[0] = av_clip_pixel((int)(a2 - b2) >> COL_SHIFT);
299
1.44G
    dest += line_size;
300
1.44G
    dest[0] = av_clip_pixel((int)(a1 - b1) >> COL_SHIFT);
301
1.44G
    dest += line_size;
302
1.44G
    dest[0] = av_clip_pixel((int)(a0 - b0) >> COL_SHIFT);
303
1.44G
}
simple_idct.c:idctSparseColPut_int16_8bit
Line
Count
Source
283
1.27G
{
284
1.27G
    SUINT a0, a1, a2, a3, b0, b1, b2, b3;
285
286
1.27G
    IDCT_COLS;
287
288
1.27G
    dest[0] = av_clip_pixel((int)(a0 + b0) >> COL_SHIFT);
289
1.27G
    dest += line_size;
290
1.27G
    dest[0] = av_clip_pixel((int)(a1 + b1) >> COL_SHIFT);
291
1.27G
    dest += line_size;
292
1.27G
    dest[0] = av_clip_pixel((int)(a2 + b2) >> COL_SHIFT);
293
1.27G
    dest += line_size;
294
1.27G
    dest[0] = av_clip_pixel((int)(a3 + b3) >> COL_SHIFT);
295
1.27G
    dest += line_size;
296
1.27G
    dest[0] = av_clip_pixel((int)(a3 - b3) >> COL_SHIFT);
297
1.27G
    dest += line_size;
298
1.27G
    dest[0] = av_clip_pixel((int)(a2 - b2) >> COL_SHIFT);
299
1.27G
    dest += line_size;
300
1.27G
    dest[0] = av_clip_pixel((int)(a1 - b1) >> COL_SHIFT);
301
1.27G
    dest += line_size;
302
1.27G
    dest[0] = av_clip_pixel((int)(a0 - b0) >> COL_SHIFT);
303
1.27G
}
simple_idct.c:idctSparseColPut_int16_10bit
Line
Count
Source
283
101M
{
284
101M
    SUINT a0, a1, a2, a3, b0, b1, b2, b3;
285
286
101M
    IDCT_COLS;
287
288
101M
    dest[0] = av_clip_pixel((int)(a0 + b0) >> COL_SHIFT);
289
101M
    dest += line_size;
290
101M
    dest[0] = av_clip_pixel((int)(a1 + b1) >> COL_SHIFT);
291
101M
    dest += line_size;
292
101M
    dest[0] = av_clip_pixel((int)(a2 + b2) >> COL_SHIFT);
293
101M
    dest += line_size;
294
101M
    dest[0] = av_clip_pixel((int)(a3 + b3) >> COL_SHIFT);
295
101M
    dest += line_size;
296
101M
    dest[0] = av_clip_pixel((int)(a3 - b3) >> COL_SHIFT);
297
101M
    dest += line_size;
298
101M
    dest[0] = av_clip_pixel((int)(a2 - b2) >> COL_SHIFT);
299
101M
    dest += line_size;
300
101M
    dest[0] = av_clip_pixel((int)(a1 - b1) >> COL_SHIFT);
301
101M
    dest += line_size;
302
101M
    dest[0] = av_clip_pixel((int)(a0 - b0) >> COL_SHIFT);
303
101M
}
simple_idct.c:idctSparseColPut_int16_12bit
Line
Count
Source
283
60.8M
{
284
60.8M
    SUINT a0, a1, a2, a3, b0, b1, b2, b3;
285
286
60.8M
    IDCT_COLS;
287
288
60.8M
    dest[0] = av_clip_pixel((int)(a0 + b0) >> COL_SHIFT);
289
60.8M
    dest += line_size;
290
60.8M
    dest[0] = av_clip_pixel((int)(a1 + b1) >> COL_SHIFT);
291
60.8M
    dest += line_size;
292
60.8M
    dest[0] = av_clip_pixel((int)(a2 + b2) >> COL_SHIFT);
293
60.8M
    dest += line_size;
294
60.8M
    dest[0] = av_clip_pixel((int)(a3 + b3) >> COL_SHIFT);
295
60.8M
    dest += line_size;
296
60.8M
    dest[0] = av_clip_pixel((int)(a3 - b3) >> COL_SHIFT);
297
60.8M
    dest += line_size;
298
60.8M
    dest[0] = av_clip_pixel((int)(a2 - b2) >> COL_SHIFT);
299
60.8M
    dest += line_size;
300
60.8M
    dest[0] = av_clip_pixel((int)(a1 - b1) >> COL_SHIFT);
301
60.8M
    dest += line_size;
302
60.8M
    dest[0] = av_clip_pixel((int)(a0 - b0) >> COL_SHIFT);
303
60.8M
}
simple_idct.c:idctSparseColPut_int32_10bit
Line
Count
Source
283
412k
{
284
412k
    SUINT a0, a1, a2, a3, b0, b1, b2, b3;
285
286
412k
    IDCT_COLS;
287
288
412k
    dest[0] = av_clip_pixel((int)(a0 + b0) >> COL_SHIFT);
289
412k
    dest += line_size;
290
412k
    dest[0] = av_clip_pixel((int)(a1 + b1) >> COL_SHIFT);
291
412k
    dest += line_size;
292
412k
    dest[0] = av_clip_pixel((int)(a2 + b2) >> COL_SHIFT);
293
412k
    dest += line_size;
294
412k
    dest[0] = av_clip_pixel((int)(a3 + b3) >> COL_SHIFT);
295
412k
    dest += line_size;
296
412k
    dest[0] = av_clip_pixel((int)(a3 - b3) >> COL_SHIFT);
297
412k
    dest += line_size;
298
412k
    dest[0] = av_clip_pixel((int)(a2 - b2) >> COL_SHIFT);
299
412k
    dest += line_size;
300
412k
    dest[0] = av_clip_pixel((int)(a1 - b1) >> COL_SHIFT);
301
412k
    dest += line_size;
302
412k
    dest[0] = av_clip_pixel((int)(a0 - b0) >> COL_SHIFT);
303
412k
}
304
305
static inline void FUNC6(idctSparseColAdd)(pixel *dest, ptrdiff_t line_size,
306
                                          idctin *col)
307
95.0M
{
308
95.0M
    unsigned a0, a1, a2, a3, b0, b1, b2, b3;
309
310
95.0M
    IDCT_COLS;
311
312
95.0M
    dest[0] = av_clip_pixel(dest[0] + ((int)(a0 + b0) >> COL_SHIFT));
313
95.0M
    dest += line_size;
314
95.0M
    dest[0] = av_clip_pixel(dest[0] + ((int)(a1 + b1) >> COL_SHIFT));
315
95.0M
    dest += line_size;
316
95.0M
    dest[0] = av_clip_pixel(dest[0] + ((int)(a2 + b2) >> COL_SHIFT));
317
95.0M
    dest += line_size;
318
95.0M
    dest[0] = av_clip_pixel(dest[0] + ((int)(a3 + b3) >> COL_SHIFT));
319
95.0M
    dest += line_size;
320
95.0M
    dest[0] = av_clip_pixel(dest[0] + ((int)(a3 - b3) >> COL_SHIFT));
321
95.0M
    dest += line_size;
322
95.0M
    dest[0] = av_clip_pixel(dest[0] + ((int)(a2 - b2) >> COL_SHIFT));
323
95.0M
    dest += line_size;
324
95.0M
    dest[0] = av_clip_pixel(dest[0] + ((int)(a1 - b1) >> COL_SHIFT));
325
95.0M
    dest += line_size;
326
95.0M
    dest[0] = av_clip_pixel(dest[0] + ((int)(a0 - b0) >> COL_SHIFT));
327
95.0M
}
simple_idct.c:idctSparseColAdd_int16_8bit
Line
Count
Source
307
95.0M
{
308
95.0M
    unsigned a0, a1, a2, a3, b0, b1, b2, b3;
309
310
95.0M
    IDCT_COLS;
311
312
95.0M
    dest[0] = av_clip_pixel(dest[0] + ((int)(a0 + b0) >> COL_SHIFT));
313
95.0M
    dest += line_size;
314
95.0M
    dest[0] = av_clip_pixel(dest[0] + ((int)(a1 + b1) >> COL_SHIFT));
315
95.0M
    dest += line_size;
316
95.0M
    dest[0] = av_clip_pixel(dest[0] + ((int)(a2 + b2) >> COL_SHIFT));
317
95.0M
    dest += line_size;
318
95.0M
    dest[0] = av_clip_pixel(dest[0] + ((int)(a3 + b3) >> COL_SHIFT));
319
95.0M
    dest += line_size;
320
95.0M
    dest[0] = av_clip_pixel(dest[0] + ((int)(a3 - b3) >> COL_SHIFT));
321
95.0M
    dest += line_size;
322
95.0M
    dest[0] = av_clip_pixel(dest[0] + ((int)(a2 - b2) >> COL_SHIFT));
323
95.0M
    dest += line_size;
324
95.0M
    dest[0] = av_clip_pixel(dest[0] + ((int)(a1 - b1) >> COL_SHIFT));
325
95.0M
    dest += line_size;
326
95.0M
    dest[0] = av_clip_pixel(dest[0] + ((int)(a0 - b0) >> COL_SHIFT));
327
95.0M
}
Unexecuted instantiation: simple_idct.c:idctSparseColAdd_int16_10bit
Unexecuted instantiation: simple_idct.c:idctSparseColAdd_int16_12bit
Unexecuted instantiation: simple_idct.c:idctSparseColAdd_int32_10bit
328
329
void FUNC6(ff_simple_idct_put)(uint8_t *dest_, ptrdiff_t line_size, int16_t *block_)
330
180M
{
331
180M
    idctin *block = (idctin *)block_;
332
180M
    pixel *dest = (pixel *)dest_;
333
180M
    int i;
334
335
180M
    line_size /= sizeof(pixel);
336
337
1.62G
    for (i = 0; i < 8; i++)
338
1.44G
        FUNC6(idctRowCondDC)(block + i*8, 0);
339
340
1.62G
    for (i = 0; i < 8; i++)
341
1.44G
        FUNC6(idctSparseColPut)(dest + i, line_size, block + i);
342
180M
}
ff_simple_idct_put_int16_8bit
Line
Count
Source
330
159M
{
331
159M
    idctin *block = (idctin *)block_;
332
159M
    pixel *dest = (pixel *)dest_;
333
159M
    int i;
334
335
159M
    line_size /= sizeof(pixel);
336
337
1.43G
    for (i = 0; i < 8; i++)
338
1.27G
        FUNC6(idctRowCondDC)(block + i*8, 0);
339
340
1.43G
    for (i = 0; i < 8; i++)
341
1.27G
        FUNC6(idctSparseColPut)(dest + i, line_size, block + i);
342
159M
}
ff_simple_idct_put_int16_10bit
Line
Count
Source
330
12.6M
{
331
12.6M
    idctin *block = (idctin *)block_;
332
12.6M
    pixel *dest = (pixel *)dest_;
333
12.6M
    int i;
334
335
12.6M
    line_size /= sizeof(pixel);
336
337
114M
    for (i = 0; i < 8; i++)
338
101M
        FUNC6(idctRowCondDC)(block + i*8, 0);
339
340
114M
    for (i = 0; i < 8; i++)
341
101M
        FUNC6(idctSparseColPut)(dest + i, line_size, block + i);
342
12.6M
}
ff_simple_idct_put_int16_12bit
Line
Count
Source
330
7.60M
{
331
7.60M
    idctin *block = (idctin *)block_;
332
7.60M
    pixel *dest = (pixel *)dest_;
333
7.60M
    int i;
334
335
7.60M
    line_size /= sizeof(pixel);
336
337
68.4M
    for (i = 0; i < 8; i++)
338
60.8M
        FUNC6(idctRowCondDC)(block + i*8, 0);
339
340
68.4M
    for (i = 0; i < 8; i++)
341
60.8M
        FUNC6(idctSparseColPut)(dest + i, line_size, block + i);
342
7.60M
}
ff_simple_idct_put_int32_10bit
Line
Count
Source
330
51.6k
{
331
51.6k
    idctin *block = (idctin *)block_;
332
51.6k
    pixel *dest = (pixel *)dest_;
333
51.6k
    int i;
334
335
51.6k
    line_size /= sizeof(pixel);
336
337
464k
    for (i = 0; i < 8; i++)
338
412k
        FUNC6(idctRowCondDC)(block + i*8, 0);
339
340
464k
    for (i = 0; i < 8; i++)
341
412k
        FUNC6(idctSparseColPut)(dest + i, line_size, block + i);
342
51.6k
}
343
344
#if IN_IDCT_DEPTH == 16
345
void FUNC6(ff_simple_idct_add)(uint8_t *dest_, ptrdiff_t line_size, int16_t *block)
346
4.97M
{
347
4.97M
    pixel *dest = (pixel *)dest_;
348
4.97M
    int i;
349
350
4.97M
    line_size /= sizeof(pixel);
351
352
44.7M
    for (i = 0; i < 8; i++)
353
39.7M
        FUNC6(idctRowCondDC)(block + i*8, 0);
354
355
44.7M
    for (i = 0; i < 8; i++)
356
39.7M
        FUNC6(idctSparseColAdd)(dest + i, line_size, block + i);
357
4.97M
}
ff_simple_idct_add_int16_8bit
Line
Count
Source
346
4.97M
{
347
4.97M
    pixel *dest = (pixel *)dest_;
348
4.97M
    int i;
349
350
4.97M
    line_size /= sizeof(pixel);
351
352
44.7M
    for (i = 0; i < 8; i++)
353
39.7M
        FUNC6(idctRowCondDC)(block + i*8, 0);
354
355
44.7M
    for (i = 0; i < 8; i++)
356
39.7M
        FUNC6(idctSparseColAdd)(dest + i, line_size, block + i);
357
4.97M
}
Unexecuted instantiation: ff_simple_idct_add_int16_10bit
Unexecuted instantiation: ff_simple_idct_add_int16_12bit
358
359
void FUNC6(ff_simple_idct)(int16_t *block)
360
17.3M
{
361
17.3M
    int i;
362
363
156M
    for (i = 0; i < 8; i++)
364
139M
        FUNC6(idctRowCondDC)(block + i*8, 0);
365
366
156M
    for (i = 0; i < 8; i++)
367
139M
        FUNC6(idctSparseCol)(block + i);
368
17.3M
}
ff_simple_idct_int16_8bit
Line
Count
Source
360
17.3M
{
361
17.3M
    int i;
362
363
156M
    for (i = 0; i < 8; i++)
364
139M
        FUNC6(idctRowCondDC)(block + i*8, 0);
365
366
156M
    for (i = 0; i < 8; i++)
367
139M
        FUNC6(idctSparseCol)(block + i);
368
17.3M
}
Unexecuted instantiation: ff_simple_idct_int16_10bit
Unexecuted instantiation: ff_simple_idct_int16_12bit
369
#endif
370
#endif
371
#endif /* PRORES_ONLY */