Statistics
| Branch: | Revision:

ffmpeg / libavcodec / tableprint.h @ 8de0859b

History | View | Annotate | Download (3.16 KB)

1
/*
2
 * Generate a file for hardcoded tables
3
 *
4
 * Copyright (c) 2009 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
#ifndef AVCODEC_TABLEPRINT_H
24
#define AVCODEC_TABLEPRINT_H
25

    
26
#include <stdint.h>
27
#include <stdio.h>
28

    
29
#define WRITE_1D_FUNC_ARGV(name, type, linebrk, fmtstr, ...)\
30
void write_##name##_array(const void *arg, int len, int dummy)\
31
{\
32
    const type *data = arg;\
33
    int i;\
34
    printf("   ");\
35
    for (i = 0; i < len - 1; i++) {\
36
       printf(" "fmtstr",", __VA_ARGS__);\
37
       if ((i & linebrk) == linebrk) printf("\n   ");\
38
    }\
39
    printf(" "fmtstr"\n", __VA_ARGS__);\
40
}
41

    
42
#define WRITE_1D_FUNC(name, type, fmtstr, linebrk)\
43
    WRITE_1D_FUNC_ARGV(name, type, linebrk, fmtstr, data[i])
44

    
45
#define WRITE_2D_FUNC(name, type)\
46
void write_##name##_2d_array(const void *arg, int len, int len2)\
47
{\
48
    const type *data = arg;\
49
    int i;\
50
    printf("    {\n");\
51
    for (i = 0; i < len; i++) {\
52
        write_##name##_array(data + i * len2, len2, 0);\
53
        printf(i == len - 1 ? "    }\n" : "    }, {\n");\
54
    }\
55
}
56

    
57
/**
58
 * \defgroup printfuncs Predefined functions for printing tables
59
 *
60
 * \{
61
 */
62
void write_int8_array     (const void *, int, int);
63
void write_uint8_array    (const void *, int, int);
64
void write_uint16_array   (const void *, int, int);
65
void write_uint32_array   (const void *, int, int);
66
void write_float_array    (const void *, int, int);
67
void write_int8_2d_array  (const void *, int, int);
68
void write_uint8_2d_array (const void *, int, int);
69
void write_uint32_2d_array(const void *, int, int);
70
/** \} */ // end of printfuncs group
71

    
72
struct tabledef {
73
    /** String that declares the array. Adding " = { ..." after it should
74
     * make a valid initializer, adding "extern" before and ";" if possible
75
     * should make a valid extern declaration. */
76
    const char *declaration;
77
    /** Function used to print the table data (i.e. the part in {}).
78
     * Should be one of the predefined write_*_array functions. */
79
    void (*printfunc)(const void *, int, int);
80
    /** Pointer passed to the printfunc, usually a pointer to the start
81
     * of the array to be printed. */
82
    const void *data;
83
    int size;   ///< size of the first dimension of the array
84
    int size2;  ///< size of the second dimension of the array if any
85
};
86

    
87
/** Initializes all the tables described in the tables array */
88
void tableinit(void);
89
/** Describes the tables that should be printed */
90
extern const struct tabledef tables[];
91

    
92
#endif /* AVCODEC_TABLEPRINT_H */