Commit graph

675 commits

Author SHA1 Message Date
George Kiagiadakis
6a2778c2e7 spa: add type info for device event objects 2021-01-20 11:15:17 +00:00
Wim Taymans
4d15df6f24 bluez5: improve device and node properties
Set form factor, name routes based on form factor.
Improve profile names
Make card and node names like pulseaudio, with bt address in them.
Fill in port type in the route info.

Fixes #544
2021-01-10 20:56:27 +01:00
Wim Taymans
d09cb1f05b json: handle incomplete strings
If we run to the end of the string and the string is not closed,
assume it closed.
2020-12-31 17:16:32 +01:00
Wim Taymans
799bc13c85 json: set state on final bare string
When we run out of chars and are inside a bare string, set our state
so that the next round will continue instead of looping forever.
2020-12-31 17:07:03 +01:00
Wim Taymans
85cb85d440 json: improve parse_string
When doing parse_string on a non-string, copy the charaters
as they are without escaping.
2020-12-31 10:09:40 +01:00
Wim Taymans
49b17bca22 json: relax the parser some more
Allow bare strings with all non-special other chars.
Add # to comment a line till \n
Allow = as separator for keys
Fix end of string handling.

Now:

 {
   "#": "this is a comment"
   "key": "value",
   "foo": 24
 }

and

  {
    # this is a comment
    key = value
    foo = 24
  }

Parse to the same thing with less clutter.
2020-12-31 10:04:18 +01:00
Wim Taymans
948255f801 result: don't use undefined shift
Use a different way to generate the upper bits of the ASYNC mask
instead of undefined shift as warned by sanitizer
Add some unit test for this

See #497
2020-12-21 21:08:56 +01:00
Wim Taymans
2d89ad8533 profiler: add xrun_count and latency to profiler 2020-12-20 12:32:54 +01:00
Wim Taymans
c3973fd9ec pod: add a HINT_DICT flag
We can use this to mark the ROUTE_info property and hopefully improve
the debugging output later.
2020-12-18 16:40:35 +01:00
Wim Taymans
13cb51efbd spa: fix array type info
Descend into the type info of the array. Fixes names of channels
in position array.
2020-12-15 16:06:10 +01:00
Wim Taymans
3ac2bc0ad2 pod: descend in array type if possible 2020-12-14 16:18:57 +01:00
Wim Taymans
7c5cb5a281 param: the position property is an array of channelpositions 2020-12-14 16:18:12 +01:00
Wim Taymans
1934b0adb9 bluez5: add codec name to node 2020-12-14 13:29:12 +01:00
Wim Taymans
7768a87a0b alsa: make it possible to fix format 2020-12-09 20:33:57 +01:00
Wim Taymans
4e7be858e4 node: Add ParamBegin/End
Use these commands to mark the begin and end of a series of Param
enumerations and configuration, like when doing format negotiation. The
idea is that the device can remain open while we do this.
Use this in adapter when negotiating a format.
2020-12-09 17:10:52 +01:00
Wim Taymans
57886c1198 spa: add audio.position support in null sink 2020-12-02 12:59:50 +01:00
Wim Taymans
1e9b152bb5 spa: make an extra level for arrays
Make a level with type info for the array elements.
2020-12-01 13:30:14 +01:00
Wim Taymans
73e0bb255a props: add container property to PROP_INFO
So we can mark a property should be inside a container.
Use this info in pw_stream to construct properties.
2020-12-01 12:58:18 +01:00
Wim Taymans
967a5e06b0 spa: fix type info
Link to objects in the parent field
Use the type, not the container for some properties. We need something
else to note the container type maybe
2020-11-30 13:30:19 +01:00
Haochen Tong
a1259a75be
spa: enable fallthrough attribute on recent clang 2020-11-29 02:32:12 +01:00
Wim Taymans
57a9e82f79 spa: 0 means there is nothing left from from spa_json_next() 2020-11-28 20:35:25 +01:00
Wim Taymans
6e4c138238 properties: support properties from json object sting
Make pw_properties_new_string() work with a json object string.
This makes it possible to specify property strings as more complex
objects and escape characters.
2020-11-28 20:25:39 +01:00
Wim Taymans
62cdec8448 spa: move json parser to utils
Add unit test
Add escape function
2020-11-28 15:34:01 +01:00
Wim Taymans
8f7e5dd950 spa: add channelMap property param 2020-11-23 15:28:24 +01:00
Wim Taymans
fc2b0b20ad hook: zero hooks before adding them
Clear the hook before adding it so that we are sure the removed
callback doesn't contain garbage and cause a crash on disconnect.

Mark the removed and priv fields as private. Make sure to add the
removed callback after adding the hook.

Fixes a crash in kwin
2020-11-20 09:40:24 +01:00
Wim Taymans
935851a6a6 spa: add safe_reverse function 2020-11-18 15:00:01 +01:00
Wim Taymans
80967e88ad utils: add function to clean hook list 2020-11-06 15:32:49 +01:00
Jan Grulich
743cf58fb7 Define SPA_FALLTHROUGH to make fall-through annotations work for all compilers
This is needed for example for Clang compiler which uses different
annotations than GCC. It will make WebRTC to happily use PipeWire
since the spa library is header-only and WebRTC defaults to use
Clang with -Wimplicit-fallthrough.
2020-10-22 13:31:19 +02:00
Frank Praznik
62a34f8c48 defs: rename variables in min/max macros
Fixes a variable shadow warning when SPA_CLAMP() is used.
2020-10-20 19:08:25 +00:00
Frank Praznik
796db2b11b builder: fix variable shadow warning 2020-10-20 19:08:25 +00:00
Wim Taymans
47ab075895 buffer: clarify data type mask 2020-10-09 17:39:32 +02:00
Wim Taymans
d2d722efb3 node: add an ASYNC flag
The flag means that the process function might not complete
synchronously.

We can use this knowledge to improve the adapter. In sync mode we
can pull before scheduling the converter. In async mode we need to
schedule the follower after the converter to get the data ready for
the next iteration.

We can also improve the stream when it is operating async to schedule
a process call when a new buffer is ready to be filled.

This reduces a cycle latency from alsa and improves latency in
pulse.
2020-09-25 17:02:54 +02:00
Wim Taymans
1bf6dead10 alsa: add option to force a samplerate 2020-09-16 15:14:26 +02:00
Wim Taymans
e5f7e040dc loop: simplify before and after events
Because the signal can't be removed from the callback we can
simply iterate backwards and then forwards.

The first added hook (the unlock/lock pair) is called last before
going into the poll and first when leaving. This executes all other
callbacks inside a locked situation. And removing them with the lock
is not going to cause problems.
2020-09-16 13:31:47 +02:00
Emmanuel Gil Peyrot
8332ee0c25 spa: replace rindex() with strrchr()
Linux man-page says rindex() got “marked as LEGACY in POSIX.1-2001, [and
removed in] POSIX.1-2008”.
2020-09-07 15:10:29 +00:00
Emmanuel Gil Peyrot
14fdf07e8f Run codespell on the entire codebase
This tool detects and fixes common English spelling mistakes, with
generally very few mistakes.

Here is the command I used to generate this commit.  There were a few
changes that had to be done manually, and of course adding the ignore
file:
```shell
codespell -I .codespell-ignore -x .codespell-ignore -w
```

I didn’t add it to the CI, but this would be a good place for it.
2020-08-17 17:16:31 +00:00
Wim Taymans
90e12299f1 acp: add current profile in the route 2020-08-14 15:09:00 +02:00
Wim Taymans
5e9091a285 node: add new NEED_CONFIGURE flag
Add a new node flag that is set when the node needs more configuration.
Don't try to Start nodes that have the NEED_CONFIGURE flag set.
Make audioadapter clear the NEED_CONFIGURE flag when it has the
PortConfig.

These changes now make it possible to run:

gst-launch-1.0 -v pipewiresrc path=51 stream-properties="props,node.group=1" ! audio/x-raw ! pipewiresink stream-properties="props,node.group=1"

The pipewiresink and pipewiresrc will be added to the same scheduling
group (1) and the devices they connect to will be slaved, even if they
are otherwise not linked.

Without the NEED_CONFIGURE flag, pipewiresink would be added to the
pipewiresrc group and would be started by the daemon before the
session manager has a chance to configure (and link) the node.

Fixes #4
2020-08-10 16:57:14 +02:00
Wim Taymans
374210c890 acp: add per device port list
Add the list of possible ports for a device.
Pass the allowed devices in the routes.
Store the active port in the device.

Fixes enumeration of ports on devices with UCM.
2020-08-10 14:25:03 +02:00
Wim Taymans
e71936f870 Improve naming
master -> driving
priority_master -> priority_driver
segment_master -> segment_owner
2020-08-06 13:49:33 +02:00
Wim Taymans
f961c726de param: add type info for volumeStep and Base 2020-08-05 20:25:55 +02:00
Wim Taymans
7f7a8ccc88 acp: use some existing keys and add some new ones 2020-08-03 17:08:46 +02:00
Wim Taymans
eaf7606e3f acp: pass udev PROFILE_SETS to acp device 2020-07-28 13:00:45 +02:00
Wim Taymans
2955182e4e use spa_debug_type_short_name() when we can 2020-07-22 11:22:11 +02:00
Wim Taymans
f28ca843a6 format: fix typo 2020-07-14 10:21:35 +02:00
Frédéric Danis
e17688a43b Fix missing headers check
Current Gillab CI fails with:
  $ ./check_missing_headers.sh
  spa/monitor/event.h not installed
2020-07-07 17:33:57 +02:00
Wim Taymans
e030445e49 acp: add volume base and step
Add a READONLY property flag to makr properties READONLY
Set the base_volume and volume_step in the acp device
Send the base volume and step as REAONLY properties. Use these
in pulse layer.
2020-07-07 13:12:57 +02:00
Wim Taymans
cf8db93cd4 pod: add HARDWARE flag to spa_pod_prop
Add HARDWARE flag to mark a property that does some hardware control.
Mark the device volume/mute property as HARDWARE or not.
Use the HARDWARE property in pulse to set the right flags.
2020-07-06 17:46:32 +02:00
Wim Taymans
b9d412e618 monitor: add device event
Add device events and signal soft volume with an object config
event.
2020-07-06 17:25:05 +02:00
Wim Taymans
1612f5e4d2 alsa-acp: Add libacp based card device
libacp is a port and wrapper around the pulseaudio card profile code.
It uses a set of templates for construct a card profile and mixer port
settings. It also has support for UCM when available for the hardware.
2020-07-06 12:20:09 +02:00