Gavl is the 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 application.
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.
Here are some key features of "Gavl":
· 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 individual timestamps)
· 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 libsamplerate
· High quality audio dithering using the builtin libgdither.
· 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 1000 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 convolution matrices.
What's New in This Release: [ read full changelog ]
· This version adds a generic metadata container, which is used by the gmerlin libraries.