Versioning and compatibility

Each of the FFmpeg libraries contains a version.h header, which defines a major, minor and micro version number with the LIBRARYNAME_VERSION_{MAJOR,MINOR,MICRO} macros. The major version number is incremented with backward incompatible changes - e.g. removing parts of the public API, reordering public struct members, etc. The minor version number is incremented for backward compatible API changes or major new features - e.g. adding a new public function or a new decoder. The micro version number is incremented for smaller changes that a calling program might still want to check for - e.g. changing behavior in a previously unspecified situation.

FFmpeg guarantees backward API and ABI compatibility for each library as long as its major version number is unchanged. This means that no public symbols will be removed or renamed. Types and names of the public struct members and values of public macros and enums will remain the same (unless they were explicitly declared as not part of the public API). Documented behavior will not change.

In other words, any correct program that works with a given FFmpeg snapshot should work just as well without any changes with any later snapshot with the same major versions. This applies to both rebuilding the program against new FFmpeg versions or to replacing the dynamic FFmpeg libraries that a program links against.

However, new public symbols may be added and new members may be appended to public structs whose size is not part of public ABI (most public structs in FFmpeg). New macros and enum values may be added. Behavior in undocumented situations may change slightly (and be documented). All those are accompanied by an entry in doc/APIchanges and incrementing either the minor or micro version number.