Libav directory structure

Libav is a fairly large project, and is divided fairly cleanly into various parts. Here's a brief description.

Root directory

Building

Libav uses autoconf, and has a configure script and a Makefile, as well as arch.mak, common.mak, and library.mak.

Main tools

Libav ships with several tools, such as avplay and avconv, which serves as thin wrapper that makes use the library of the code. Files: avconv.c avconv_dxva2.c avconv_filter.c avconv.h avconv_opt.c avconv_vda.c avconv_vdpau.c avplay.c avprobe.c cmdutils.c cmdutils_common_opts.h cmdutils.h - and the deprecated avserver.c.

Licensing

There's a License file, and COPYING.GPLv2, COPYING.GPLv3, COPYING.LGPLv2.1, and COPYING.LGPLv3.

Documentation

As is conventional in a Unix-y open source project, there is a README file, an INSTALL file, and a Changelog. RELEASE contains the version. CREDITS is a no-longer-updated partial list of contributors. version.sh checks when the version has updated.

compat

Bridge compatibility issues between various operating systems, including Windows, Plan 9, and AIX.

doc

The source for some of Libav's documentation ( https://libav.org/documentation.html ) is here as texi files, as well as a git howto.

APIchanges avserver.texi decoders.texi doxy-wrapper.sh fate.texi indevs.texi muxers.texi print_options.c swscale.txt avconv.texi avtools-common-opts.texi demuxers.texi encoders.texi filters.texi libavfilter.texi nut.texi protocols.texi t2h.init avplay.texi avutil.txt developer.texi eval.texi general.texi Makefile optimization.txt rate_distortion.txt tablegen.txt avprobe.texi bitstream_filters.texi doxy examples git-howto.texi metadata.texi outdevs.texi RELEASE_NOTES texi2pod.pl avserver.conf build_system.txt Doxyfile faq.texi git-howto.txt multithreading.txt platform.texi soc.txt viterbi.txt

libraries

Libav is mostly focused in providing libraries to be reused.

libavcodec

Code to implement various codecs, such as aac, ac3, h264, vorbis, wma, and many others. It also contains architecture-specific directories for optimized code, often in assembly.

libavdevice

Deals with various capture and playback pseudo-demuxers abstracting platform-specific interfaces, such as ALSA, Jack, OSS, and PulseAudio for sound and framebuffers and X11 for video.

libavfilter

Source for audio and video filters, chainable code which add to or alter the audio and/or video streams. See the libavfilter documentation of what individual filters do.

libavformat

Support for various container formats, such as ASF, Ogg, Matroska, RealMedia, etc. By convention, source files that demux containers often end with dec.c, and muxers often end with enc.c. Formats are registered in allformats.c. Oddly, some utility code is also in this directory, for handling udp, unix sockets, urls, os_support.c, etc. A large amount of documentation is autogenerated by doxygen.

libavresample

Resampling (changing the sample rate of audio streams), including platform-specific assembler to make it faster.

libavutil

Utility code, for handling files, strings, logs, memory, random seeds, trees, hash functions, etc. Beware: not all utility code is in this subdirectory.

libswscale

This deals with pixel formats (rgb and yuv), colorspaces, etc, as well as scaling. Soon superceeded by libavscale.

presets

Encoding presets, most of them related to libvpx and libx264.

tests

This is mainly FATE tests - see [FATE] for more details.

tools

Various small tools. aviocat.c cws2fws.c graph2dot.c ismindex.c patcheck pktdumper.c probetest.c qt-faststart.c trasher.c