Wim Taymans
5517a96202
link: don't try to do things with destroyed ports
...
When a port is destroyed, mark it as destroyed and avoid doing things
with the port because it is likely to fail.
2020-02-21 15:08:28 +01:00
Wim Taymans
5074ca37ff
protocol-native: Improve errors
...
A missing XDG_RUNTIME_DIR results in ENOENT, like on the server
side.
A too long name results in ENAMETOOLONG, like on the server side.
When we can't find the socket, return EHOSTDOWN to make it more
obvious what is going.
2020-02-21 15:05:43 +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
ee617682c3
audioconvert: implement Portconfig query
2020-02-21 14:59:38 +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
Pantelis Antoniou
e58d33e8d8
Terminate PW_KEY_SEC_LABEL key with '\0'
...
The socket call does not terminate the string with '\0' so
we have to use the length explicitly.
Signed-off-by: Pantelis Antoniou <pantelis.antoniou@konsulko.com>
2020-02-21 11:30:49 +01:00
Pantelis Antoniou
634a9558e4
Add a spa_debug_type_find_short_name method
...
Using the short name of a type without the base part is common enough
that a common utility method is warranted.
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
d8bac82e72
improve logging
...
Remove some harmless warnings from the log
Remove some excessive info logging
2020-02-21 11:09:34 +01:00
Wim Taymans
a528189d26
slave -> follower
...
We use master/follower terminology everywhere.
2020-02-21 10:47:32 +01:00
Wim Taymans
bdeeebfdd4
enable and fix -Werror=suggest-attribute=format
2020-02-20 18:20:04 +01:00
Wim Taymans
020ac545a8
0.3.0
2020-02-20 15:33:31 +01:00
Wim Taymans
c9a6f97364
make libpulse-simple symlinks for developement
2020-02-20 15:04:44 +01:00
Jan Koester
1facf8ed48
added simple api to pipewire pulseaudio wrapper
2020-02-20 13:38:59 +01:00
George Kiagiadakis
0bff0e345f
audioconvert: disable monitor port logic if both sides are in dsp mode
...
There is a use case where you may want to use audioconvert with
both input & output sides configured in dsp mode, for altering
the stream volume. When it is configured like that, the
IS_MONITOR_PORT macro wrongly thinks that all output ports except
the first one are monitor ports, originating in the merger instead
of the splitter.
This change fixes that and it also completely disables exposing
monitor ports, even if they are enabled, when both sides are in
dsp mode (fmt_input_port_info() also uses the same macro to check
if the monitor ports are to be exposed)
2020-02-20 12:34:42 +00: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
01934297bd
fix compilation warning
2020-02-20 12:03:16 +01:00
Wim Taymans
18590b7e0e
0.2.97
2020-02-19 20:24:51 +01:00
Wim Taymans
d3634aca7e
media-session: rework device reservation
...
Monitor the device reservation objects and mark the device available.
Don't select nodes from devices that are not available.
Acquire the device reservation when a device starts.
Release the device reservation when we suspend the device again.
2020-02-19 18:15:57 +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
ea911f2e3f
tweak buffers a little
...
JACK can handle 2 buffers at most, make the default buffer allocator
allocate 2 buffers when no params are given.
Prefer 2 buffers, it allows some form of async fill/consume
2020-02-19 10:17:00 +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
632c8440f8
builder: pass NULL to _raw to reserve memory
2020-02-19 09:57:57 +01:00
Wim Taymans
2a487d5fdb
filter: implement filter with Step
...
Implement filter between Step and Range as if the Step were a
range, ignoring the step value for now.
2020-02-18 18:04:05 +01:00
Wim Taymans
b3d94cde87
jack: fix stride of midi
...
Midi has a stride of 1
Error when the number of buffers is too big
2020-02-18 18:03:30 +01:00
Wim Taymans
1f3cb3d207
jack: fix invalid unlink
...
Don't unlink the mix->link when freeing, it is only linked when
in the free pool.
Protect against invalid number of buffers that could corrupt our
state.
2020-02-18 17:37:02 +01:00
Wim Taymans
463b9e4e29
buffers: handle -ENOENT
...
enum_param should return -ENOENT when the param is not known.
When negotiating buffers handle -ENOENT. This means the port does
not know about the property and we should assume anything is fine
so just use the filter from the first port.
2020-02-18 17:34:41 +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
427a6316d3
stream: also call process when queue is empty
...
When we just picked a buffer from the queue and it is now empty,
call the process method to fill up the queue again or else we
won't have a buffer for the next wakeup.
2020-02-18 13:38:25 +01:00
Wim Taymans
e6c3619521
jack: don't try to consume port without data
...
Or else we handle old data.
2020-02-18 13:38:25 +01:00
Wim Taymans
1239009d30
stream: add port properties
...
Set the port DSP property when dealing with midi.
2020-02-18 10:50:53 +01:00
Wim Taymans
9bd21d6c18
man: improve man pages a little
2020-02-18 10:36:28 +01:00
Wim Taymans
319df9fce9
pw-cat: add option to set resampler quality
2020-02-14 20:34:08 +01:00
Wim Taymans
75e14ecadc
resample: tweak resample qualities a little
2020-02-14 20:23:15 +01:00
Wim Taymans
621f6ca10b
resample: reset props first, then override
2020-02-14 20:22:55 +01:00
Wim Taymans
dbd483cb46
resample: add resample.quality property
2020-02-14 20:19:47 +01:00
Wim Taymans
3fab544d3d
resample: add quality property
2020-02-14 20:16:50 +01:00
Wim Taymans
0023aac9b9
resample: add some more qualities
...
Clamp quality to available qualities.
0 is a valid quality
2020-02-14 18:00:49 +01:00
Wim Taymans
484d211119
spa-resample: quality 0 is a valid value.
2020-02-14 16:55:37 +01:00
Wim Taymans
046f41c31c
test: fix number of queued samples
...
The number of queued samples is twice the delay.
2020-02-14 10:52:21 +01:00
Wim Taymans
6603fab405
spa-resample: flush last samples
...
Use 0 samples to flush out the last samples from the resampler.
2020-02-14 09:50:49 +01:00
Wim Taymans
039f6751e1
resample: fix delay reporting
2020-02-14 09:50:35 +01:00
Wim Taymans
5df1c5ae40
resample-native: fix phase shift
2020-02-13 20:41:14 +01:00
Wim Taymans
7267a6bc34
resample: remove old debug variable
2020-02-13 20:11:39 +01:00