Modify architecture to run pipewire loop in second thread.

The pipewire loop now runs without interruption in a second thread and communicates with
the GTK thread via a channel in each direction, instead of checking for events once a second and using callbacks.

This allows changes to appear instantly in the view, instead of having to wait.
This commit is contained in:
Tom A. Wagner
2021-05-05 21:43:52 +02:00
parent 75aa0a30d0
commit 076fec7eb4
9 changed files with 292 additions and 346 deletions

64
Cargo.lock generated
View File

@@ -49,9 +49,9 @@ checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a"
[[package]]
name = "bindgen"
version = "0.57.0"
version = "0.58.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fd4865004a46a0aafb2a0a5eb19d3c9fc46ee5f063a6cfc605c69ac9ecf5263d"
checksum = "0f8523b410d7187a43085e7e064416ea32ded16bd0a4e6fc025e21616d01258f"
dependencies = [
"bitflags",
"cexpr",
@@ -108,7 +108,7 @@ source = "git+https://github.com/gtk-rs/gtk-rs#51fea9aa4aff93a0322e87ea27c090465
dependencies = [
"glib-sys",
"libc",
"system-deps 3.1.0",
"system-deps",
]
[[package]]
@@ -342,7 +342,7 @@ dependencies = [
"glib-sys",
"gobject-sys",
"libc",
"system-deps 3.1.0",
"system-deps",
]
[[package]]
@@ -372,7 +372,7 @@ dependencies = [
"gobject-sys",
"libc",
"pango-sys",
"system-deps 3.1.0",
"system-deps",
]
[[package]]
@@ -399,7 +399,7 @@ dependencies = [
"glib-sys",
"gobject-sys",
"libc",
"system-deps 3.1.0",
"system-deps",
"winapi",
]
@@ -441,7 +441,7 @@ version = "0.13.0"
source = "git+https://github.com/gtk-rs/gtk-rs#51fea9aa4aff93a0322e87ea27c090465f43f1f4"
dependencies = [
"libc",
"system-deps 3.1.0",
"system-deps",
]
[[package]]
@@ -457,7 +457,7 @@ source = "git+https://github.com/gtk-rs/gtk-rs#51fea9aa4aff93a0322e87ea27c090465
dependencies = [
"glib-sys",
"libc",
"system-deps 3.1.0",
"system-deps",
]
[[package]]
@@ -478,7 +478,7 @@ dependencies = [
"glib-sys",
"libc",
"pkg-config",
"system-deps 3.1.0",
"system-deps",
]
[[package]]
@@ -508,7 +508,7 @@ dependencies = [
"graphene-sys",
"libc",
"pango-sys",
"system-deps 3.1.0",
"system-deps",
]
[[package]]
@@ -563,7 +563,7 @@ dependencies = [
"gsk4-sys",
"libc",
"pango-sys",
"system-deps 3.1.0",
"system-deps",
]
[[package]]
@@ -581,7 +581,6 @@ version = "0.1.0"
dependencies = [
"env_logger",
"gtk4",
"libspa",
"log",
"once_cell",
"pipewire",
@@ -664,8 +663,7 @@ dependencies = [
[[package]]
name = "libspa"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "011074b4d7771195ec969f3053c5745d8cd22f4415e8348d3c574944b108b895"
source = "git+https://gitlab.freedesktop.org/pipewire/pipewire-rs?branch=main#f8dc21b0f85f391201e7c6346b121fbd21c02836"
dependencies = [
"bitflags",
"cc",
@@ -674,17 +672,16 @@ dependencies = [
"libc",
"libspa-sys",
"nom 6.1.2",
"system-deps 2.0.3",
"system-deps",
]
[[package]]
name = "libspa-sys"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "19351566b3a5adc05e491dfaef725869a0d5e3f206662a29f6ba64381d674769"
source = "git+https://gitlab.freedesktop.org/pipewire/pipewire-rs?branch=main#f8dc21b0f85f391201e7c6346b121fbd21c02836"
dependencies = [
"bindgen",
"system-deps 3.1.0",
"system-deps",
]
[[package]]
@@ -773,7 +770,7 @@ dependencies = [
"glib-sys",
"gobject-sys",
"libc",
"system-deps 3.1.0",
"system-deps",
]
[[package]]
@@ -806,14 +803,15 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
[[package]]
name = "pipewire"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e678fc8a43e7e4d5a211c4ce16517cf0a4bca520d96d9f4df15f26193ef120aa"
source = "git+https://gitlab.freedesktop.org/pipewire/pipewire-rs?branch=main#f8dc21b0f85f391201e7c6346b121fbd21c02836"
dependencies = [
"anyhow",
"bitflags",
"errno",
"libc",
"libspa",
"libspa-sys",
"once_cell",
"pipewire-sys",
"signal",
"thiserror",
@@ -822,12 +820,11 @@ dependencies = [
[[package]]
name = "pipewire-sys"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3afc6fc22dcdb1e80c445725e7f95b610640a38f591783b38c3d58133d5e2135"
source = "git+https://gitlab.freedesktop.org/pipewire/pipewire-rs?branch=main#f8dc21b0f85f391201e7c6346b121fbd21c02836"
dependencies = [
"bindgen",
"libspa-sys",
"system-deps 3.1.0",
"system-deps",
]
[[package]]
@@ -957,9 +954,9 @@ checksum = "558dc50e1a5a5fa7112ca2ce4effcb321b0300c0d4ccf0776a9f60cd89031171"
[[package]]
name = "shlex"
version = "0.1.1"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7fdf1b9db47230893d76faad238fd6097fd6d6a9245cd7a4d90dbd639536bbd2"
checksum = "42a568c8f2cd051a4d283bd6eb0343ac214c1b0f1ac19f93e1175b2dee38c73d"
[[package]]
name = "signal"
@@ -1024,21 +1021,6 @@ dependencies = [
"unicode-xid",
]
[[package]]
name = "system-deps"
version = "2.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1b59b8aafd652f3c1469f16e6c223121e8a8dbe40c71475209c1401cff3a67ef"
dependencies = [
"heck",
"pkg-config",
"strum",
"strum_macros",
"thiserror",
"toml",
"version-compare",
]
[[package]]
name = "system-deps"
version = "3.1.0"