Wim Taymans
8abbf653e6
pw-cat: Use default channel layout when nothing given
...
Make channel layout definitions a little more useful. We can now
assign them to a layout_info struct or in the raw_info.
Make some default channel layouts for use in pw-cat
2020-02-04 15:54:57 +01:00
Wim Taymans
1cce9a69c8
pw-cat: add channel-map option and option to delay connect
...
If the target node is set to 0, remove the autoconnect flag. This makes
the session manager disable stream autoconnect and some other program
needs to connect the stream to a sink or node.
Use the channelmap from the file, if available.
Add option to specify/override the channel map for playback.
2020-02-04 11:45:45 +01:00
Wim Taymans
f79dfcd77f
profiler: fix method prototype
2020-02-03 16:44:09 +01:00
Wim Taymans
64391f1ed5
profiler: avoid negative times
2020-02-03 13:14:56 +01:00
Wim Taymans
a4a93a2a16
profiler: Improve profiler info
...
Split the profiler info into multiple properties.
Give feedback about time and logged samples while profiling.
2020-02-03 12:33:01 +01:00
Wim Taymans
bdad7d87f9
global: fix comment and use constant for core id
2020-02-03 12:32:17 +01:00
Wim Taymans
ef965dfc23
meson: install profiler extension
2020-01-31 17:59:30 +01:00
Wim Taymans
6f31a16024
pw-profiler: add some more driver measurements
...
Add estimated period
Add reported driver delay
2020-01-31 17:56:00 +01:00
Wim Taymans
8b303361d8
pw-profiler: avoid copying invalid values
2020-01-31 16:31:35 +01:00
Wim Taymans
afdb6586b5
pw-profiler: various improvements
...
Small cleanups.
Print some useful status info.
Fail when there is no Profiler API found.
Only log data from the first driver we find.
2020-01-31 16:03:05 +01:00
Wim Taymans
f7ed9a5ca7
context: clamp default qantum to min and max
...
When min or max is set in the config file, make sure we clamp the
default to it as well.
2020-01-31 15:49:40 +01:00
Wim Taymans
3317af804b
pw-profiler: add profiler tool
...
Add Profiler object and fields.
Add profiler extension API. It notifies Profiler objects with
real-time performance data.
Add module that implements the profiler extension.
Add pw-profiler tool that binds to the profiler API and dumps the
data into a log file, gnuplot files, a html page and a script to
generate svg graphs. This is almost the same as what JACK2
JackEngineProfiling does.
2020-01-31 15:13:47 +01:00
Wim Taymans
5a47652dc2
node: emit driver start on completion of the graph.
...
This gives better info about the elapsed cycle.
2020-01-31 13:38:46 +01:00
Wim Taymans
43257e8676
graph: make pending/required fields signed
...
So that we can check for negative value.
Also don't signal incomplete graph when we signaled more than
expected, this can happen when we add new nodes in the current
cycle and then triggered the driver.
2020-01-31 13:36:44 +01:00
Wim Taymans
cd21f5292b
context: emit events for driver
...
Make new private events to monitor the state of driver nodes. This
can be used to implement profiling.
2020-01-30 17:21:33 +01:00
Wim Taymans
9f0c5d403e
node: collect sync_timeout and use smallest
...
Collect all sync_timeout values from the clients and use the
smallest one as the timeout.
2020-01-30 11:48:24 +01:00
Wim Taymans
7450bfd88b
Improve mlock failure warning message
2020-01-29 11:07:26 +01:00
Wim Taymans
b4c76ba78a
policy-node: only set PortConfig when we find a format
2020-01-28 15:38:35 +01:00
Wim Taymans
d2d1647634
media-session: fix cleanup of objects
...
Don't free the proxy twice in some cases.
2020-01-28 15:38:11 +01:00
Fabrice Fontaine
281e61735b
properties.h: include stdarg.h
...
Include stdarg.h to avoid a build failure on uclibc due to va_list
Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
2020-01-28 15:10:41 +01:00
Wim Taymans
ed13cd2ec8
pw-cli: improve help
2020-01-28 13:04:21 +01:00
Wim Taymans
1c6ce1778b
pw-cli: handle NULL when iterating globals
...
It is possible that the global map contains holes and then the
pw_map item has NULL data.
2020-01-28 12:55:01 +01:00
Pantelis Antoniou
e258382bec
pipewire-cli: Introduce an improved object dump method
...
The dump method can dump objects in a manner that is easy
for humans to parse and understand.
For instance a simple command (on a vanilla NUC2):
pipewire-0>>dump -sd Device
23: c="Audio/Device" n="alsa_card.pci-0000:00:03.0" d="Built-in Audio" a="alsa:pcm" p="hw:0" id="HDMI"
nodes:
24: s="suspended" i=2/128 n="api.alsa.pcm.sink/alsa_card.pci-0000:00:03.0/HDMI 0" p="alsa:pcm:hw:0,3:playback"
ports:
31: d="input" n="playback_FL" f="32 bit float mono audio"
32: d="input" n="playback_FR" f="32 bit float mono audio"
25: s="suspended" i=2/128 n="api.alsa.pcm.sink/alsa_card.pci-0000:00:03.0/HDMI 1" p="alsa:pcm:hw:0,7:playback"
ports:
33: d="input" n="playback_FL" f="32 bit float mono audio"
34: d="input" n="playback_FR" f="32 bit float mono audio"
26: s="suspended" i=2/128 n="api.alsa.pcm.sink/alsa_card.pci-0000:00:03.0/HDMI 2" p="alsa:pcm:hw:0,8:playback"
ports:
35: d="input" n="playback_FL" f="32 bit float mono audio"
36: d="input" n="playback_FR" f="32 bit float mono audio"
27: s="suspended" i=2/128 n="api.alsa.pcm.sink/alsa_card.pci-0000:00:03.0/HDMI 3" p="alsa:pcm:hw:0,9:playback"
ports:
37: d="input" n="playback_FL" f="32 bit float mono audio"
38: d="input" n="playback_FR" f="32 bit float mono audio"
43: s="suspended" i=2/128 o=2/128 n="audio.convert/api.alsa.pcm.sink/alsa_card.pci-0000:00:03.0/HDMI 0/Multimedia" p="alsa:pcm:hw:0,3:playback:Multimedia"
ports:
44: d="input" n="in_FL" f="32 bit float mono audio"
45: d="output" n="out_FL" f="32 bit float mono audio"
106: d="output" n="out_FR" f="32 bit float mono audio"
107: d="input" n="in_FR" f="32 bit float mono audio"
46: s="suspended" i=2/128 o=2/128 n="audio.convert/api.alsa.pcm.sink/alsa_card.pci-0000:00:03.0/HDMI 0/Navigation" p="alsa:pcm:hw:0,3:playback:Navigation"
ports:
47: d="input" n="in_FL" f="32 bit float mono audio"
48: d="output" n="out_FL" f="32 bit float mono audio"
108: d="output" n="out_FR" f="32 bit float mono audio"
109: d="input" n="in_FR" f="32 bit float mono audio"
49: s="suspended" i=2/128 o=2/128 n="audio.convert/api.alsa.pcm.sink/alsa_card.pci-0000:00:03.0/HDMI 0/Communication" p="alsa:pcm:hw:0,3:playback:Communication"
ports:
50: d="input" n="in_FL" f="32 bit float mono audio"
51: d="output" n="out_FL" f="32 bit float mono audio"
110: d="output" n="out_FR" f="32 bit float mono audio"
111: d="input" n="in_FR" f="32 bit float mono audio"
52: s="suspended" i=2/128 o=2/128 n="audio.convert/api.alsa.pcm.sink/alsa_card.pci-0000:00:03.0/HDMI 0/Emergency" p="alsa:pcm:hw:0,3:playback:Emergency"
ports:
53: d="input" n="in_FL" f="32 bit float mono audio"
54: d="output" n="out_FL" f="32 bit float mono audio"
112: d="output" n="out_FR" f="32 bit float mono audio"
113: d="input" n="in_FR" f="32 bit float mono audio"
55: s="suspended" i=2/128 o=2/128 n="audio.convert/api.alsa.pcm.sink/alsa_card.pci-0000:00:03.0/HDMI 1/Multimedia" p="alsa:pcm:hw:0,7:playback:Multimedia"
ports:
56: d="input" n="in_FL" f="32 bit float mono audio"
57: d="output" n="out_FL" f="32 bit float mono audio"
114: d="output" n="out_FR" f="32 bit float mono audio"
115: d="input" n="in_FR" f="32 bit float mono audio"
58: s="suspended" i=2/128 o=2/128 n="audio.convert/api.alsa.pcm.sink/alsa_card.pci-0000:00:03.0/HDMI 1/Navigation" p="alsa:pcm:hw:0,7:playback:Navigation"
ports:
59: d="input" n="in_FL" f="32 bit float mono audio"
60: d="output" n="out_FL" f="32 bit float mono audio"
116: d="output" n="out_FR" f="32 bit float mono audio"
117: d="input" n="in_FR" f="32 bit float mono audio"
61: s="suspended" i=2/128 o=2/128 n="audio.convert/api.alsa.pcm.sink/alsa_card.pci-0000:00:03.0/HDMI 1/Communication" p="alsa:pcm:hw:0,7:playback:Communication"
ports:
62: d="input" n="in_FL" f="32 bit float mono audio"
63: d="output" n="out_FL" f="32 bit float mono audio"
118: d="output" n="out_FR" f="32 bit float mono audio"
119: d="input" n="in_FR" f="32 bit float mono audio"
64: s="suspended" i=2/128 o=2/128 n="audio.convert/api.alsa.pcm.sink/alsa_card.pci-0000:00:03.0/HDMI 1/Emergency" p="alsa:pcm:hw:0,7:playback:Emergency"
ports:
65: d="input" n="in_FL" f="32 bit float mono audio"
66: d="output" n="out_FL" f="32 bit float mono audio"
120: d="output" n="out_FR" f="32 bit float mono audio"
121: d="input" n="in_FR" f="32 bit float mono audio"
67: s="suspended" i=2/128 o=2/128 n="audio.convert/api.alsa.pcm.sink/alsa_card.pci-0000:00:03.0/HDMI 2/Multimedia" p="alsa:pcm:hw:0,8:playback:Multimedia"
ports:
68: d="input" n="in_FL" f="32 bit float mono audio"
69: d="output" n="out_FL" f="32 bit float mono audio"
122: d="output" n="out_FR" f="32 bit float mono audio"
123: d="input" n="in_FR" f="32 bit float mono audio"
70: s="suspended" i=2/128 o=2/128 n="audio.convert/api.alsa.pcm.sink/alsa_card.pci-0000:00:03.0/HDMI 2/Navigation" p="alsa:pcm:hw:0,8:playback:Navigation"
ports:
71: d="input" n="in_FL" f="32 bit float mono audio"
72: d="output" n="out_FL" f="32 bit float mono audio"
124: d="output" n="out_FR" f="32 bit float mono audio"
125: d="input" n="in_FR" f="32 bit float mono audio"
73: s="suspended" i=2/128 o=2/128 n="audio.convert/api.alsa.pcm.sink/alsa_card.pci-0000:00:03.0/HDMI 2/Communication" p="alsa:pcm:hw:0,8:playback:Communication"
ports:
74: d="input" n="in_FL" f="32 bit float mono audio"
75: d="output" n="out_FL" f="32 bit float mono audio"
126: d="output" n="out_FR" f="32 bit float mono audio"
127: d="input" n="in_FR" f="32 bit float mono audio"
76: s="suspended" i=2/128 o=2/128 n="audio.convert/api.alsa.pcm.sink/alsa_card.pci-0000:00:03.0/HDMI 2/Emergency" p="alsa:pcm:hw:0,8:playback:Emergency"
ports:
77: d="input" n="in_FL" f="32 bit float mono audio"
78: d="output" n="out_FL" f="32 bit float mono audio"
128: d="output" n="out_FR" f="32 bit float mono audio"
129: d="input" n="in_FR" f="32 bit float mono audio"
79: s="suspended" i=2/128 o=2/128 n="audio.convert/api.alsa.pcm.sink/alsa_card.pci-0000:00:03.0/HDMI 3/Multimedia" p="alsa:pcm:hw:0,9:playback:Multimedia"
ports:
80: d="input" n="in_FL" f="32 bit float mono audio"
81: d="output" n="out_FL" f="32 bit float mono audio"
130: d="output" n="out_FR" f="32 bit float mono audio"
131: d="input" n="in_FR" f="32 bit float mono audio"
82: s="suspended" i=2/128 o=2/128 n="audio.convert/api.alsa.pcm.sink/alsa_card.pci-0000:00:03.0/HDMI 3/Navigation" p="alsa:pcm:hw:0,9:playback:Navigation"
ports:
83: d="input" n="in_FL" f="32 bit float mono audio"
84: d="output" n="out_FL" f="32 bit float mono audio"
132: d="output" n="out_FR" f="32 bit float mono audio"
133: d="input" n="in_FR" f="32 bit float mono audio"
85: s="suspended" i=2/128 o=2/128 n="audio.convert/api.alsa.pcm.sink/alsa_card.pci-0000:00:03.0/HDMI 3/Communication" p="alsa:pcm:hw:0,9:playback:Communication"
ports:
86: d="input" n="in_FL" f="32 bit float mono audio"
87: d="output" n="out_FL" f="32 bit float mono audio"
134: d="output" n="out_FR" f="32 bit float mono audio"
135: d="input" n="in_FR" f="32 bit float mono audio"
88: s="suspended" i=2/128 o=2/128 n="audio.convert/api.alsa.pcm.sink/alsa_card.pci-0000:00:03.0/HDMI 3/Emergency" p="alsa:pcm:hw:0,9:playback:Emergency"
ports:
89: d="input" n="in_FL" f="32 bit float mono audio"
90: d="output" n="out_FL" f="32 bit float mono audio"
136: d="output" n="out_FR" f="32 bit float mono audio"
137: d="input" n="in_FR" f="32 bit float mono audio"
28: c="Audio/Device" n="alsa_card.pci-0000:00:1b.0" d="Built-in Audio" a="alsa:pcm" p="hw:1" id="PCH"
nodes:
29: s="running" i=2/128 n="api.alsa.pcm.sink/alsa_card.pci-0000:00:1b.0/ALC283 Analog" p="alsa:pcm:hw:1,0:playback"
ports:
39: d="input" n="playback_FL" f="32 bit float mono audio"
40: d="input" n="playback_FR" f="32 bit float mono audio"
30: s="suspended" o=2/128 n="api.alsa.pcm.source/alsa_card.pci-0000:00:1b.0/ALC283 Analog" p="alsa:pcm:hw:1,0:capture"
ports:
41: d="output" n="capture_FL" f="32 bit float mono audio"
42: d="output" n="capture_FR" f="32 bit float mono audio"
91: s="running" i=2/128 o=2/128 n="audio.convert/api.alsa.pcm.sink/alsa_card.pci-0000:00:1b.0/ALC283 Analog/Multimedia" p="alsa:pcm:hw:1,0:playback:Multimedia"
ports:
92: d="input" n="in_FL" f="32 bit float mono audio"
93: d="output" n="out_FL" f="32 bit float mono audio"
138: d="output" n="out_FR" f="32 bit float mono audio"
139: d="input" n="in_FR" f="32 bit float mono audio"
94: s="suspended" i=2/128 o=2/128 n="audio.convert/api.alsa.pcm.sink/alsa_card.pci-0000:00:1b.0/ALC283 Analog/Navigation" p="alsa:pcm:hw:1,0:playback:Navigation"
ports:
95: d="input" n="in_FL" f="32 bit float mono audio"
96: d="output" n="out_FL" f="32 bit float mono audio"
140: d="output" n="out_FR" f="32 bit float mono audio"
141: d="input" n="in_FR" f="32 bit float mono audio"
97: s="suspended" i=2/128 o=2/128 n="audio.convert/api.alsa.pcm.sink/alsa_card.pci-0000:00:1b.0/ALC283 Analog/Communication" p="alsa:pcm:hw:1,0:playback:Communication"
ports:
98: d="input" n="in_FL" f="32 bit float mono audio"
99: d="output" n="out_FL" f="32 bit float mono audio"
142: d="output" n="out_FR" f="32 bit float mono audio"
143: d="input" n="in_FR" f="32 bit float mono audio"
100: s="suspended" i=2/128 o=2/128 n="audio.convert/api.alsa.pcm.sink/alsa_card.pci-0000:00:1b.0/ALC283 Analog/Emergency" p="alsa:pcm:hw:1,0:playback:Emergency"
ports:
101: d="input" n="in_FL" f="32 bit float mono audio"
102: d="output" n="out_FL" f="32 bit float mono audio"
144: d="output" n="out_FR" f="32 bit float mono audio"
145: d="input" n="in_FR" f="32 bit float mono audio"
103: s="suspended" i=2/128 o=2/128 n="audio.convert/api.alsa.pcm.source/alsa_card.pci-0000:00:1b.0/ALC283 Analog/Capture" p="alsa:pcm:hw:1,0:capture:Capture"
ports:
104: d="input" n="in_FL" f="32 bit float mono audio"
105: d="output" n="out_FL" f="32 bit float mono audio"
146: d="input" n="in_FR" f="32 bit float mono audio"
147: d="output" n="out_FR" f="32 bit float mono audio"
Will dump the devices, while following to dump nodes and ports
of the nodes.
Signed-off-by: Pantelis Antoniou <pantelis.antoniou@konsulko.com>
2020-01-28 12:45:24 +01:00
Pantelis Antoniou
193360abe6
pipewire-cli: Immediately bind the object on creation
...
Immediately bind the global object upon creation. This
allows to iterate over them without having to wait for
the bind to be completed asynchronously.
Signed-off-by: Pantelis Antoniou <pantelis.antoniou@konsulko.com>
2020-01-28 12:45:21 +01:00
Wim Taymans
b5b3bfbe84
pw-cat: Don't set RT_PROCESS flag
...
The soundfile function calls are not safe to call from the real-time
thread so don't do that.
2020-01-28 10:35:29 +01:00
Wim Taymans
d43b98e1a4
pw-cat: print errno on errors
2020-01-28 10:35:07 +01:00
Wim Taymans
525ca21ece
pw-cat: fix pw-play and pw-record names
2020-01-28 10:33:48 +01:00
George Kiagiadakis
9100fb653d
gst: fix typo
2020-01-28 09:55:09 +01:00
Wim Taymans
37396096df
pw-cat: fill in the media-name property
2020-01-27 16:54:19 +01:00
Wim Taymans
116b13b1e2
pw-cat: relax some more checks
...
Don't really care about the format, let sndfile convert and decode
for us to the nearest supported format or else to f32. Fixes support
for ogg.
2020-01-27 16:38:35 +01:00
Wim Taymans
e1e93e5a88
pw-cat: fix s24 formats
...
Treat s24 format as s32 and let sndfile convert for us. This is
needed because using the raw read bypasses decoding in some cases.
This makes 24 bits flac work.
2020-01-27 15:47:13 +01:00
Wim Taymans
c047bab910
rename pipewire tools
...
Use the pw- prefix for all pipewire tools. This makes the
commands shorter but also avoids conflicts with password
and patchwork tools (pwcli is taken, pwconv is maybe we someday
can make).
pipewire-monitor -> pw-mon
pipewire-cli -> pw-cli
pipewire-dot -> pw-dot
pwcat -> pw-cat
2020-01-27 15:42:59 +01:00
Wim Taymans
88cd3d3f1e
pwcat: add support for WAVEX and 24 bits
2020-01-27 13:32:05 +01:00
Pantelis Antoniou
00fb00924b
pwcat: Add list-targets option
...
The --list-targets option will report on the available
targets for the --target command (and some info about it).
Example:
$ pwplay --list-targets
Available targets ("*" denotes default):
30: name="alsa_card.pci-0000:00:03.0.playback.3.0" description="Built-in Audio (HDMI 0)" prio=696
31: name="alsa_card.pci-0000:00:03.0.playback.7.0" description="Built-in Audio (HDMI 1)" prio=632
32: name="alsa_card.pci-0000:00:03.0.playback.8.0" description="Built-in Audio (HDMI 2)" prio=616
33: name="alsa_card.pci-0000:00:03.0.playback.9.0" description="Built-in Audio (HDMI 3)" prio=600
* 34: name="alsa_card.pci-0000:00:1b.0.playback.0.0" description="Built-in Audio" prio=936
Getting this working required abandoning the simple stream API, and
the resultant increase in code size.
Signed-off-by: Pantelis Antoniou <pantelis.antoniou@konsulko.com>
2020-01-27 12:23:33 +01:00
Pantelis Antoniou
3f11f7e505
pwcat: Fix --target option
...
The target option was not working properly. Now you can use
arbitrary nodes as targets.
Signed-off-by: Pantelis Antoniou <pantelis.antoniou@konsulko.com>
2020-01-27 12:23:27 +01:00
Pantelis Antoniou
f0d5d7ec09
pwcat: Add volume control option.
...
Signed-off-by: Pantelis Antoniou <pantelis.antoniou@konsulko.com>
2020-01-27 12:23:21 +01:00
Pantelis Antoniou
588e9562f9
pwcat: simple native playback/record tool
...
pwcat is analogous to pacat of PulseAudio which implements
both playback and recording capability.
Only wav files are supported for now, and you can use the
handy pwplay and pwrecord aliases for easy use.
Playback a wav file
$ pwplay foo.wav
Record a wav file
$ pwrecord -r 44100 -c 1 -f s16 foo.wav
Signed-off-by: Pantelis Antoniou <pantelis.antoniou@konsulko.com>
2020-01-27 12:23:15 +01:00
Wim Taymans
6ac9b7b3a7
spa: add spa_aprintf helper
...
Add a asprintf helper function that handles errors correctly.
Use this in places where we use asprintf to avoid warnings when we
don't check the return value.
2020-01-27 12:19:21 +01:00
Wim Taymans
aee3191bad
examples: don't fail when alsa is not found
...
Avoid building the session-manager when alsa was not found.
2020-01-27 10:46:19 +01:00
Fabrice Fontaine
4717690a60
meson: add examples option
...
Add an option to allow the user to disable examples, this will allow to
build pipewire without alsa. Without this option, build with
-Dpipewire-alsa=false -Dalsa=false fails on:
src/examples/meson.build:47:0: ERROR: Unknown variable "alsa_dep".
Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
2020-01-27 10:42:46 +01:00
Wim Taymans
0237296400
stream: don't set inactive on cork
...
We don't pause our clock ticks in the corked state which confuses
the timing code. As a workaround for now, don't set the node to
inactive when corked, this still keeps calling into the process
function and keep things moving. VLC seems to recover better.
2020-01-17 15:34:31 +01:00
Wim Taymans
1c46dc32f8
protocol-native: improve message debug
2020-01-17 11:00:09 +01:00
Wim Taymans
f792c3f536
fix some segfaults
2020-01-16 16:47:01 +01:00
Wim Taymans
6af00219e1
media-session: avoid some segfaults
2020-01-16 16:19:09 +01:00
Wim Taymans
940aba8623
data-loop: use pthread_cancel to stop thread
...
Use pthread_cancel to terminate the data threads. We need this for
jack support but it's generally useful for a data thread.
2020-01-16 13:27:52 +01:00
Wim Taymans
4169d9196d
module-access: handle -EACCES as non-flatpak
...
If we can't access the root filesystem, grant access to the app.
This should not happen but for now it is a workaround for selinux
where we can't access the gnome-shell root when it connects for
screen sharing.
2020-01-15 17:17:56 +01:00
Wim Taymans
4e8d85da2f
Fix some unit test
...
Run abi checks only on x86_64 until we have sizes for more archs
Don't start a daemon in the tests because that would require
XDG_RUNTIME_DIR set
2020-01-15 13:23:49 +01:00
Wim Taymans
1cedfade3a
protocol: improve old version check
...
Check if the pod size is > 4 because the unit test adds one fd
in the first message.
2020-01-15 12:24:11 +01:00
Wim Taymans
043e7f24fe
add some more useful defines
...
Add define to match all ids for nodes and params.
Add define for invalid permissions
2020-01-15 11:15:51 +01:00
Wim Taymans
cf53ededd0
connection: improve old version check
...
Check the type of the pod in the message instead. Old versions
should not have 0 there, new versions keep the number of file
descriptors, which should be 0 for the first message.
2020-01-15 10:29:58 +01:00