ffmpeg / libavcodec / costablegen.c @ 7087ce08
History | View | Annotate | Download (2.26 KB)
1 |
/*
|
---|---|
2 |
* Generate a header file for hardcoded ff_cos_* tables
|
3 |
*
|
4 |
* Copyright (c) 2009 Reimar Döffinger <Reimar.Doeffinger@gmx.de>
|
5 |
*
|
6 |
* This file is part of Libav.
|
7 |
*
|
8 |
* Libav 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 |
* Libav 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 Libav; if not, write to the Free Software
|
20 |
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
21 |
*/
|
22 |
|
23 |
#include <stdio.h> |
24 |
#include <string.h> |
25 |
#include <math.h> |
26 |
|
27 |
#ifndef M_PI
|
28 |
#define M_PI 3.14159265358979323846 |
29 |
#endif
|
30 |
#define BITS 16 |
31 |
#define FLOATFMT "%.18e" |
32 |
#define FIXEDFMT "%6d" |
33 |
|
34 |
static int clip_f15(int v) |
35 |
{ |
36 |
return v < -32767 ? -32767 : |
37 |
v > 32767 ? 32767 : |
38 |
v; |
39 |
} |
40 |
|
41 |
static void printval(double val, int fixed) |
42 |
{ |
43 |
if (fixed)
|
44 |
printf(" "FIXEDFMT",", clip_f15(lrint(val * (double)(1<<15)))); |
45 |
else
|
46 |
printf(" "FLOATFMT",", val); |
47 |
|
48 |
} |
49 |
|
50 |
int main(int argc, char *argv[]) |
51 |
{ |
52 |
int i, j;
|
53 |
int do_sin = argc > 1 && !strcmp(argv[1], "sin"); |
54 |
int fixed = argc > 2 && !strcmp(argv[2], "fixed"); |
55 |
double (*func)(double) = do_sin ? sin : cos; |
56 |
|
57 |
printf("/* This file was generated by libavcodec/costablegen */\n");
|
58 |
printf("#define CONFIG_FFT_FLOAT %d\n", !fixed);
|
59 |
printf("#include \"libavcodec/%s\"\n", do_sin ? "rdft.h" : "fft.h"); |
60 |
for (i = 4; i <= BITS; i++) { |
61 |
int m = 1 << i; |
62 |
double freq = 2*M_PI/m; |
63 |
printf("%s(%i) = {\n ", do_sin ? "SINTABLE" : "COSTABLE", m); |
64 |
for (j = 0; j < m/2 - 1; j++) { |
65 |
int idx = j > m/4 ? m/2 - j : j; |
66 |
if (do_sin && j >= m/4) |
67 |
idx = m/4 - j;
|
68 |
printval(func(idx*freq), fixed); |
69 |
if ((j & 3) == 3) |
70 |
printf("\n ");
|
71 |
} |
72 |
printval(func(do_sin ? -(m/4 - 1)*freq : freq), fixed); |
73 |
printf("\n};\n");
|
74 |
} |
75 |
return 0; |
76 |
} |