Commit graph

826 commits

Author SHA1 Message Date
Robbert van der Helm
4419baec45 module-rt: Use magic value for user config prio
Instead of having the context priority hardcoded at 88.
2022-01-16 21:54:32 +01:00
Aleix Pol
8f9bd42d93 Document the unit on spa_meta_header::pts
It's nanoseconds
2022-01-13 18:13:29 +00:00
Wim Taymans
611591d0fc json: add spa_json_parse_stringn()
It also checks the destination size.
2022-01-04 12:37:00 +01:00
Wim Taymans
67dc97fa43 alsa: add audio.allowed-rates param
Add a construct and runtime param to limit the amount of allowed
samplerates used by the node.

Fixes #1932
2022-01-03 16:03:23 +01:00
Barnabás Pőcze
871ba61228 spa: pod: parser: add null terminator
If the supplied buffer has smaller (or equal) size than the
length of the string, then `strncpy()` will not place a null
terminator in the buffer.

Fix that by always setting the last byte of the buffer to zero.
2021-12-21 17:05:25 +01:00
Wim Taymans
d2ec680d3d spa: fix initializer for old GCC
Older gcc versions seem to require the members to appear in the
designated initializer in the order they are in the definition of
the struct when compiling C++.

Fixes #1910
2021-12-16 11:08:07 +01:00
Quantum
8bab9a18ec Add all 32-bit packed little endian 10-bit RGB colour formats
Given that 10-bit colour is now becoming supported on Wayland, PipeWire
should be able to represent all the possible colour formats in order
for screen capture to work.

This commit adds all possible orderings of 10-bit RGB channels and 2
extra bits used for nothing or alpha in little endian to enum
spa_video_format. Note that Wayland only uses little endian for its
10-bit colour formats, and these are not the same as the big endian
formats in reverse order.
2021-12-07 11:22:04 +00:00
Wim Taymans
97cad7284a latency: fix latency combine calculations
0 is a valid min latency so we can't use it as an unset value. Use
some large value instead and when nothing was configured, assume it
is 0.

Fixes #1839
2021-12-02 14:49:48 +01:00
Wim Taymans
2f82661966 spa: add description to PropInfo 2021-11-30 17:40:56 +01:00
Wim Taymans
b75796054c spa: include dict.h
It causes a compiler warning on armv7
2021-11-11 10:59:23 +01:00
Wim Taymans
b2c38a2b3b libcamera: work on rewrite
Use manager to hotplug devices
Use StreamConfig to enumerate formats
2021-11-03 17:49:10 +01:00
Aleix Pol
925644fbcc spa/meta: Expand the documentation of SPA_META_VideoDamage
A bit of explanation of how it's meant to be used.
2021-11-02 15:53:16 +01:00
Thomas Weißschuh
4921c5e94b defs: use intptr types where applicaple
Instead of doing pointer arithmetic through actual pointers, cast them
to the proper integer types.
This is functionally equivalent to the previous code but is clearer for
the compiler.

Fixes #1018
2021-11-02 09:54:10 +00:00
Wim Taymans
3471391e0e spa: add RequestProcess command and event
The event is emitted by a node that is not a driver but wants the graph
to be scheduled. The command is sent to the driver and suggest that the
graph be scheduled.
2021-10-27 11:16:53 +02:00
Wim Taymans
eea6e7a1fb spa: add method to check if an object is fixated
See #1732
2021-10-25 18:08:10 +02:00
Wim Taymans
1cacb64b19 node: make enum for TYPE_EVENT_Node properties 2021-10-19 15:21:10 +02:00
columbarius
07d0b14955 spa: specify SPA_FORMAT_VIDEO_MODIFIER as DMA-BUF only
SPA_FORMAT_VIDEO_MODIFIER is only valid with DMA-BUF transport.
For using other types of buffers omit this property.
2021-10-14 20:19:21 +02:00
Wim Taymans
85d5c8cd6c cpu: add zero_denormals method
Add a method to enable/disable the denormals flush-to-zero and
denormals-as-zero CPU options.

Add a config option to make it possible to disable this again.

Fixes high CPU usage when dealing with denormals, which can happen
in many DSP functions.

Fixes #1681
2021-10-11 14:57:02 +02:00
Wim Taymans
04344dad20 spa: add mjpg and h264 format build helpers 2021-10-08 13:21:07 +02:00
Björn Daase
cf38b7bdc4 fix codespell issues 2021-10-07 15:26:18 +00:00
Wim Taymans
466715672e log: fix logger fallback
The logt function should fall back when both the logger implementation
version is too low or when the method is not implemented.

We can use the new spa_callback_call return value to efficiently
handle this.
2021-10-07 10:15:21 +02:00
Wim Taymans
2435f0d7ff hook: we can use the spa_callbacks_call return value now
instead of reimplementing the check.
2021-10-07 10:14:43 +02:00
Wim Taymans
68748895ea hook: add spa_callbacks_check
That does a version and method check on the callbacks.
2021-10-07 10:13:06 +02:00
Wim Taymans
bb950976da hook: make spa_callbacks_call return true
Make spa_callbacks_call return true when the method could be called
succesfully. This means the callbacks version was correct and the
method existed.

This can then be used to implement a fallback.
2021-10-07 10:10:53 +02:00
Pauli Virtanen
49901f2d61 doc: add brief explanations for all groups 2021-10-04 20:55:04 +03:00
Pauli Virtanen
8159797f89 doc: reorganize Doxygen groups/modules to make more sense
The Doxygen "Modules" page is not very illuminative, as different parts
of the API are mixed together and not all parts are included.

Try to address this:

Put all parts of the public API to some Doxygen group, usually one group
per header file. Use short, systematic names.

Make these groups sub-groups of a few top-level groups, roughly
corresponding to the different logical parts of the API (core, impl,
stream, filter, spa, utilities).
2021-10-03 15:39:27 +03:00
Pauli Virtanen
de7f78f4bd doc: add \copydoc, \sa links for (struct methods) function/macros
Add manually cross-references for struct methods callback
macros/functions, in cases where they're too hard to parse for the
Doxygen input filter.
2021-10-03 14:12:49 +03:00
Peter Hutterer
fe79e684b7 spa: remove #define SPA_WEAK
This is a leftover from an earlier version of 0e60e9c063. The
attribute is not supported by clang at this time, so let's remove
the #define until we have a use-case that requires it.
2021-09-30 09:38:57 +10:00
Wim Taymans
a9c64e1609 fix versions of the log interface 2021-09-29 17:03:26 +02:00
Wim Taymans
b45d906dc4 support: increment methods version
Using the version of the .h files is always the latest.
2021-09-29 16:59:49 +02:00
Peter Hutterer
59a5791d41 spa: implement the new topic logging for the provided loggers
Both simple log implementation now support the new topic-based
functions, and so does the journal logger too.
2021-09-28 09:35:38 +02:00
Peter Hutterer
0e60e9c063 spa: add topic-based logging
Add a struct spa_log_topic that allows for logical grouping of messages.
The new macros spa_log_logt() and spa_log_logtv() take a topic as
argument, the topic's level acts as filter.
A new macro spa_log_topic_init() initializes a topic. By default a topic
inherits its logger's debug level but a logger implementation may set
that topic to a specific fixed log level.

The various spa_log_*() macros transparently wrap new and old
implementations:
- if the implementation is version 0, the new logt() calls drop the
  topic and get routed into the old log() calls
- if the implementation is version 1, the old log() calls use a NULL
  topic and get routed into the new logt() calls

All spa_log_* macros use the SPA_LOG_DEFAULT_TOPIC topic (NULL), it is
up to the caller to redefine that. Alternatively, use spa_logt_* to pass
an explicit topic.

There is one crucial flaw in this implementation: log topics are
initialized to their target level by the current logger. Where a topic
is initialized but the logger is switched later, the topic is not
automatically re-initialized. Ultimately this shouldn't matter for
real-world use-cases.
2021-09-28 09:35:38 +02:00
Peter Hutterer
cbcf62f341 spa: add a macro to check for a callback version
spa_interface_call() and friends will quietly do nothing if the version
doesn't match so we need an extra macro to know whether we can
spa_interface_call() for any given version.

This allows us to implement things like:
   if (spa_interface_callback_version_min(1)
        spa_interface_call(..., 1, func_v1)
   else
        spa_interface_call(..., 0, func_v0)
2021-09-28 09:35:38 +02:00
Peter Hutterer
6bf1f9a694 spa: split the callback version check into a separate macro 2021-09-28 09:35:38 +02:00
Peter Hutterer
49ebcfb093 spa: drop the pre-C99 checks from the log.h header
spa_log_logv was missing, so with this ifdef'd out we already fail to
compile:
spa/plugins/alsa/alsa-acp-device.c:1003: undefined reference to `spa_log_logv'

And it appears that the only requirement is __VA_ARGS__ support in the
compiler which we require in other places anyway.
2021-09-24 12:33:02 +10:00
Wim Taymans
d1484a6556 spa: fix layout defines
Fixes #1637
2021-09-23 09:58:36 +02:00
Wim Taymans
0ec77ab09c dsd: show rate in bytes per seconds. 2021-09-21 12:25:42 +02:00
Wim Taymans
1c3802bd82 spa: add SPA_ABS helper macro 2021-09-21 12:16:11 +02:00
Wim Taymans
af6e887077 spa: add interleave DSD param
And make alsa report the interleaving.
2021-09-21 10:50:45 +02:00
Wim Taymans
43b27002eb tools: add beginnings of DSD player 2021-09-21 10:50:44 +02:00
Wim Taymans
c0d3349849 spa: add DSD format definitions 2021-09-21 10:50:44 +02:00
Peter Hutterer
6a18272fed spa: mark the gettext wrappers with __attribute__((format_arg))
This removes the -Wformat-literal warnings for all _("some message")
calls. Remaining warnings are those where we pass in a custom buffer.
2021-09-07 08:26:10 +10:00
Pauli Virtanen
b5ad37c7ac bluez5: make codec loading compatible with old conf files
Change codec factory names to api.codec.bluez5.*, so that they won't
conflict with old config file lib name rules for api.bluez5.*

Specify the fallback library name when loading the codecs, so that it
works without the rules in config files.
2021-09-06 18:04:35 +03:00
Wim Taymans
f9d8bdb9b8 spa: improve param result handling
Check if we actually managed to add the param to the builder before we
try to deref it.
Use a safer deref that checks the sizes of the pod and builder.
2021-09-06 15:09:25 +02:00
Pauli Virtanen
59d572de09 bluez5: split A2DP codecs to separate SPA plugins
Make easier to package A2DP codecs separately, by splitting each to a
separate SPA plugin.  Adjust the code to not use a global variable for
the codec list.

The A2DP SPA interface API is in the bluez5 private headers, and not
exposed in installed SPA headers, as it's too close to the
implementation.
2021-09-03 20:40:30 +03:00
Pauli Virtanen
987282b376 spa/support: add plugin loader interface
Add a SPA interface for loading SPA plugins, so that plugins can request
the host to load other plugins.
2021-09-03 20:12:28 +03:00
Wim Taymans
5feb88575c spa: add helpers to parse and create iec958 formats 2021-08-23 11:31:52 +02:00
Wim Taymans
8147772cf5 spa: add definitions for IEC958 (S/PDIF)
Add Format subtype and codec property.
Add codecs to include in the format codec property.
Add property to configure elements with supported codecs.
Add type info.
2021-08-23 11:31:52 +02:00
Pauli Virtanen
e08cdf27d5 bluez5: add FastStream codec
A2DP codec that uses SBC.  Has a duplex channel, which sends an SBC
stream back.
2021-08-23 08:17:46 +00:00
Pauli Virtanen
dedc08cdf8 bluez5: enable duplex for aptx-ll
aptX-LL sink devices may send back mSBC encoded data corresponding to
microphone input.  It appears to be enabled when the bidirectional link
is set in the caps, and the device also supports this.

Implement mSBC decoding in the duplex channel.

Tested to be working on Avantree Aria Pro.
2021-08-22 17:41:50 +03:00