Commit graph

2647 commits

Author SHA1 Message Date
Wim Taymans
e0f79bcbb8 io: add some more docs and memory io area 2019-10-16 11:10:57 +02:00
Wim Taymans
b37bf7e068 alsa-seq: ask for more data when consumed 2019-10-16 10:44:40 +02:00
Wim Taymans
6ad52b1a11 iter: check if size can hold a spa_pod 2019-10-16 10:44:12 +02:00
Wim Taymans
e28b5b8232 pipewire: return better errno symbol not found 2019-10-16 10:43:36 +02:00
Wim Taymans
2b75f28d8b remote: create/destroy mempool with the core proxy 2019-10-09 00:03:57 +02:00
Wim Taymans
e18ca6e9c8 protocol-native: don't try to flush when the source is gone
When the connection is broken, we destroy the source avoid trying
to flush when the source is gone.
2019-10-08 23:47:02 +02:00
Wim Taymans
082463efd0 protocol: add v0 compatibility
For flatpaks we need to be able to support older v0 protocol clients.
To handle this we have:

- the connection detects an old client when it receives the first
  message. It can do this by checking the sequence number, on old
  versions it contains the message size and is never 0, on new
  clients the sequence number is 0.

- We add a new signal at the start of the connection with the detected
  version number. This installs the right version of the core proxy.
  We also move the binding of the client until the hello message is
  received. This way we can have a new client connect (portal),
  hand over the connection to an old client, which then removes the
  client binding again in the hello request with a v0 version.
  There are some changes to the passing of fds in v0 vs v3 which need
  to investigated some more.

- bump version of our interfaces to 3. This makes it possible to
  have v0 and v3 protocol marshal functions.

- Add version number in the proxy. This is mostly automatically done
  internally based on the version numbers the library is compiled
  with. Where the version number was in the API before, it is now
  actually used to look up the right protocol marshal functions. For
  Proxies there is usually just 1 version, the current one. It is the
  server that will support different versions.

- Add v0 compat marshal functions to convert from and to v0 format.
  This has some complications. v0 has a type map it keeps in sync
  with the server. For this we have a static type map with mappings
  to our own v3 types. Pods are mostly the same except for objects
  that used to have arbitrary pods in v0 vs spa_pod_prop in v3. Also
  convert between v0 spa_pod_prop and v3 spa_pod_choice.
  Formats and commands are also slightly different so handle those
  mappings as well.
  We only have marshal functions for the server side (resource)
  v0 functions.

- Add v0 compatible client-node again. It's a bit tricky to map, v0
  client-node basically lets the server to the mixing and teeing
  and just does the processing of the internal node.
2019-10-08 23:20:18 +02:00
Wim Taymans
d99350635a protocol-native: add flags for future extensions 2019-10-08 22:46:25 +02:00
Wim Taymans
117db11f7e Remove some unused fields 2019-10-08 22:44:56 +02:00
Wim Taymans
9d842fb5eb improve debug and error reporting 2019-10-08 22:33:31 +02:00
Wim Taymans
9aadc753c0 type: add missing type-info for MemId 2019-10-08 22:30:00 +02:00
Wim Taymans
5693d72fcb audioadapter: expose parameter in port_info 2019-10-03 16:23:23 +02:00
Wim Taymans
0ecbe4844e mixer: Move floatmix to the audio mixer plugin
Move floatmix to the audiomixer plugin and change the name to
AUDIO_MIXER_DSP.
Add runtime selectable sse and sse2 optimizations.
Load the port mixer plugin dynamically based on the factory_name.
Add some more debug
2019-10-03 16:20:12 +02:00
Wim Taymans
27eabede35 volume: fix build 2019-10-03 09:38:41 +02:00
Phi|eas |ebada
1c23310595 Fix typo 2019-10-03 09:36:55 +02:00
Wim Taymans
36904e1612 dict: add function to sort 2019-10-03 09:31:34 +02:00
Wim Taymans
1f700e7cdd dict: add SORTED flag and faster lookup in that case 2019-10-03 09:29:51 +02:00
Wim Taymans
fb95e7660a media-session: start the midi bridge from the session 2019-10-02 21:12:42 +02:00
Wim Taymans
0a6ad1adec alsa: only emit PCM device when available
Only emit a PCM device if the device actually has one. Otherwise we
end up with a useless PCM device for a pure midi device.
2019-10-02 21:10:43 +02:00
Wim Taymans
6e0c279bc1 improve properties on objects 2019-10-02 20:16:12 +02:00
Wim Taymans
9c4e5f4e27 port: improve buffer handling
Remove the buffers_move method, it's not needed.
2019-10-02 18:34:03 +02:00
Wim Taymans
d4fab985a2 small leak fixes 2019-10-02 18:33:47 +02:00
Wim Taymans
5cfb6634f4 port: select a mixer when we set a format
When the port receives a format, look if we can find a mixer for it
and configure it.

Use the float32 mono mixer when possible.

Use the new pw_buffers in the link.

Let the port allocate buffers between the mixer and node when
requested.

The client-node doesn't need a mixer because mixing is done on the
client.

Remove all mixer and buffer negotiation code from adapter because
it is now done at the port level.
2019-10-02 18:07:10 +02:00
Wim Taymans
4a47bf4706 buffers: refactor buffer allocation code
Refactor the code in pw_link to allocate buffers. Add some more
options and make it generally useful to negotiate buffers between
2 ports.
2019-10-02 18:05:48 +02:00
Wim Taymans
93a2defbb8 alsa-seq: reset buffers 2019-10-02 18:02:40 +02:00
Wim Taymans
e04d58ee3a Improve some debug 2019-10-02 18:02:07 +02:00
Wim Taymans
6e0ffb0c47 flags: change flag macros
SPA_FLAG_CHECK -> SPA_FLAG_IS_SET
SPA_FLAG_UNSET -> SPA_FLAG_CLEAR
Add SPA_FLAG_UPDATE
2019-10-02 18:00:42 +02:00
Wim Taymans
cc8e992cd1 protocol: improve flushing
Use the IO_OUT flag to schedule flushing instead of a flush_event.

Handle EGAIN and wait for IO_OUT to try again.

Fixes #111
2019-10-01 12:53:56 +02:00
Wim Taymans
3d48ba8394 connection: move remaining data and fds
If we can't send all of the data, move the remaining data to the
start of the buffer so that we can send it again later.

See #111
2019-10-01 10:45:20 +02:00
Wim Taymans
f59a43a4f0 v4l2: improve is_capture check 2019-10-01 10:13:42 +02:00
Wim Taymans
82ee139f65 spa: improve object properties 2019-10-01 10:04:22 +02:00
Wim Taymans
dc83c10c9a media-session: add device reservation for alsa
Implement the device reservation DBus API.

When we acquire the device name, set our device profile to 'On'. This
adds our sources and sinks to the graph.

When we lose the name, switch back to 'Off' and remove our nodes
again.

Move the session mamager stuff in a directory.

Fixes #191
2019-09-30 21:51:46 +02:00
Wim Taymans
96ac81958b properties: setf with NULL format is like remove 2019-09-30 10:41:31 +02:00
Barry Song
df495b5a8e link: fix the race condition of port_set_io
This patch is fixing random crashes when vlc player connects rtsp.
we have two places to do link_activate, one is in node_activate(1),
the other one happens on link_paused(2).

The order of (1) and (2) can vary for each different connection.
Sometimes, (1) comes before (2); Sometimes, (1) comes after (2).
This will cause one crash in about five connections from vlc to
rtsp.

If link_paused(2) is earlier than node_activate, it will do set_io
and make activated=true, then when node_activate(1) comes, nothing
will happen:
int pw_link_activate(struct pw_link *this)
{
        struct impl *impl = SPA_CONTAINER_OF(this, struct impl, this);
        int res;

        pw_log_debug(NAME" %p: activate %d %d", this, impl->activated, this->info.state);

        if (impl->activated)
                return 0;
        ...
}
In this case, everything works well.

If node_activate(1) is earlier than (2), it will do port_set_io, but
"activated" will still be false after port_set_io since the link state
can be not PW_LINK_STATE_PAUSED:
int pw_link_activate(struct pw_link *this)
{
        struct impl *impl = SPA_CONTAINER_OF(this, struct impl, this);
        int res;

        pw_log_debug(NAME" %p: activate %d %d", this, impl->activated, this->info.state);

        if (impl->activated)
                return 0;

        pw_link_prepare(this);

        ... // port_set_io

        if (this->info.state == PW_LINK_STATE_PAUSED) {
                pw_loop_invoke(this->output->node->data_loop,
                       do_activate_link, SPA_ID_INVALID, NULL, 0, false, this);
                impl->activated = true;
        }
        return 0;
}
Then when link_paused(2) happens after (1), port_set_io will be done
again.
This will lead to random crash of pipewire.

Signed-off-by: Barry Song

Fixes #186
2019-09-30 09:32:35 +02:00
Wim Taymans
4421cc473b Revert "link: only set port io once"
This reverts commit 024429ea7b.
2019-09-30 09:27:00 +02:00
Wim Taymans
990ecd20c5 vulkan: handle older versions
Fixes #183
2019-09-27 10:53:36 +02:00
Wim Taymans
024429ea7b link: only set port io once
Only set port_io once.

Fixes #186
2019-09-27 10:34:51 +02:00
Wim Taymans
c59af4debc examples: copy properties for pw_remote_export()
pw_remote_export() takes ownership of the properties so make a copy
of the ones we still want to hold on to.
2019-09-27 10:13:21 +02:00
Wim Taymans
68fc530d9c remote: take ownership of properties in _export()
pw_remote_export() takes ownership of the properties so implement
this in the device and spa_node export functions.

Fixes #187
2019-09-27 10:06:25 +02:00
Wim Taymans
50fc65a07e pulseaudio: update 2019-09-27 09:50:24 +02:00
George Kiagiadakis
5183e1d4b4 bluez-monitor: fix usage of pw_properties_setf without a format string
Otherwise compilation will fail with certain -Wformat-security flags
Add the flag to the warnings.
2019-09-26 17:26:23 +02:00
Wim Taymans
56cf3196a2 Update NEWS 2019-09-26 16:53:05 +02:00
Wim Taymans
8b69fbb27a Merge branch 'work' into master 2019-09-26 16:48:17 +02:00
Wim Taymans
14c11c0fe4 Release 0.2.7 2019-09-26 15:58:39 +02:00
Wim Taymans
312864d9e9 protocol-native: attempt to remove socket
After we grab the lockfile we should remove the socket when it
exists so that we can bind again. This should solve startup
problems after a crash, which left the socket around and caused
bind failures.
2019-09-26 15:41:03 +02:00
Wim Taymans
44840c4a55 alsa-seq: add some comments 2019-09-26 15:17:00 +02:00
Wim Taymans
f539b42a03 alsa: improve midi
Add some debug
Ignore ports without buffers.
2019-09-26 11:57:25 +02:00
Wim Taymans
8d472befaa alsa-seq: Improve connection setup 2019-09-25 10:48:25 +02:00
Wim Taymans
efe3aba608 adapter: put port channel in port name if possible 2019-09-25 10:44:40 +02:00
Wim Taymans
f0b3ed5257 alsa-seq: improve timings
Track the position of the clock instead of our own timer.
Implement stop.
2019-09-25 10:14:25 +02:00