mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-11-21 10:55:51 +02:00
Add some documentation about the table generation code.
Originally committed as revision 22722 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
5b9c11ff96
commit
4f798a6ab2
57
doc/tablegen.txt
Normal file
57
doc/tablegen.txt
Normal file
@ -0,0 +1,57 @@
|
||||
Writing a table generator
|
||||
|
||||
This documentation is preliminary.
|
||||
Parts of the API are not good and should be changed.
|
||||
|
||||
Basic concepts
|
||||
|
||||
A table generator consists of two files, *_tablegen.c and *_tablegen.h.
|
||||
The .h file will provide the variable declarations and initialization
|
||||
code for the tables, the .c describes the tables so they can be printed
|
||||
as a header file.
|
||||
Both of these files will be compiled for the host system, so to avoid
|
||||
breakage with cross-compilation neither of them may include, directly
|
||||
or indirectly, config.h or avconfig.h.
|
||||
Due to this, the .c file or Makefile may have to provide additional defines
|
||||
or stubs, though if possible this should be avoided.
|
||||
|
||||
The .c file
|
||||
|
||||
This file should include the *_tablegen.h and tableprint.h files and
|
||||
anything else it needs as long as it does not depend on config.h or
|
||||
avconfig.h.
|
||||
In addition to that it must contain a void tableinit(void) function
|
||||
which initializes all tables by calling the init functions from the .h
|
||||
file.
|
||||
It must also contain a "const struct tabledef tables[]" array describing
|
||||
the tables to be generated.
|
||||
Its entries consist of (in order):
|
||||
- a string suitable for declaring the table, up to but not including the =
|
||||
NULL terminates the table
|
||||
- a function to print the table - tableprint.h defines some defaults,
|
||||
e.g. write_uint8_array to print a uint8_t array.
|
||||
- a pointer to the table
|
||||
- the size of the first dimension of the array
|
||||
- if applicable, the size of the second dimension of the array
|
||||
|
||||
The .h file
|
||||
|
||||
This file should contain:
|
||||
- one or more initialization functions
|
||||
- the table variable declarations
|
||||
If CONFIG_HARDCODED_TABLES is set, the initialization functions should
|
||||
not do anything, and instead of the variable declarations the
|
||||
generated *_tables.h file should be included.
|
||||
Since that will be generated in the build directory, the path must be
|
||||
included, i.e.
|
||||
#include "libavcodec/example_tables.h"
|
||||
not
|
||||
#include "example_tables.h"
|
||||
|
||||
Makefile changes
|
||||
|
||||
To make the automatic table creation work, you must manually declare the
|
||||
new dependency.
|
||||
For this add a line similar to this:
|
||||
$(SUBDIR)example.o: $(SUBDIR)example_tables.h
|
||||
under the "ifdef CONFIG_HARDCODED_TABLES" section in the Makefile.
|
Loading…
Reference in New Issue
Block a user