LADI
/
spa
1
Fork 0
LADI repository for SPA (Simple Plugin API)
Go to file
Nedko Arnaudov 1728128269 Add GNUmakefile to generate README.html 2023-05-28 18:45:03 +03:00
.gitlab gitlab-ci: move check_missing_headers into its own job and hide the script 2022-10-18 17:19:28 +03:00
doc doc: fix pod sizes 2023-05-23 09:30:36 +02:00
include/valgrind fix codespell issues 2021-10-07 15:26:18 +00:00
man man: update man page some more 2023-05-15 13:31:13 +02:00
pipewire-alsa pipewire-alsa: Propagate stream errors 2023-04-25 17:04:54 +02:00
pipewire-jack jack: also allow signaling ourselves. 2023-05-22 12:15:01 +02:00
pipewire-v4l2 handle some error cases 2023-03-16 12:28:29 +01:00
po Replace ru.po 2023-04-06 08:05:44 +00:00
spa bluez5: do not delay transport release if it is not active 2023-05-26 07:17:51 +00:00
src impl-node: improve stats 2023-05-25 20:22:49 +02:00
subprojects meson: allow building libcamera from source as a subproject 2023-02-10 09:21:58 +00:00
test test: test-logger: fix systemd journal usage 2023-05-22 08:05:39 +00:00
.codespell-ignore .codespell-ignore: update to current codebase 2021-10-07 15:26:18 +00:00
.editorconfig editorconfig: add xml files for the man pages 2021-05-20 07:34:17 +00:00
.gitignore meson: allow building libcamera from source as a subproject 2023-02-10 09:21:58 +00:00
.gitlab-ci.yml gitlab-ci: hopefully fix the CI failures after base image bumps 2023-04-18 08:47:28 +00:00
CODE_OF_CONDUCT.md Add a code of coduct 2019-11-08 13:57:36 +05:30
COPYING Relicense as MIT/X11 2018-11-05 17:48:52 +01:00
GNUmakefile Add GNUmakefile to generate README.html 2023-05-28 18:45:03 +03:00
INSTALL.md INSTALL.md: add note about uninstallation 2022-06-15 19:11:50 +00:00
LICENSE 0.3.28 2021-05-19 10:11:36 +02:00
Makefile.in pipewire: use dlclose unless PIPEWIRE_DLCLOSE is set to false 2022-12-12 17:11:04 +01:00
NEWS 0.3.71 2023-05-17 12:33:51 +02:00
README.adoc replace PipeWire's README with one for SPA 2023-05-28 18:44:56 +03:00
autogen.sh Replace Pipewire with PipeWire for consistency 2021-07-14 16:56:54 +10:00
meson.build 0.3.71 2023-05-17 12:33:51 +02:00
meson_options.txt module-rtp: add opus encoding 2023-03-12 18:40:36 +01:00
pw-uninstalled.sh pw-uninstalled: make v4l2 easily available 2022-11-08 20:45:50 +00:00
template.test.in Optionally install examples and tests 2020-06-16 17:58:02 +00:00

README.adoc

Project overview

This is project of maintaining PipeWires SPA as SPA-only SDK codebase.

SPA (Simple Plugin API)

SPA (Simple Plugin API) is an extensible API to implement all kinds of plugins.

It is inspired by many other plugin APIs, mostly LV2 and GStreamer. SPA provides two parts:

  • A header-only API with no external dependencies.

  • A set of support libraries ("plugins") for commonly used functionality.

The usual approach is that PipeWire and PipeWire clients can use the header-only functions to interact with the plugins. Those plugins are usually loaded at runtime (through dlopen(3)).

Motivation

SPA was designed with the following goals in mind:

  • No dependencies, SPA is shipped as a set of header files that have no dependencies except for the standard C library.

  • Very efficient both in space and in time.

  • Very configurable and usable in many different environments. All aspects of the plugin environment can be configured and changed, like logging, poll loops, system calls, etc.

  • Consistent API.

  • Extensible; new API can be added with minimal effort, existing API can be updated and versioned.

The original user of SPA is PipeWire, which uses SPA to implement the low-level multimedia processing plugins, device detection, mainloops, CPU detection, logging, among other things. SPA however can be used outside of PipeWire with minimal problems.

The SPA Header-Only API

A very simple example on how SPA headers work are the Utilities, a set of utilities commonly required by C projects. SPA functions use the spa_ namespace and are easy to identify.

spa-test.c

SPA Plugins

SPA plugins are shared libraries (.so files) that can be loaded at runtime. Each library provides one or more "factories", each of which may implement several "interfaces". Code that uses SPA plugins then uses those interfaces (through SPA header files) to interact with the plugin.

For example, the PipeWire daemon can load the normal printf-based logger or a systemd journal-based logger. Both of those provide the Log interface and once instantiated, PipeWire no longer has to differentiate between the two logging facilities.

Please see SPA Plugins for the details on how to use SPA plugins.

Contact

For LADI specific issues, submit issues or pull request to LADI project. For related discussions, you are invited to join Libera.Chat channel #ladi

Important Do not submit LADI specific issues to PipeWire project.