Commit graph

3948 commits

Author SHA1 Message Date
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
5e5bab4680 jack: don't take clock time as awake timestamp
Take a sample from the monotonic clock to generate the AWAKE
timestamp.
2020-01-31 13:35:39 +01:00
Wim Taymans
e7b5bd5e5b alsa: actually place the delay in clock.delay 2020-01-30 19:32:19 +01:00
Wim Taymans
3d8eaf8e02 ffmpeg: fix install dir 2020-01-30 17:50:45 +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
65caf8832c spa: install in versioned directory
So that we can run old and new plugins side by side.
2020-01-29 15:51:41 +01:00
Wim Taymans
82e099ed37 alsa: use the card name in the object.path
The card name (id) can be configured with udev rules to remain
constant based on where the device is plugged in even when there
mulitple of the same devices.
2020-01-29 13:37:35 +01:00
Wim Taymans
898a7be9a6 autogen: make symbolic links
Make links for the pulse and jack libraries to our versions
2020-01-29 12:17:39 +01:00
Wim Taymans
7450bfd88b Improve mlock failure warning message 2020-01-29 11:07:26 +01:00
Wim Taymans
8de267cf02 jack: handle plugins that cache jack_port_get_buffer()
Some plugins (calfjackhost) only call jack_port_get_buffer()
once and cache the pointer. This behaviour has been deprecated
in JACK2 but still works.

Add a workaround for this by getting a buffer ourselves and memcpy
into it from the scratch buffer.
2020-01-29 10:29:26 +01:00
Wim Taymans
84258c9078 jack: fix set_sync_timeout
It needs to update the node activation, not the driver activation.
2020-01-28 20:49:21 +01:00
Wim Taymans
34e776a930 man: fix command names and issues ref 2020-01-28 16:09:56 +01:00
Wim Taymans
6cc180f252 0.2.93 2020-01-28 15:49:18 +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
Fabrice Fontaine
3583352feb support: fix build on uclibc
Define TFD_TIMER_CANCEL_ON_SET if needed

Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
2020-01-27 23:50:02 +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
f4387e0568 fmt-ops: add support for s24 with endian conversion 2020-01-27 15:46:25 +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
Jan Grulich
962c3ff1a6 Bump version to distinguish between stable bugfix release and pre-release
The upcoming PW version has been already released as 0.2.9x, while using 0.2.9 means we
still use a bugfix release of PW 0.2 version. Without the proper version bump, one cannot
use ifdefs and support both PW 0.2 and PW 0.3
2020-01-21 12:50:34 +01:00