README
January 11, 2024 ยท View on GitHub
This is gavl, a common support library for other packages of the gmerlin project. It is developed in Linux (PC and Raspberry Pi 4).
Porting it to non-Linux platforms might cause major headaches. Since it's a one-man project, I gave up on not using the great Linux/glibc/gcc features only because other OSes (which I never use) don't have them.
Read the file INSTALL for detailed installation instructions.
The original purpose was to provide data structures and routines for handling uncompressed audio- and video data. Over the years it became a central repository for code, which is shared by the gmerlin package and the gmerlin-avdecoder library. It's main purpose is to make the gmerlin-avdecoder library independent from the (huge) gmerlin package.
In the future, more stuff might get moved from libgmerlin to libgavl.
Below is (probably incomplete) list of contained modules:
-
Handling of uncompressed audio and video data (gavl.h)
-
Handling of compressed audio and video data (compression.h)
-
Handling of A/V data stored in special ways for hardware acceleration (hw*.h)
-
Connectors (source and sink) for compressed and uncompressed A/V data. They usually work in zero-copy mode but can also do implicit A/V conversions when necessary (connectors.h)
-
Polymorphic data containers with high-level types like arrays and dictionaries. These are used throughout the whole gmerlin project for non A/V data like metadata or configuration data (value.h). Libgmerlin contains serializations for XML and JSON so complex data structures can be saved to or loaded from files in one function call.
-
Generic socket support code (gavlsocket.h)
-
An http-client with support for:
- Non-blocking I/O for background downloading without a separate thread
- Redirection
- https (via gnutls)
- Seeking (httpclient.h)
-
An experimental A/V container format for internal usage, currently unused and probably not functional (gavf/gavf.h)
-
A message structure used throughout the whole gmerlin project for communication, both inside the applications and between them. libgmerlin contains a serialization for JSON and a message queue for robust inter-thread communication.
-
Logging support (log.h)
-
Lots of utility functions (util.h)