Revision 7087ce08 libavcodec/costablegen.c

View differences:

libavcodec/costablegen.c
29 29
#endif
30 30
#define BITS 16
31 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
}
32 49

  
33 50
int main(int argc, char *argv[])
34 51
{
35 52
    int i, j;
36
    int do_sin = argc == 2 && !strcmp(argv[1], "sin");
53
    int do_sin = argc > 1 && !strcmp(argv[1], "sin");
54
    int fixed  = argc > 2 && !strcmp(argv[2], "fixed");
37 55
    double (*func)(double) = do_sin ? sin : cos;
38 56

  
39 57
    printf("/* This file was generated by libavcodec/costablegen */\n");
58
    printf("#define CONFIG_FFT_FLOAT %d\n", !fixed);
40 59
    printf("#include \"libavcodec/%s\"\n", do_sin ? "rdft.h" : "fft.h");
41 60
    for (i = 4; i <= BITS; i++) {
42 61
        int m = 1 << i;
......
46 65
            int idx = j > m/4 ? m/2 - j : j;
47 66
            if (do_sin && j >= m/4)
48 67
                idx = m/4 - j;
49
            printf(" "FLOATFMT",", func(idx*freq));
68
            printval(func(idx*freq), fixed);
50 69
            if ((j & 3) == 3)
51 70
                printf("\n   ");
52 71
        }
53
        printf(" "FLOATFMT"\n};\n", func(do_sin ? -(m/4 - 1)*freq : freq));
72
        printval(func(do_sin ? -(m/4 - 1)*freq : freq), fixed);
73
        printf("\n};\n");
54 74
    }
55 75
    return 0;
56 76
}

Also available in: Unified diff