Commit graph

445 commits

Author SHA1 Message Date
Wim Taymans
84b048507b midifile: remove impossible case. 2020-04-14 20:11:51 +02:00
Wim Taymans
7927a66fdd tools: improve error reporting 2020-04-04 20:23:42 +02:00
Wim Taymans
b87c0a9270 clean up options
make sure we can use -v for verbose mode
2020-04-02 14:34:02 +02:00
Gleb Popov
b552863ec9 Don't include alloca.h on FreeBSD. 2020-03-31 12:16:45 +02:00
Wim Taymans
b3d0aa6f8c pw-cat: allow latency=none 2020-03-26 11:34:59 +01:00
Wim Taymans
7693834a81 pw-profiler: report error when we can't bind 2020-03-26 10:24:14 +01:00
Wim Taymans
413bda908a pw-cli: continue after parsed options 2020-03-25 18:00:50 +01:00
Wim Taymans
c292a6d54e pw-cli: add non-interactive mode
You can now pass a command to pw-cli and it will execute immediately
and exit.

Fixes #195
2020-03-25 11:17:02 +01:00
Wim Taymans
646088b90c tools: add getopt argument parsing
Add some help, version, remote options for tools
Add option for output filename in pw-profiler
Add option to start pw-cli as daemon or not, make it connect to the
default PipeWire instance by default (instead of local instance)
2020-03-24 16:36:48 +01:00
Wim Taymans
54eef8bb9d pw-cat: write midi bytes directly. 2020-03-06 16:47:02 +01:00
Wim Taymans
6700e332f9 Revert "pw-cli: Collect and display parameters from global symbols"
This reverts commit 3b53a6e049.
2020-03-06 16:33:50 +01:00
Wim Taymans
524f9fd96d Revert "Implement JSON/YAML command for graph tree traversal"
This reverts commit 7ead270265.
2020-03-06 16:33:36 +01:00
Wim Taymans
8644e80304 Revert "Fix change_mask string generation"
This reverts commit b445bdea27.
2020-03-06 16:33:14 +01:00
Wim Taymans
b7f952e02b Revert "Fix printf attribute compilation errors"
This reverts commit 4175191d19.
2020-03-06 16:30:32 +01:00
Wim Taymans
d880db3933 Revert "pw-cli: use core object to map id to proxy"
This reverts commit 918acd61ef.
2020-03-06 16:30:18 +01:00
Wim Taymans
e9884fcfb5 pw-*: Use user data to track param changes
Use the new param_info user field to track individual param
changes and only notify thos that changed.
2020-03-06 15:41:02 +01:00
Wim Taymans
c4b2be2aad use true and false for boolean properties
So that it's easier to convert them to booleans in introspection
code later.
2020-03-03 18:17:46 +01:00
Wim Taymans
3d9f54d8a4 midifile: count channels from 1 to 16 2020-03-03 10:25:03 +01:00
Wim Taymans
33102abe4d pw-cat: dump midi events in vebose mode 2020-03-01 20:39:46 +01:00
Wim Taymans
70fc09b891 midifile: add support for event dump
Make a method to dump event info to stdout.
2020-03-01 20:39:07 +01:00
Wim Taymans
3b1fc4acce midifile: put some parsed data in the event
Put some of the data we parsed into the event.
2020-03-01 20:37:50 +01:00
Wim Taymans
2982b9511e pw-cat: simplify midi reading and writing 2020-02-28 20:35:28 +01:00
Wim Taymans
a3582f0e0f pw-cat: add midi recording 2020-02-27 15:37:12 +01:00
Wim Taymans
b7dbf4bbc1 pw-cat: rework midifile a little
Move the code to read and write midi into the midifile helper
and simplify things a bit.
2020-02-27 12:42:21 +01:00
Wim Taymans
9bec2e5d8a pw-cat: improve midi errors
EINVAL for invalid events and file
ENOENT for unknown event
2020-02-24 10:20:33 +01:00
Pantelis Antoniou
b445bdea27 Fix change_mask string generation
The change_mask string generation was buggy and confusing.
Fix it with something more usable.

Signed-off-by: Pantelis Antoniou <pantelis.antoniou@konsulko.com>
2020-02-21 15:14:31 +01:00
Wim Taymans
b33bd68bac improve error messages
Log an error when we send an error to the client so that we don't need
to log and error anymore.
Improve the error messages when we can
Move some warnings and errors to debug
2020-02-21 15:02:55 +01:00
Wim Taymans
918acd61ef pw-cli: use core object to map id to proxy
We can use the core object to get a proxy for a given id. From there
we can find the user data and the associated global if any.
2020-02-21 11:47:34 +01:00
Pantelis Antoniou
4175191d19 Fix printf attribute compilation errors
Signed-off-by: Pantelis Antoniou <pantelis.antoniou@konsulko.com>
2020-02-21 11:30:49 +01:00
Pantelis Antoniou
7ead270265 Implement JSON/YAML command for graph tree traversal
Implement a single command that allows viewing all information
about a remotes properties/parameters and info variables.

This patch creates a framework for accessing properties using
a simple dotted variable access method or JSON/YAML path expressions.

The root of the tree is a sequence of all globals objects, and
accessing a the first one is simply 0 (or /0 is JSON/YAML path form).

	pipewire-0>>graph 0
	id: 0
	type: PipeWire:Interface:Core
	permissions: rwx
	version: 3
	info:
	    id: 0
	    cookie: 1602594817
	    user_name: panto
	    host_name: nuc2
	    version: 0.2.96
	    name: pipewire-0
	    change_mask: props
	    props:
		pipewire.core.name: pipewire-0
		context.profile.modules: none
		pipewire.core.daemon: 1
		link.max-buffers: 16
		default.clock.rate: 48000
		default.clock.quantum: 1024
		default.clock.min-quantum: 32
		default.clock.max-quantum: 8192
		default.video.width: 640
		default.video.height: 480
		default.video.rate.num: 25
		default.video.rate.denom: 1
		mem.allow-mlock: true
		cpu.max-align: 32
		object.id: 0
	properties:
	    pipewire.core.name: pipewire-0

Displaying a nodes information is simply:

	pipewire-0>>graph /32
	id: 32
	type: PipeWire:Interface:Node
	permissions: rwx
	version: 3
	info:
	    id: 32
	    max_input_ports: 128
	    max_output_ports: 0
	    n_input_ports: 2
	    n_output_ports: 2
	    state: suspended
	    error:
	    change_mask: "n_input_ports,n_output_ports,state,props,params"
	    props:
		object.path: alsa:pcm:HDMI:3:playback
		api.alsa.path: "hw:0,3"
		api.alsa.pcm.card: 0
		api.alsa.pcm.device: 3
		api.alsa.pcm.subdevice: 0
		api.alsa.pcm.stream: playback
		api.alsa.pcm.id: "HDMI 0"
		api.alsa.pcm.name: "HDMI 0"
		api.alsa.pcm.subname: "subdevice #0"
		api.alsa.pcm.class: generic
		api.alsa.pcm.subclass: generic-mix
		api.alsa.pcm.sync-id: 00000000:00000000:00000000:00000000
		device.id: 26
		factory.name: api.alsa.pcm.sink
		priority.master: 696
		priority.session: 696
		media.class: Audio/Sink
		node.name: alsa_card.pci-0000:00:03.0.playback.3.0
		node.description: "Built-in Audio (HDMI 0)"
		factory.id: 17
		client.id: 24
		device.api: alsa
		node.driver: true
		factory.mode: merge
		audio.adapt.slave:
		library.name: audioconvert/libspa-audioconvert
		object.id: 32
	    params:
		EnumFormat:
		    mediaType: audio
		    mediaSubtype: raw
		    format:
			default: S32LE
			alt0: S32LE
			alt1: S16LE
		    rate:
			default: 48000
			min: 32000
			max: 48000
		    channels: 2
		    position:
		      - FL
		      - FR
		PropInfo:
		  - id: volume
		    name: Volume
		    type:
			default: 1.000000
			min: 0.000000
			max: 10.000000
		  - id: mute
		    name: Mute
		    type:
			default: false
			alt0: false
			alt1: true
		  - id: channelVolumes
		    name: "Channel Volumes"
		    type:
			default: 1.000000
			min: 0.000000
			max: 10.000000
		Props:
		    volume: 1.000000
		    mute: false
		    channelVolumes: []
		Format: {}
		EnumPortConfig:
		  - direction: Input
		    mode: dsp
		  - direction: Output
		    mode: dsp
		  - direction: Input
		    mode: convert
		  - direction: Output
		    mode: convert
		PortConfig: {}
	properties:
	    object.path: alsa:pcm:HDMI:3:playback
	    factory.id: 17
	    client.id: 24
	    device.id: 26
	    priority.session: 696
	    priority.master: 696
	    node.description: "Built-in Audio (HDMI 0)"
	    node.name: alsa_card.pci-0000:00:03.0.playback.3.0
	    media.class: Audio/Sink

To simply display the parameters of the same object:

	pipewire-0>>graph 32/info/params
	EnumFormat:
	    mediaType: audio
	    mediaSubtype: raw
	    format:
		default: S32LE
		alt0: S32LE
		alt1: S16LE
	    rate:
		default: 48000
		min: 32000
		max: 48000
	    channels: 2
	    position:
	      - FL
	      - FR
	PropInfo:
	  - id: volume
	    name: Volume
	    type:
		default: 1.000000
		min: 0.000000
		max: 10.000000
	  - id: mute
	    name: Mute
	    type:
		default: false
		alt0: false
		alt1: true
	  - id: channelVolumes
	    name: "Channel Volumes"
	    type:
		default: 1.000000
		min: 0.000000
		max: 10.000000
	Props:
	    volume: 1.000000
	    mute: false
	    channelVolumes: []
	Format: {}
	EnumPortConfig:
	  - direction: Input
	    mode: dsp
	  - direction: Output
	    mode: dsp
	  - direction: Input
	    mode: convert
	  - direction: Output
	    mode: convert
	PortConfig: {}

The graph command also supports the following options:

	-y Select YAML format (this is the default)
	-j Select JSON format
	-n Display numeric instead of textual IDs
	-f Display full type info, i.e. instead of EnumFormat will
	   display Spa:Enum:ParamId:EnumFormat

Signed-off-by: Pantelis Antoniou <pantelis.antoniou@konsulko.com>
2020-02-21 11:30:49 +01:00
Pantelis Antoniou
3b53a6e049 pw-cli: Collect and display parameters from global symbols
Until now there was no method to display parameters along with
information of their parent object.

This patchset stores parameter info in the global object so
that it may displayed along with its parent object.

This is a necessary step to be able to display and modify parameters
in a simple form like the following

pipewire-0>> set 12 volume=0.7
pipewire-0>> get 12 volume
0.7

Signed-off-by: Pantelis Antoniou <pantelis.antoniou@konsulko.com>
2020-02-21 11:30:49 +01:00
Wim Taymans
8b874a9514 pw-cat: handle midi EOF better
Return 0 when there are no more events, 1 when we have an event and
< 0 for errors. Use this to correctly push the last set of events on
EOS and then return 0 and stop without an error.
2020-02-21 11:19:35 +01:00
Wim Taymans
bdeeebfdd4 enable and fix -Werror=suggest-attribute=format 2020-02-20 18:20:04 +01:00
Wim Taymans
2a3bf485e7 pw-dot: rename lightgreen to palegreen
lightgreen does not seem to exist for me as a color, dot complains.
2020-02-20 13:28:34 +01:00
Wim Taymans
11086f23ea pod: add and use reserve_bytes helper 2020-02-19 11:02:00 +01:00
Wim Taymans
cc1ed84f9f midi: simplify some things 2020-02-19 10:48:16 +01:00
Wim Taymans
7df66cd6ad pw-cat: keep our own time
Don't try to use the time from the io_position, it is updated in
the RT thread and might be slightly wrong for our purposes.
2020-02-19 10:19:59 +01:00
Wim Taymans
ddcb08a98a pw-cat: read midi file from memory
mmap the midi file and read from memory. Simplifies some things and
allows us to potentially parse from the RT thread later.
2020-02-19 09:58:47 +01:00
Wim Taymans
b6a6d1f0bb pw-cat: fix tempo changes
Use time in seconds as event timestamp.
Apply tempo from the new events, keep track of elapsed time and
time since tempo change to get the right time.
Skip metadata midi in pw-cat.
2020-02-18 16:13:35 +01:00
Wim Taymans
fe616e38d8 pw-cat: add midi support 2020-02-18 13:38:26 +01:00
Wim Taymans
319df9fce9 pw-cat: add option to set resampler quality 2020-02-14 20:34:08 +01:00
Wim Taymans
0a26c478f7 pw-cat: small cleaups
Set endianness correctly
Move setup of output file format outside of sample format function.
2020-02-13 09:51:25 +01:00
Wim Taymans
5e71a01e8d pw-cat: fix setup of defaults
In record mode, setup the parameters before we open.
2020-02-13 08:59:41 +01:00
Wim Taymans
fe85a3b817 pw-cat: refactor a bit
Try to keep the sndfile code in one place
2020-02-12 17:57:42 +01:00
Wim Taymans
df65e0bcd3 pw-cat: fix remote name option 2020-02-12 13:39:47 +01:00
Wim Taymans
b2dfa83052 pw-cat: print channelmap in verbose mode 2020-02-06 16:50:59 +01:00
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
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