1) API ------ * libavcodec is the library containing the codecs (both encoding and decoding). See libavcodec/apiexample.c to see how to use it. * libav is the library containing the file formats handling (mux and demux code for several formats). (no example yet, the API is likely to evolve). 2) Integrating libavcodec or libav in your GPL'ed program --------------------------------------------------------- You can integrate all the source code of the libraries to link them statically to avoid any version problem. All you need is to provide a 'config.mak' and a 'config.h' in the parent directory. See the defines generated by ./configure to understand what is needed. 3) Coding Rules --------------- ffmpeg is programmed in ANSI C language. GCC extensions are tolerated. Indent size is 4. The TAB character should not be used. The presentation is the one specified by 'indent -i4 -kr'. Main priority in ffmpeg is simplicity and small code size (=less bugs). Comments: for functions visible from other modules, use the JavaDoc format (see examples in libav/utils.c) so that a documentation can be generated automatically. 4) Submitting patches --------------------- When you submit your patch, try to send a unified diff (diff '-u' option). I cannot read other diffs :-) Run the regression tests before submitting a patch so that you can verify that there is no big problems. Except if your patch is really big and adds an important feature, by submitting it to me, you accept implicitely to put it under my copyright. I prefer to do this to avoid potential problems if licensing of ffmpeg changes. 5) Regression tests ------------------- Before submitting a patch (or commiting with CVS), you should at least test that you did not break anything. The regression test build a synthetic video stream and a synthetic audio stream. Then there are encoded then decoded with all codecs or formats. The CRC (or MD5) of each generated file is recorded in a result file. Then a 'diff' is launched with the reference results and the result file. Run 'make test' to test all the codecs. Run 'make libavtest' to test all the codecs. [Of course, some patches may change the regression tests results. In this case, the regression tests reference results shall be modified accordingly].