FFmpeg
libavcodec
cbrt_tablegen_common.c
Go to the documentation of this file.
1
/*
2
* Common code for AAC cube-root table
3
*
4
* Copyright (c) 2010 Reimar Döffinger <Reimar.Doeffinger@gmx.de>
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
#include <math.h>
24
25
#include "
cbrt_data.h
"
26
#include "
libavutil/attributes.h
"
27
#ifdef HAVE_AV_CONFIG_H // Only include libm.h when building for the target, not the host
28
#include "
libavutil/libm.h
"
29
#endif
30
31
av_cold
void
ff_cbrt_dbl_tableinit
(
double
tmp_lut[
TMP_LUT_SIZE
])
32
{
33
for
(
int
idx = 0; idx <
TMP_LUT_SIZE
; ++idx)
34
tmp_lut[idx] = 1;
35
36
/* have to take care of non-squarefree numbers; notice that sqrt(LUT_SIZE) = 90;
37
* idx == 44 corresponds to 89. */
38
for
(
int
idx = 1; idx < 45; ++idx) {
39
if
(tmp_lut[idx] == 1) {
40
int
i
= 2 * idx + 1;
41
double
cbrt_val =
i
*
cbrt
(
i
);
42
for
(
int
k =
i
; k <
LUT_SIZE
; k *=
i
) {
43
// We only have to handle k, 3 * k, 5 * k,...,
44
// because only these are odd. The corresponding indices are
45
// k >> 1, (k >> 1) + k, (k >> 1) + 2 * k,...
46
for
(
int
idx2 = k >> 1; idx2 <
TMP_LUT_SIZE
; idx2 += k)
47
tmp_lut[idx2] *= cbrt_val;
48
}
49
}
50
}
51
52
for
(
int
idx = 45; idx <
TMP_LUT_SIZE
; ++idx) {
53
if
(tmp_lut[idx] == 1) {
54
int
i
= 2 * idx + 1;
55
double
cbrt_val =
i
*
cbrt
(
i
);
56
for
(
int
idx2 = idx; idx2 <
TMP_LUT_SIZE
; idx2 +=
i
)
57
tmp_lut[idx2] *= cbrt_val;
58
}
59
}
60
}
libm.h
TMP_LUT_SIZE
#define TMP_LUT_SIZE
Definition:
cbrt_data.h:42
cbrt
#define cbrt
Definition:
tablegen.h:35
av_cold
#define av_cold
Definition:
attributes.h:106
ff_cbrt_dbl_tableinit
av_cold void ff_cbrt_dbl_tableinit(double tmp_lut[TMP_LUT_SIZE])
Creates a LUT (of doubles) for the powers of the odd integers: tmp_lut[idx] will be set to (2 * idx +...
Definition:
cbrt_tablegen_common.c:31
attributes.h
cbrt_data.h
i
#define i(width, name, range_min, range_max)
Definition:
cbs_h2645.c:256
LUT_SIZE
#define LUT_SIZE
Definition:
bgmc.c:40
Generated on Thu Oct 16 2025 19:21:59 for FFmpeg by
1.8.17