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)