mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-10-29 05:40:27 -04:00
doc: switch from .md to .dox files and impose some general structure
This is an attempt of breaking up the documentation, currently spread across several pages. We're left with a few high-level topics with various things grouped underneath those. Further refinement is necessary, but this can now be done in incremental steps over massive reworks.
This commit is contained in:
parent
13bb152840
commit
b64f0d581f
17 changed files with 189 additions and 134 deletions
8
doc/api.dox
Normal file
8
doc/api.dox
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
/** \page page_api API Documentation
|
||||||
|
|
||||||
|
The API consists of two parts:
|
||||||
|
|
||||||
|
- The \subpage page_core_api to access a PipeWire instance.
|
||||||
|
- The \subpage page_implementation_api and tools to build new objects and modules
|
||||||
|
|
||||||
|
*/
|
||||||
35
doc/index.dox
Normal file
35
doc/index.dox
Normal file
|
|
@ -0,0 +1,35 @@
|
||||||
|
/** \mainpage PipeWire
|
||||||
|
|
||||||
|
PipeWire is low-level multimedia framework that provides:
|
||||||
|
- Graph based processing
|
||||||
|
- Support for out-of-process processing graphs with minimal overhead
|
||||||
|
- Flexible and extensible media format negotiation and buffer allocation
|
||||||
|
- Hard real-time capable plugins
|
||||||
|
- Very low-latency for both audio and video processing
|
||||||
|
|
||||||
|
See \ref page_overview for an overview of PipeWire and \ref page_design
|
||||||
|
for the design principles guiding PipeWire.
|
||||||
|
|
||||||
|
### Components
|
||||||
|
|
||||||
|
PipeWire ships with the following components:
|
||||||
|
|
||||||
|
- a \ref page_daemon that implements the IPC and graph processing
|
||||||
|
- an example \ref page_session_manager that manages objects in the \ref page_daemon
|
||||||
|
- a set of \ref page_tools to introspect and use the \ref page_daemon
|
||||||
|
- a \ref page_library to develop PipeWire applications and plugins (\ref
|
||||||
|
page_tutorial "tutorial").
|
||||||
|
- the \ref page_spa used by both the \ref page_daemon and in the \ref
|
||||||
|
page_library.
|
||||||
|
|
||||||
|
### API Documentation
|
||||||
|
|
||||||
|
See \ref page_api
|
||||||
|
|
||||||
|
|
||||||
|
### Resources
|
||||||
|
|
||||||
|
* [LAC 2020 Paper](https://lac2020.sciencesconf.org/307881/document)
|
||||||
|
|
||||||
|
|
||||||
|
*/
|
||||||
16
doc/index.md
16
doc/index.md
|
|
@ -1,16 +0,0 @@
|
||||||
# PipeWire Documentation
|
|
||||||
|
|
||||||
Start with the [overview](overview.md) of PipeWire.
|
|
||||||
|
|
||||||
Some notes about the [architecture](architecture.md) can be
|
|
||||||
found here.
|
|
||||||
|
|
||||||
Start the tutorial about how to use the PipeWire API
|
|
||||||
[here](tutorial-index.md).
|
|
||||||
|
|
||||||
Notes about the design of the low-level [SPA](spa-design.md)
|
|
||||||
layer.
|
|
||||||
|
|
||||||
Some Resources:
|
|
||||||
|
|
||||||
* [LAC 2020 Paper](https://lac2020.sciencesconf.org/307881/document)
|
|
||||||
|
|
@ -43,11 +43,18 @@ else
|
||||||
spa_strip_static = []
|
spa_strip_static = []
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
# Note: order here is how doxygen will expose the pages in the sidebar
|
||||||
extra_docs = [
|
extra_docs = [
|
||||||
'pipewire-overview.md',
|
'index.dox',
|
||||||
'pipewire-design.md',
|
'pipewire.dox',
|
||||||
'pipewire-architecture.md',
|
'pipewire-overview.dox',
|
||||||
'pipewire-objects-design.md',
|
'pipewire-design.dox',
|
||||||
|
'pipewire-daemon.dox',
|
||||||
|
'pipewire-library.dox',
|
||||||
|
'pipewire-tools.dox',
|
||||||
|
'pipewire-session-manager.dox',
|
||||||
|
'pipewire-objects-design.dox',
|
||||||
|
'api.dox',
|
||||||
'tutorial.dox',
|
'tutorial.dox',
|
||||||
'tutorial1.dox',
|
'tutorial1.dox',
|
||||||
'tutorial2.dox',
|
'tutorial2.dox',
|
||||||
|
|
@ -59,7 +66,7 @@ extra_docs = [
|
||||||
'spa-design.dox',
|
'spa-design.dox',
|
||||||
'spa-pod.dox',
|
'spa-pod.dox',
|
||||||
'spa-buffer.dox',
|
'spa-buffer.dox',
|
||||||
'pulseaudio.md',
|
'pulseaudio.dox',
|
||||||
]
|
]
|
||||||
|
|
||||||
foreach extra : extra_docs
|
foreach extra : extra_docs
|
||||||
|
|
|
||||||
0
doc/pipewire-architecture.dox
Normal file
0
doc/pipewire-architecture.dox
Normal file
43
doc/pipewire-daemon.dox
Normal file
43
doc/pipewire-daemon.dox
Normal file
|
|
@ -0,0 +1,43 @@
|
||||||
|
/** \page page_daemon PipeWire Daemon
|
||||||
|
|
||||||
|
|
||||||
|
\section sec_logging Logging
|
||||||
|
|
||||||
|
The `PIPEWIRE_DEBUG` environment variable can be used to enable
|
||||||
|
more debugging. The format is:
|
||||||
|
|
||||||
|
`<level>[<category>;...]`
|
||||||
|
|
||||||
|
- `<level>` specifies the log level:
|
||||||
|
+ `0`: no logging is enabled
|
||||||
|
+ `1`: Error logging is enabled
|
||||||
|
+ `2`: Warnings are enabled
|
||||||
|
+ `3`: Informational messages are enabled
|
||||||
|
+ `4`: Debug messages are enabled
|
||||||
|
+ `5`: Trace messages are enabled. These messages can be logged
|
||||||
|
from the realtime threads.
|
||||||
|
|
||||||
|
- `<category>`: Specifies a string category to enable. Many categories
|
||||||
|
can be separated by commas. Current categories are:
|
||||||
|
+ `connection`: to log connection messages
|
||||||
|
|
||||||
|
|
||||||
|
\subsection sec_errors Error reporting
|
||||||
|
|
||||||
|
Functions return either NULL with errno set or a negative int error
|
||||||
|
code when an error occurs. Error codes are used from the SPA plugin
|
||||||
|
library on which PipeWire is built.
|
||||||
|
|
||||||
|
Some functions might return asynchronously. The error code for such
|
||||||
|
functions is positive and SPA_RESULT_IS_ASYNC() will return true.
|
||||||
|
SPA_RESULT_ASYNC_SEQ() can be used to get the unique sequence number
|
||||||
|
associated with the async operation.
|
||||||
|
|
||||||
|
The object returning the async result code will have some way to
|
||||||
|
signal the completion of the async operation (with, for example, a
|
||||||
|
callback). The sequence number can be used to see which operation
|
||||||
|
completed.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
PipeWire
|
/** \page page_design PipeWire Design
|
||||||
--------
|
|
||||||
|
|
||||||
PipeWire is a media server that can run graphs of multimedia nodes.
|
PipeWire is a media server that can run graphs of multimedia nodes.
|
||||||
Nodes can run inside the server or in separate processes.
|
Nodes can run inside the server or in separate processes.
|
||||||
|
|
@ -69,3 +68,5 @@ Some of the extensions that can be written
|
||||||
- a module to automatically create or link or relink nodes
|
- a module to automatically create or link or relink nodes
|
||||||
|
|
||||||
- a module to suspend idle nodes
|
- a module to suspend idle nodes
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
# PipeWire Architecture
|
/** \page page_library PipeWire Library
|
||||||
|
|
||||||
There are 2 main components that make up the PipeWire library:
|
There are 2 main components that make up the PipeWire library:
|
||||||
|
|
||||||
|
|
@ -34,7 +34,7 @@ described in an external protocol file but implemented directly in
|
||||||
a protocol plugin. Protocol plugins can be added to add new
|
a protocol plugin. Protocol plugins can be added to add new
|
||||||
objects or even protocols when required.
|
objects or even protocols when required.
|
||||||
|
|
||||||
Messages are encoded with [SPA PODs](spa-pod.md), which make it
|
Messages are encoded with \ref page_spa_pod, which make it
|
||||||
possible to encode complex objects with right types.
|
possible to encode complex objects with right types.
|
||||||
|
|
||||||
Events from the server can be a reply to a method or can be emitted
|
Events from the server can be a reply to a method or can be emitted
|
||||||
|
|
@ -219,3 +219,6 @@ data unless they can see the objects and connect to them.
|
||||||
|
|
||||||
PipeWire also exposes an API to implement the server side objects in
|
PipeWire also exposes an API to implement the server side objects in
|
||||||
a graph.
|
a graph.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
# PipeWire Objects Design
|
/** \page page_objects_design PipeWire Objects Design
|
||||||
|
|
||||||
This document is a design reference on the various objects that exist
|
This document is a design reference on the various objects that exist
|
||||||
in the PipeWire media and session management graphs, explaining what these
|
in the PipeWire media and session management graphs, explaining what these
|
||||||
|
|
@ -329,3 +329,5 @@ JACK server as a client is out of scope here.
|
||||||
|
|
||||||
JACK clients do not create endpoints. A session manager should be JACK aware
|
JACK clients do not create endpoints. A session manager should be JACK aware
|
||||||
in order to anticipate direct node linking
|
in order to anticipate direct node linking
|
||||||
|
|
||||||
|
*/
|
||||||
42
doc/pipewire-overview.dox
Normal file
42
doc/pipewire-overview.dox
Normal file
|
|
@ -0,0 +1,42 @@
|
||||||
|
/** \page page_overview PipeWire Overview
|
||||||
|
|
||||||
|
PipeWire is a new low-level multimedia framework designed from scratch that
|
||||||
|
aims to provide
|
||||||
|
|
||||||
|
- graph based processing
|
||||||
|
- support for out-of-process processing graphs with minimal overhead
|
||||||
|
- flexible and extensible media format negotiation and buffer allocation
|
||||||
|
- Hard real-time capable plugins
|
||||||
|
- achieve very low-latency for both audio and video processing
|
||||||
|
|
||||||
|
The framework is used to build a modular daemon that can be configured to:
|
||||||
|
|
||||||
|
- be a low-latency audio server with features like pulseaudio and/or jack
|
||||||
|
- a video capture server that can manage hardware video capture devices and
|
||||||
|
provide access to them
|
||||||
|
- a central hub where video can be made available for other applications
|
||||||
|
such as the gnome-shell screencast API.
|
||||||
|
|
||||||
|
|
||||||
|
## Motivation
|
||||||
|
|
||||||
|
Linux has no unified framework for exchanging multimedia content between
|
||||||
|
applications or even devices. In most cases, developers realized that
|
||||||
|
a user-space daemon is needed to make this possible:
|
||||||
|
|
||||||
|
- For video content, we typically rely on the compositor to render our
|
||||||
|
data.
|
||||||
|
- For video capture, we usually go directly to the hardware devices, with
|
||||||
|
all security implications and inflexible routing that this brings.
|
||||||
|
- For consumer audio, we use PulseAudio to manage and mix multiple streams
|
||||||
|
from clients
|
||||||
|
- For Pro audio, we use JACK to manage the graph of nodes.
|
||||||
|
|
||||||
|
None of these solutions (except perhaps to some extent Wayland), however,
|
||||||
|
were designed to support the security features that are required when
|
||||||
|
dealing with flatpaks or other containerized applications. PipeWire
|
||||||
|
aims to solve this problem and provides a unified framework to run both
|
||||||
|
consumer and Pro audio as well as video capture and processing in a
|
||||||
|
secure way.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
@ -1,58 +0,0 @@
|
||||||
# PipeWire Overview
|
|
||||||
|
|
||||||
PipeWire is a new low-level multimedia framework designed from scratch that
|
|
||||||
aims to provide
|
|
||||||
|
|
||||||
* graph based processing
|
|
||||||
* support for out-of-process processing graphs with minimal overhead
|
|
||||||
* flexible and extensible media format negotiation and buffer allocation
|
|
||||||
* Hard real-time capable plugins
|
|
||||||
* achieve very low-latency for both audio and video processing
|
|
||||||
|
|
||||||
The framework is used to build a modular daemon that can be configured to:
|
|
||||||
|
|
||||||
* be a low-latency audio server with features like pulseaudio and/or jack
|
|
||||||
* a video capture server that can manage hardware video capture devices and
|
|
||||||
provide access to them
|
|
||||||
* a central hub where video can be made available for other applications
|
|
||||||
such as the gnome-shell screencast API.
|
|
||||||
|
|
||||||
## Motivation
|
|
||||||
|
|
||||||
Linux has no unified framework for exchanging multimedia content between
|
|
||||||
applications or even devices. In most cases, developers realized that
|
|
||||||
a user-space daemon is needed to make this possible:
|
|
||||||
|
|
||||||
* For video content, we typically rely on the compositor to render our
|
|
||||||
data.
|
|
||||||
* For video capture, we usually go directly to the hardware devices, with
|
|
||||||
all security implications and inflexible routing that this brings.
|
|
||||||
* For consumer audio, we use PulseAudio to manage and mix multiple streams
|
|
||||||
from clients
|
|
||||||
* For Pro audio, we use JACK to manage the graph of nodes.
|
|
||||||
|
|
||||||
None of these solutions (except perhaps to some extent Wayland), however,
|
|
||||||
were designed to support the security features that are required when
|
|
||||||
dealing with flatpaks or other containerized applications. PipeWire
|
|
||||||
aims to solve this problem and provides a unified framework to run both
|
|
||||||
consumer and Pro audio as well as video capture and processing in a
|
|
||||||
secure way.
|
|
||||||
|
|
||||||
|
|
||||||
## Components
|
|
||||||
|
|
||||||
Currently PipeWire ships with the following components:
|
|
||||||
|
|
||||||
* a PipeWire daemon that implements the IPC and graph processing
|
|
||||||
* an example session manager that manages objects in the PipeWire
|
|
||||||
daemon.
|
|
||||||
* a set of tools to introspect and use the PipeWire daemon.
|
|
||||||
* a library to develop PipeWire applications and plugins.
|
|
||||||
|
|
||||||
### The PipeWire daemon
|
|
||||||
|
|
||||||
### The example session manager
|
|
||||||
|
|
||||||
### Tools
|
|
||||||
|
|
||||||
### Application development
|
|
||||||
4
doc/pipewire-session-manager.dox
Normal file
4
doc/pipewire-session-manager.dox
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
/** \page page_session_manager PipeWire Session Manager
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
4
doc/pipewire-tools.dox
Normal file
4
doc/pipewire-tools.dox
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
/** \page page_tools PipeWire Tools
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
25
doc/pipewire.dox
Normal file
25
doc/pipewire.dox
Normal file
|
|
@ -0,0 +1,25 @@
|
||||||
|
/** \page page_pipewire PipeWire
|
||||||
|
|
||||||
|
## Internals
|
||||||
|
|
||||||
|
- \subpage page_overview
|
||||||
|
- \subpage page_design
|
||||||
|
- \subpage page_streams
|
||||||
|
- \subpage page_client
|
||||||
|
- \subpage page_proxy
|
||||||
|
- \subpage page_thread_loop
|
||||||
|
- \subpage page_objects_design
|
||||||
|
|
||||||
|
## Components
|
||||||
|
|
||||||
|
- \subpage page_daemon
|
||||||
|
- \subpage page_library
|
||||||
|
- \subpage page_tools
|
||||||
|
- \subpage page_session_manager
|
||||||
|
- \ref page_spa
|
||||||
|
|
||||||
|
## Backends
|
||||||
|
|
||||||
|
- \subpage page_pulseaudio
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
/** \page page_pulseaudio PulseAudio compatibility
|
||||||
|
|
||||||
# Internals - Mapping between ALSA and streams
|
# Internals - Mapping between ALSA and streams
|
||||||
|
|
||||||
This explains the mapping between alsa cards and streams and session manager
|
This explains the mapping between alsa cards and streams and session manager
|
||||||
|
|
@ -66,3 +68,5 @@ the endpoint. This clashes with the notion that multiple streams can be
|
||||||
active at the same time but is a pulseaudio limitation.
|
active at the same time but is a pulseaudio limitation.
|
||||||
|
|
||||||
Each Endpoint destination becomes a port on the sink/source.
|
Each Endpoint destination becomes a port on the sink/source.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
/** \page page_tutorial Tutorial - The PipeWire API
|
/** \page page_tutorial Tutorial
|
||||||
|
|
||||||
Welcome to the PipeWire tutorial. The goal is to learn
|
Welcome to the PipeWire tutorial. The goal is to learn
|
||||||
PipeWire API step-by-step with simple short examples.
|
PipeWire API step-by-step with simple short examples.
|
||||||
|
|
|
||||||
|
|
@ -60,55 +60,6 @@ extern "C" {
|
||||||
#include <pipewire/utils.h>
|
#include <pipewire/utils.h>
|
||||||
#include <pipewire/version.h>
|
#include <pipewire/version.h>
|
||||||
|
|
||||||
/** \mainpage
|
|
||||||
*
|
|
||||||
* \section sec_intro Introduction
|
|
||||||
*
|
|
||||||
* This document describes the API for the PipeWire multimedia framework.
|
|
||||||
* The API consists of two parts:
|
|
||||||
*
|
|
||||||
* \li The core API to access a PipeWire instance.
|
|
||||||
* (See \subpage page_core_api)
|
|
||||||
* \li The implementation API and tools to build new objects and
|
|
||||||
* modules (See \subpage page_implementation_api)
|
|
||||||
*
|
|
||||||
* \section sec_errors Error reporting
|
|
||||||
*
|
|
||||||
* Functions return either NULL with errno set or a negative int error
|
|
||||||
* code when an error occurs. Error codes are used from the SPA plugin
|
|
||||||
* library on which PipeWire is built.
|
|
||||||
*
|
|
||||||
* Some functions might return asynchronously. The error code for such
|
|
||||||
* functions is positive and SPA_RESULT_IS_ASYNC() will return true.
|
|
||||||
* SPA_RESULT_ASYNC_SEQ() can be used to get the unique sequence number
|
|
||||||
* associated with the async operation.
|
|
||||||
*
|
|
||||||
* The object returning the async result code will have some way to
|
|
||||||
* signal the completion of the async operation (with, for example, a
|
|
||||||
* callback). The sequence number can be used to see which operation
|
|
||||||
* completed.
|
|
||||||
*
|
|
||||||
* \section sec_logging Logging
|
|
||||||
*
|
|
||||||
* The `PIPEWIRE_DEBUG` environment variable can be used to enable
|
|
||||||
* more debugging. The format is:
|
|
||||||
*
|
|
||||||
* `<level>[<category>;...]`
|
|
||||||
*
|
|
||||||
* - `<level>` specifies the log level:
|
|
||||||
* + `0`: no logging is enabled
|
|
||||||
* + `1`: Error logging is enabled
|
|
||||||
* + `2`: Warnings are enabled
|
|
||||||
* + `3`: Informational messages are enabled
|
|
||||||
* + `4`: Debug messages are enabled
|
|
||||||
* + `5`: Trace messages are enabled. These messages can be logged
|
|
||||||
* from the realtime threads.
|
|
||||||
*
|
|
||||||
* - `<category>`: Specifies a string category to enable. Many categories
|
|
||||||
* can be separated by commas. Current categories are:
|
|
||||||
* + `connection`: to log connection messages
|
|
||||||
*/
|
|
||||||
|
|
||||||
/** \defgroup pw_pipewire PipeWire initialization and infrastructure functions
|
/** \defgroup pw_pipewire PipeWire initialization and infrastructure functions
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue