update to upstream pipewire-rs

This commit is contained in:
galister 2026-05-03 11:53:18 +09:00
parent 9734955ebb
commit 8212202217
3 changed files with 75 additions and 115 deletions

126
Cargo.lock generated
View File

@ -143,6 +143,16 @@ dependencies = [
"libc",
]
[[package]]
name = "annotate-snippets"
version = "0.11.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "710e8eae58854cdc1790fcb56cca04d712a17be849eeb81da2a724bf4bae2bc4"
dependencies = [
"anstyle",
"unicode-width 0.2.2",
]
[[package]]
name = "anstream"
version = "0.6.21"
@ -677,6 +687,7 @@ version = "0.72.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "993776b509cfb49c750f11b8f07a46fa23e0a1386ffc01fb1e7d343efc387895"
dependencies = [
"annotate-snippets",
"bitflags 2.10.0",
"cexpr",
"clang-sys",
@ -880,9 +891,9 @@ dependencies = [
[[package]]
name = "cfg-expr"
version = "0.15.8"
version = "0.20.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02"
checksum = "3c6b04e07d8080154ed4ac03546d9a2b303cc2fe1901ba0b35b301516e289368"
dependencies = [
"smallvec",
"target-lexicon",
@ -1051,7 +1062,7 @@ dependencies = [
"serde-untagged",
"serde_core",
"serde_json",
"toml 0.9.10+spec-1.1.0",
"toml",
"winnow",
"yaml-rust2",
]
@ -1096,9 +1107,6 @@ name = "cookie-factory"
version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9885fa71e26b8ab7855e2ec7cae6e9b380edff76cd052e07c683a0319d51b3a2"
dependencies = [
"futures",
]
[[package]]
name = "core-foundation"
@ -2881,24 +2889,23 @@ dependencies = [
[[package]]
name = "libspa"
version = "0.8.0"
source = "git+https://gitlab.freedesktop.org/galister/pipewire-rs.git?rev=6ef2cd1af41e5e8844c63c37ea9a01f0758079b0#6ef2cd1af41e5e8844c63c37ea9a01f0758079b0"
version = "0.9.2"
source = "git+https://gitlab.freedesktop.org/pipewire/pipewire-rs.git?rev=670b0aabf04263ece5dc1e752e5d64aeae3056e8#670b0aabf04263ece5dc1e752e5d64aeae3056e8"
dependencies = [
"bitflags 2.10.0",
"cc",
"convert_case 0.6.0",
"cookie-factory",
"libc",
"libspa-sys",
"nix 0.27.1",
"nom 7.1.3",
"nom 8.0.0",
"rustix 1.1.3",
"system-deps",
]
[[package]]
name = "libspa-sys"
version = "0.8.0"
source = "git+https://gitlab.freedesktop.org/galister/pipewire-rs.git?rev=6ef2cd1af41e5e8844c63c37ea9a01f0758079b0#6ef2cd1af41e5e8844c63c37ea9a01f0758079b0"
version = "0.9.2"
source = "git+https://gitlab.freedesktop.org/pipewire/pipewire-rs.git?rev=670b0aabf04263ece5dc1e752e5d64aeae3056e8#670b0aabf04263ece5dc1e752e5d64aeae3056e8"
dependencies = [
"bindgen",
"cc",
@ -3167,17 +3174,6 @@ version = "1.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086"
[[package]]
name = "nix"
version = "0.27.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053"
dependencies = [
"bitflags 2.10.0",
"cfg-if",
"libc",
]
[[package]]
name = "nix"
version = "0.29.0"
@ -3991,24 +3987,21 @@ dependencies = [
[[package]]
name = "pipewire"
version = "0.8.0"
source = "git+https://gitlab.freedesktop.org/galister/pipewire-rs.git?rev=6ef2cd1af41e5e8844c63c37ea9a01f0758079b0#6ef2cd1af41e5e8844c63c37ea9a01f0758079b0"
version = "0.9.2"
source = "git+https://gitlab.freedesktop.org/pipewire/pipewire-rs.git?rev=670b0aabf04263ece5dc1e752e5d64aeae3056e8#670b0aabf04263ece5dc1e752e5d64aeae3056e8"
dependencies = [
"anyhow",
"bitflags 2.10.0",
"libc",
"libspa",
"libspa-sys",
"nix 0.27.1",
"once_cell",
"pipewire-sys",
"thiserror 1.0.69",
"rustix 1.1.3",
]
[[package]]
name = "pipewire-sys"
version = "0.8.0"
source = "git+https://gitlab.freedesktop.org/galister/pipewire-rs.git?rev=6ef2cd1af41e5e8844c63c37ea9a01f0758079b0#6ef2cd1af41e5e8844c63c37ea9a01f0758079b0"
version = "0.9.2"
source = "git+https://gitlab.freedesktop.org/pipewire/pipewire-rs.git?rev=670b0aabf04263ece5dc1e752e5d64aeae3056e8#670b0aabf04263ece5dc1e752e5d64aeae3056e8"
dependencies = [
"bindgen",
"libspa-sys",
@ -4116,7 +4109,7 @@ version = "3.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983"
dependencies = [
"toml_edit 0.23.10+spec-1.0.0",
"toml_edit",
]
[[package]]
@ -4946,15 +4939,6 @@ dependencies = [
"syn 2.0.113",
]
[[package]]
name = "serde_spanned"
version = "0.6.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3"
dependencies = [
"serde",
]
[[package]]
name = "serde_spanned"
version = "1.0.4"
@ -5454,14 +5438,14 @@ dependencies = [
[[package]]
name = "system-deps"
version = "6.2.2"
version = "7.0.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349"
checksum = "48c8f33736f986f16d69b6cb8b03f55ddcad5c41acc4ccc39dd88e84aa805e7f"
dependencies = [
"cfg-expr",
"heck 0.5.0",
"pkg-config",
"toml 0.8.23",
"toml",
"version-compare",
]
@ -5479,9 +5463,9 @@ dependencies = [
[[package]]
name = "target-lexicon"
version = "0.12.16"
version = "0.13.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1"
checksum = "df7f62577c25e07834649fc3b39fafdc597c0a3527dc1c60129201ccfcbaa50c"
[[package]]
name = "tempfile"
@ -5684,40 +5668,21 @@ dependencies = [
"tokio",
]
[[package]]
name = "toml"
version = "0.8.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362"
dependencies = [
"serde",
"serde_spanned 0.6.9",
"toml_datetime 0.6.11",
"toml_edit 0.22.27",
]
[[package]]
name = "toml"
version = "0.9.10+spec-1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0825052159284a1a8b4d6c0c86cbc801f2da5afd2b225fa548c72f2e74002f48"
dependencies = [
"indexmap 2.12.1",
"serde_core",
"serde_spanned 1.0.4",
"toml_datetime 0.7.5+spec-1.1.0",
"serde_spanned",
"toml_datetime",
"toml_parser",
"toml_writer",
"winnow",
]
[[package]]
name = "toml_datetime"
version = "0.6.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c"
dependencies = [
"serde",
]
[[package]]
name = "toml_datetime"
version = "0.7.5+spec-1.1.0"
@ -5727,19 +5692,6 @@ dependencies = [
"serde_core",
]
[[package]]
name = "toml_edit"
version = "0.22.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a"
dependencies = [
"indexmap 2.12.1",
"serde",
"serde_spanned 0.6.9",
"toml_datetime 0.6.11",
"winnow",
]
[[package]]
name = "toml_edit"
version = "0.23.10+spec-1.0.0"
@ -5747,7 +5699,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "84c8b9f757e028cee9fa244aea147aab2a9ec09d5325a9b01e0a49730c2b5269"
dependencies = [
"indexmap 2.12.1",
"toml_datetime 0.7.5+spec-1.1.0",
"toml_datetime",
"toml_parser",
"winnow",
]
@ -5761,6 +5713,12 @@ dependencies = [
"winnow",
]
[[package]]
name = "toml_writer"
version = "1.1.1+spec-1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "756daf9b1013ebe47a8776667b466417e2d4c5679d441c26230efd9ef78692db"
[[package]]
name = "tracing"
version = "0.1.44"

View File

@ -32,8 +32,8 @@ drm-fourcc = "2.2.0"
idmap = { workspace = true }
libc = "0.2.178"
log = { workspace = true }
pipewire = { git = "https://gitlab.freedesktop.org/galister/pipewire-rs.git", rev = "6ef2cd1af41e5e8844c63c37ea9a01f0758079b0", features = [
"v0_3_33",
pipewire = { git = "https://gitlab.freedesktop.org/pipewire/pipewire-rs.git", rev = "670b0aabf04263ece5dc1e752e5d64aeae3056e8", features = [
"v0_3_33", "v0_3_65",
], optional = true }
#pipewire = { version = "0.8.0", features = ["v0_3_33"], optional = true }
rxscreen = { version = "0.1.7", features = [

View File

@ -17,14 +17,17 @@ use drm_fourcc::DrmFormat;
use drm_fourcc::DrmFourcc;
use drm_fourcc::DrmModifier;
use pipewire as pw;
use pipewire::context::ContextRc;
use pipewire::main_loop::MainLoopRc;
use pipewire::spa::buffer::meta::MetaVideoTransformValue;
use pipewire::spa::buffer::meta::{MetaCursor, MetaHeader, MetaHeaderFlags, MetaVideoTransform};
use pipewire::stream::StreamRc;
use pw::spa;
use pw::Error;
use pw::properties::properties;
use pw::stream::{Stream, StreamFlags};
use pw::{Error, context::Context, main_loop::MainLoop};
use spa::buffer::DataType;
use spa::buffer::MetaData;
use spa::buffer::MetaType;
use spa::param::ParamType;
use spa::param::video::VideoFormat;
use spa::param::video::VideoInfoRaw;
@ -278,12 +281,12 @@ where
R: Any,
{
log::debug!("{}: pipewire main_loop start", &name);
let main_loop = MainLoop::new(None)?;
let context = Context::new(&main_loop)?;
let core = context.connect(None)?;
let main_loop = MainLoopRc::new(None)?;
let context = ContextRc::new(&main_loop, None)?;
let core = context.connect_rc(None)?;
let stream = Stream::new(
&core,
let stream = StreamRc::new(
core,
&name,
properties! {
*pw::keys::MEDIA_TYPE => "Video",
@ -377,36 +380,35 @@ where
}
if let Some(mut buffer) = maybe_buffer {
if let MetaData::Header(header) = buffer.find_meta_data(MetaType::Header)
&& header.flags & spa::sys::SPA_META_HEADER_FLAG_CORRUPTED != 0
if let Some(header) = buffer.find_meta::<MetaHeader>()
&& header.flags().contains(MetaHeaderFlags::CORRUPTED)
{
log::warn!("{}: PipeWire buffer is corrupt.", &name);
return;
}
if let MetaData::VideoTransform(transform) =
buffer.find_meta_data(MetaType::VideoTransform)
{
format.transform = match transform.transform {
spa::sys::SPA_META_TRANSFORMATION_None => Transform::Normal,
spa::sys::SPA_META_TRANSFORMATION_90 => Transform::Rotated90,
spa::sys::SPA_META_TRANSFORMATION_180 => Transform::Rotated180,
spa::sys::SPA_META_TRANSFORMATION_270 => Transform::Rotated270,
spa::sys::SPA_META_TRANSFORMATION_Flipped => Transform::Flipped,
spa::sys::SPA_META_TRANSFORMATION_Flipped90 => Transform::Flipped90,
spa::sys::SPA_META_TRANSFORMATION_Flipped180 => Transform::Flipped180,
spa::sys::SPA_META_TRANSFORMATION_Flipped270 => Transform::Flipped270,
if let Some(transform) = buffer.find_meta::<MetaVideoTransform>() {
format.transform = match transform.transform() {
MetaVideoTransformValue::NONE => Transform::Normal,
MetaVideoTransformValue::ROTATED90 => Transform::Rotated90,
MetaVideoTransformValue::ROTATED180 => Transform::Rotated180,
MetaVideoTransformValue::ROTATED270 => Transform::Rotated270,
MetaVideoTransformValue::FLIPPED => Transform::Flipped,
MetaVideoTransformValue::FLIPPED90 => Transform::Flipped90,
MetaVideoTransformValue::FLIPPED180 => Transform::Flipped180,
MetaVideoTransformValue::FLIPPED270 => Transform::Flipped270,
_ => Transform::Undefined,
};
log::debug!("{}: Transform: {:?}", &name, &format.transform);
}
let mouse_meta = match buffer.find_meta_data(MetaType::Cursor) {
MetaData::Cursor(cursor) if cursor.id != 0 => Some(MouseMeta {
x: cursor.position.x as f32 / format.width as f32,
y: cursor.position.y as f32 / format.height as f32,
}),
_ => None,
};
let mouse_meta = buffer
.find_meta::<MetaCursor>()
.filter(|c| c.is_valid())
.map(|c| MouseMeta {
x: c.position().x as f32 / format.width as f32,
y: c.position().y as f32 / format.height as f32,
});
let datas = buffer.datas_mut();
if datas.is_empty() {