Gavl is short for Gmerlin Audio Video Library. It is a low level library, upon which
multimedia APIs can be built. Gavl handles all the details of audio and video formats like
colorspaces, samplerates, multichannel configurations etc. It provides standardized definitions
for those formats as well as container structures for carrying audio samples or video images inside an
In addition, it handles the sometimes ugly task to convert between all these formats and provides some
elementary operations (copying, scaling, alpha blending etc).
Some programmers optimize their multimedia software for quality, others for speed. gavl has multiple
versions of the same routine and lets the user choose.
This can either be done by a simple integer quality <-> speed parameter (1..5) or by setting detailed
flags. Check the benchmarks for a detailed speed comparison.
- RGB and BGR formats: 15, 16, 24 and 32 bpp, 32 bpp RGBA, 48/64 bit RGB(A),
floating point RGB(A).
- Packed Y'CbCr formats: YUY2, UYVY, YUVA 4:4:4:4
- 8 bit planar Y'CbCr formats: 4:2:0, 4:2:2, 4:4:4, 4:1:1 and 4:1:0
- 16 bit planar Y'CbCr formats: 4:4:4 and 4:2:2.
- Packed floating point Y'CbCr and Y'CbCrA
- Grayscale formats (with or without alpha) in 8 bit, 16 bit or floating point precision.
- Supports both JPEG- and MPEG scaled Y'CbCr.
- Every pixelformat can be converted to every other
in a single function call (i.e. without the use of intermediate formats).
MMX accelerated conversion functions exist for many conversions.
- Alpha blending with user defined background color.
- Alpha blending of transparent overlays onto video frames. Like everything in gavl, this works
for all combinations of pixelformats.
- Native video scaling routines for all pixelformats (no intermediate conversions needed).
Available scaling algorithms are nearst
neighbour, bilinear, quadratic, cubic (Bspline, Mitchell, Catmul-Rom) and
Sinc with Lanczos window (arbitrary order). All methods work in all pixelformats directly.
Source and destination can be subrectangles of the images. Coordinates of the source window
can be floating point (i.e. with subpixel precision). Scaling routines for 8 bit pixelformats
are available as very fast MMX versions as well.
- Support for nonsquare pixels and nonconstant framerates (i.e. all video frames have
- Highly optimized copying routines for Audio and video frames (using MMX or SSE)
- Rectangle fitting routines, which preserve the display aspect ratio even if the source and
destination pixel aspect ratios are different. These can be used for calculating the coordinates
for the scaler.
- Audio PCM formats: 8 and 16 bit signed and unsigned, 32 bit signed,
32 and 64 bit floating point. Byte order is always machine native.
- Support for up to 128 audio channels (can easily be extended).
- Support for speaker configurations. Downmixing, upmixing and
reordering of channels is done automatically by the audio converter as long as the channel locations
of the input- and output format are known.
- Audio channels can be interleaved or not.
- High quality audio resampling using the built in
- High quality audio dithering using the builtin
- Generic time type (64 bit, us precision) and routines for
converting frame/sample counts to time values and vice versa.
A simple software timer is also included.
- The gavl container types fit smoothly to most audio/video/image APIs out there.
- More than 2000 conversion routines inside the library can be used with an API, which
consists of a few function calls.
- A well written application rarely has to deal with audio samples or video pixels
directly, since gavl will do most of the work for you.
- Multimedia libraries built upon gavl are compatible among each other.
An example for a general purpose gavl based multimedia
decoding library is gmerlin_avdecoder. Bindings for many
exisiting media APIs (e.g. libquicktime, Alsa, X11...) can be found in the gmerlin plugins.
- Generic convolution engine for video frames. Supported are arbitrary, x-y seperable
- Generic image
- varispeed capable standalone audio resampler
- Support for timecodes
Doxygen documentation can be found
What needs to be done
What will never be supported
The following things will never be supported, because they are beyond the scope of gavl:
You'll find implementations of these (on top of gavl) in other packages like gmerlin.
- A/V Filters
- Access to Sound- or Videocards
The official gavl sourcecode can be downloaded at the