Skip to content
Snippets Groups Projects
README.dev 2.48 KiB
Newer Older
  • Learn to ignore specific revisions
  • Fabrice Bellard's avatar
    Fabrice Bellard committed
    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
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
    ---------------
    
    
    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'.
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
    
    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.
    
    Patches should be posted as base64 encoded attachments (or any other
    encoding which ensures that the patch wont be trashed during 
    transmission) to the ffmpeg-devel mailinglist, see 
    http://lists.sourceforge.net/lists/listinfo/ffmpeg-devel
    
    
    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].