From 748086f50d7244be75a8173c4cbb8da8634f2ece Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20J=C3=B6rdens?= Date: Tue, 23 Dec 2025 14:44:30 +0100 Subject: [PATCH 1/8] idsp: process --- Cargo.lock | 681 ++++++++++++++++++++++++----------------- Cargo.toml | 15 +- src/bin/psd.rs | 2 +- src/bin/stream_test.rs | 2 +- src/psd.rs | 92 +++--- src/source.rs | 3 +- 6 files changed, 450 insertions(+), 345 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index fd09ad7..ca0d559 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -50,9 +50,9 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" dependencies = [ "memchr", ] @@ -64,7 +64,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef6978589202a00cd7e118380c448a08b6ed394c3a8df3a430d0898e3a42d046" dependencies = [ "android-properties", - "bitflags 2.9.4", + "bitflags 2.10.0", "cc", "cesu8", "jni", @@ -116,22 +116,22 @@ dependencies = [ [[package]] name = "anstyle-query" -version = "1.1.4" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e231f6134f61b71076a3eab506c379d4f36122f2af15a9ff04415ea4c3339e2" +checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" dependencies = [ - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] name = "anstyle-wincon" -version = "3.0.10" +version = "3.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e0633414522a32ffaac8ac6cc8f748e090c5717661fddeea04219e2344f5f2a" +checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" dependencies = [ "anstyle", "once_cell_polyfill", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -213,11 +213,11 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.9.4" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" +checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" dependencies = [ - "serde", + "serde_core", ] [[package]] @@ -231,9 +231,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.19.0" +version = "3.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" +checksum = "5dd9dc738b7a8311c7ade152424974d8115f2cdad61e8dab8dac9f2362298510" [[package]] name = "bytemuck" @@ -263,9 +263,9 @@ checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" [[package]] name = "bytes" -version = "1.10.1" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" +checksum = "b35204fbdc0b3f4446b89fc1ac2cf84a8a68971995d0bf2e925ec7cd960f9cb3" [[package]] name = "calloop" @@ -273,7 +273,7 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "log", "polling", "rustix 0.38.44", @@ -281,23 +281,48 @@ dependencies = [ "thiserror 1.0.69", ] +[[package]] +name = "calloop" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb9f6e1368bd4621d2c86baa7e37de77a938adf5221e5dd3d6133340101b309e" +dependencies = [ + "bitflags 2.10.0", + "polling", + "rustix 1.1.2", + "slab", + "tracing", +] + [[package]] name = "calloop-wayland-source" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95a66a987056935f7efce4ab5668920b5d0dac4a7c99991a67395f13702ddd20" dependencies = [ - "calloop", + "calloop 0.13.0", "rustix 0.38.44", "wayland-backend", "wayland-client", ] +[[package]] +name = "calloop-wayland-source" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "138efcf0940a02ebf0cc8d1eff41a1682a46b431630f4c52450d6265876021fa" +dependencies = [ + "calloop 0.14.3", + "rustix 1.1.2", + "wayland-backend", + "wayland-client", +] + [[package]] name = "cc" -version = "1.2.41" +version = "1.2.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac9fe6cdbb24b6ade63616c0a0688e45bb56732262c158df3c0c4bea4ca47cb7" +checksum = "9f50d563227a1c37cc0a263f64eca3334388c01c5e4c4861a9def205c614383c" dependencies = [ "find-msvc-tools", "jobserver", @@ -313,9 +338,9 @@ checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" [[package]] name = "cfg-if" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "cfg_aliases" @@ -334,9 +359,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.48" +version = "4.5.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2134bb3ea021b78629caa971416385309e0131b351b25e01dc16fb54e1b5fae" +checksum = "c9e340e012a1bf4935f5282ed1436d1489548e8f72308207ea5df0e23d2d03f8" dependencies = [ "clap_builder", "clap_derive", @@ -344,9 +369,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.48" +version = "4.5.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2ba64afa3c0a6df7fa517765e31314e983f51dda798ffba27b988194fb65dc9" +checksum = "d76b5d13eaa18c901fd2f7fca939fefe3a0727a953561fefdf3b2922b8569d00" dependencies = [ "anstream", "anstyle", @@ -356,9 +381,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.47" +version = "4.5.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbfd7eae0b0f1a6e63d4b13c9c478de77c2eb546fba158ad50b4203dc24b9f9c" +checksum = "2a0b5487afeab2deb2ff4e03a807ad1a03ac532ff5a2cee5d86884440c7f7671" dependencies = [ "heck", "proc-macro2", @@ -368,9 +393,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.7.5" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675" +checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d" [[package]] name = "clipboard-win" @@ -498,8 +523,18 @@ version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" dependencies = [ - "darling_core", - "darling_macro", + "darling_core 0.20.11", + "darling_macro 0.20.11", +] + +[[package]] +name = "darling" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0" +dependencies = [ + "darling_core 0.21.3", + "darling_macro 0.21.3", ] [[package]] @@ -516,13 +551,38 @@ dependencies = [ "syn", ] +[[package]] +name = "darling_core" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn", +] + [[package]] name = "darling_macro" version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ - "darling_core", + "darling_core 0.20.11", + "quote", + "syn", +] + +[[package]] +name = "darling_macro" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" +dependencies = [ + "darling_core 0.21.3", "quote", "syn", ] @@ -542,7 +602,7 @@ version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2d5bcf7b024d6835cfb3d473887cd966994907effbe9227e8c8219824d06c4e8" dependencies = [ - "darling", + "darling 0.20.11", "proc-macro2", "quote", "syn", @@ -570,7 +630,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "objc2 0.6.3", ] @@ -596,9 +656,9 @@ dependencies = [ [[package]] name = "document-features" -version = "0.2.11" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95249b50c6c185bee49034bcb378a49dc2b5dff0be90ff6616d31d64febab05d" +checksum = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61" dependencies = [ "litrs", ] @@ -615,11 +675,23 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76" +[[package]] +name = "dsp-fixedpoint" +version = "0.1.0" +dependencies = [ + "num-traits", + "serde", +] + +[[package]] +name = "dsp-process" +version = "0.1.0" + [[package]] name = "ecolor" -version = "0.33.0" +version = "0.33.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adf31f99fad93fe83c1055b92b5c1b135f1ecfa464789817c372000e768d4bd1" +checksum = "71ddb8ac7643d1dba1bb02110e804406dd459a838efcb14011ced10556711a8e" dependencies = [ "bytemuck", "emath", @@ -628,9 +700,9 @@ dependencies = [ [[package]] name = "eframe" -version = "0.33.0" +version = "0.33.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b829d302a09deb4acde242262a1840ba14fadd0371980ebf713060077a1987bc" +checksum = "457481173e6db5ca9fa2be93a58df8f4c7be639587aeb4853b526c6cf87db4e6" dependencies = [ "ahash", "bytemuck", @@ -666,13 +738,13 @@ dependencies = [ [[package]] name = "egui" -version = "0.33.0" +version = "0.33.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab9b5d3376c79439f53a78bf7da1e3c0b862ffa3e29f46ab0f3e107430f2e576" +checksum = "6a9b567d356674e9a5121ed3fedfb0a7c31e059fe71f6972b691bcd0bfc284e3" dependencies = [ "accesskit", "ahash", - "bitflags 2.9.4", + "bitflags 2.10.0", "emath", "epaint", "log", @@ -686,9 +758,9 @@ dependencies = [ [[package]] name = "egui-wgpu" -version = "0.33.0" +version = "0.33.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cef1fe83ba30b3d045814b2d811804f2a7e50a832034c975408f71c20df596e4" +checksum = "5e4d209971c84b2352a06174abdba701af1e552ce56b144d96f2bd50a3c91236" dependencies = [ "ahash", "bytemuck", @@ -706,9 +778,9 @@ dependencies = [ [[package]] name = "egui-winit" -version = "0.33.0" +version = "0.33.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb4ea8cb063c00d8f23ce11279c01eb63a195a72be0e21d429148246dab7983e" +checksum = "ec6687e5bb551702f4ad10ac428bab12acf9d53047ebb1082d4a0ed8c6251a29" dependencies = [ "arboard", "bytemuck", @@ -728,9 +800,9 @@ dependencies = [ [[package]] name = "egui_glow" -version = "0.33.0" +version = "0.33.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "668c0d4f726cc33838f0915f6b8c00af0ca0910e975ab58cf34b3e39c614552c" +checksum = "6420863ea1d90e750f75075231a260030ad8a9f30a7cef82cdc966492dc4c4eb" dependencies = [ "bytemuck", "egui", @@ -756,9 +828,9 @@ dependencies = [ [[package]] name = "emath" -version = "0.33.0" +version = "0.33.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c615516cdceec867065f20d7db13d8eb8aedd65c9e32cc0c7c379380fa42e6e8" +checksum = "491bdf728bf25ddd9ad60d4cf1c48588fa82c013a2440b91aa7fc43e34a07c32" dependencies = [ "bytemuck", "serde", @@ -777,9 +849,9 @@ dependencies = [ [[package]] name = "env_filter" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "186e05a59d4c50738528153b83b0b0194d3a29507dfec16eccd4b342903397d0" +checksum = "1bf3c259d255ca70051b30e2e95b5446cdb8949ac4cd22c0d7fd634d89f568e2" dependencies = [ "log", "regex", @@ -800,9 +872,9 @@ dependencies = [ [[package]] name = "epaint" -version = "0.33.0" +version = "0.33.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9926b9500ccb917adb070207ec722dd8ea78b8321f94a85ebec776f501f2930c" +checksum = "009d0dd3c2163823a0abdb899451ecbc78798dec545ee91b43aff1fa790bab62" dependencies = [ "ab_glyph", "ahash", @@ -819,9 +891,9 @@ dependencies = [ [[package]] name = "epaint_default_fonts" -version = "0.33.0" +version = "0.33.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66054d943c66715c6003a27a3dc152d87cadf714ef2597ccd79f550413009b97" +checksum = "5c4fbe202b6578d3d56428fa185cdf114a05e49da05f477b3c7f0fbb221f1862" [[package]] name = "equivalent" @@ -876,15 +948,15 @@ dependencies = [ [[package]] name = "find-msvc-tools" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52051878f80a721bb68ebfbc930e07b65ba72f2da88968ea5c06fd6ca3d3a127" +checksum = "3a3076410a55c90011c298b04d0cfa770b00fa04e1e3c97d3f6c9de105a03844" [[package]] name = "flate2" -version = "1.1.4" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc5a4e564e38c699f2880d3fda590bedc2e69f3f84cd48b457bd892ce61d0aa9" +checksum = "bfe33edd8e85a12a67454e37f8c75e730830d83e313556ab9ebf9ee7fbeb3bfb" dependencies = [ "crc32fast", "miniz_oxide", @@ -940,24 +1012,24 @@ dependencies = [ [[package]] name = "gethostname" -version = "1.0.2" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc257fdb4038301ce4b9cd1b3b51704509692bb3ff716a410cbd07925d9dae55" +checksum = "1bd49230192a3797a9a4d6abe9b3eed6f7fa4c8a8a4947977c6f80025f92cbd8" dependencies = [ "rustix 1.1.2", - "windows-targets 0.52.6", + "windows-link", ] [[package]] name = "getrandom" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" dependencies = [ "cfg-if", "libc", "r-efi", - "wasi", + "wasip2", ] [[package]] @@ -989,7 +1061,7 @@ version = "0.32.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "12124de845cacfebedff80e877bb37b5b75c34c5a4c89e47e1cdd67fb6041325" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "cfg_aliases", "cgl", "dispatch2", @@ -1051,9 +1123,9 @@ dependencies = [ [[package]] name = "half" -version = "2.7.0" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e54c115d4f30f52c67202f079c5f9d8b49db4691f460fdb0b4c2e838261b2ba5" +checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b" dependencies = [ "cfg-if", "crunchy", @@ -1063,9 +1135,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.16.0" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" +checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" dependencies = [ "foldhash", ] @@ -1090,18 +1162,18 @@ checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" [[package]] name = "home" -version = "0.5.11" +version = "0.5.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" +checksum = "cc627f471c528ff0c4a49e1d5e60450c8f6461dd6d10ba9dcd3a61d3dff7728d" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] name = "icu_collections" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" +checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43" dependencies = [ "displaydoc", "potential_utf", @@ -1112,9 +1184,9 @@ dependencies = [ [[package]] name = "icu_locale_core" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" +checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6" dependencies = [ "displaydoc", "litemap", @@ -1125,11 +1197,10 @@ dependencies = [ [[package]] name = "icu_normalizer" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" +checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599" dependencies = [ - "displaydoc", "icu_collections", "icu_normalizer_data", "icu_properties", @@ -1140,42 +1211,38 @@ dependencies = [ [[package]] name = "icu_normalizer_data" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" +checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" [[package]] name = "icu_properties" -version = "2.0.1" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" +checksum = "020bfc02fe870ec3a66d93e677ccca0562506e5872c650f893269e08615d74ec" dependencies = [ - "displaydoc", "icu_collections", "icu_locale_core", "icu_properties_data", "icu_provider", - "potential_utf", "zerotrie", "zerovec", ] [[package]] name = "icu_properties_data" -version = "2.0.1" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" +checksum = "616c294cf8d725c6afcd8f55abc17c56464ef6211f9ed59cccffe534129c77af" [[package]] name = "icu_provider" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" +checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614" dependencies = [ "displaydoc", "icu_locale_core", - "stable_deref_trait", - "tinystr", "writeable", "yoke", "zerofrom", @@ -1212,10 +1279,10 @@ dependencies = [ [[package]] name = "idsp" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0aff21db97b9679ca4b7534008aea7acdd1c11fea5d42b2a0ed50bd655d68fcf" +version = "0.19.0" dependencies = [ + "dsp-fixedpoint", + "dsp-process", "miniconf", "num-complex", "num-traits", @@ -1226,9 +1293,9 @@ dependencies = [ [[package]] name = "image" -version = "0.25.8" +version = "0.25.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "529feb3e6769d234375c4cf1ee2ce713682b8e76538cb13f9fc23e1400a591e7" +checksum = "e6506c6c10786659413faa717ceebcb8f70731c0a60cbae39795fdf114519c1a" dependencies = [ "bytemuck", "byteorder-lite", @@ -1240,9 +1307,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.11.4" +version = "2.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5" +checksum = "0ad4bb2b565bca0645f4d68c5c9af97fba094e9791da685bf83cb5f3ce74acf2" dependencies = [ "equivalent", "hashbrown", @@ -1250,34 +1317,34 @@ dependencies = [ [[package]] name = "is_terminal_polyfill" -version = "1.70.1" +version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" +checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" [[package]] name = "itoa" -version = "1.0.15" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" +checksum = "7ee5b5339afb4c41626dde77b7a611bd4f2c202b897852b4bcf5d03eddc61010" [[package]] name = "jiff" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be1f93b8b1eb69c77f24bbb0afdf66f54b632ee39af40ca21c4365a1d7347e49" +checksum = "49cce2b81f2098e7e3efc35bc2e0a6b7abec9d34128283d7a26fa8f32a6dbb35" dependencies = [ "jiff-static", "log", "portable-atomic", "portable-atomic-util", - "serde", + "serde_core", ] [[package]] name = "jiff-static" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03343451ff899767262ec32146f6d559dd759fdadf42ff0e227c7c48f72594b4" +checksum = "980af8b43c3ad5d8d349ace167ec8170839f753a42d233ba19e08afe1850fa69" dependencies = [ "proc-macro2", "quote", @@ -1318,9 +1385,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.81" +version = "0.3.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec48937a97411dcb524a265206ccd4c90bb711fca92b2792c407f268825b9305" +checksum = "464a3709c7f55f1f721e5389aa6ea4e3bc6aba669353300af094b29ffbdde1d8" dependencies = [ "once_cell", "wasm-bindgen", @@ -1334,9 +1401,9 @@ checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" [[package]] name = "libc" -version = "0.2.177" +version = "0.2.178" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" +checksum = "37c93d8daa9d8a012fd8ab92f088405fb202ea0b6ab73ee2482ae66af4f42091" [[package]] name = "libloading" @@ -1356,13 +1423,13 @@ checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" [[package]] name = "libredox" -version = "0.1.10" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" +checksum = "df15f6eac291ed1cf25865b1ee60399f57e7c227e7f51bdbd4c5270396a9ed50" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "libc", - "redox_syscall 0.5.18", + "redox_syscall 0.6.0", ] [[package]] @@ -1379,15 +1446,15 @@ checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" [[package]] name = "litemap" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" +checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" [[package]] name = "litrs" -version = "0.4.2" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5e54036fe321fd421e10d732f155734c4e4afd610dd556d9a82833ab3ee0bed" +checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092" [[package]] name = "lock_api" @@ -1400,9 +1467,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.28" +version = "0.4.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" +checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" [[package]] name = "memchr" @@ -1412,9 +1479,9 @@ checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" [[package]] name = "memmap2" -version = "0.9.8" +version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "843a98750cd611cc2965a8213b53b43e715f13c37a9e096c6408e69990961db7" +checksum = "744133e4a0e0a658e1374cf3bf8e415c4052a15a111acd372764c55b4177d490" dependencies = [ "libc", ] @@ -1430,9 +1497,9 @@ dependencies = [ [[package]] name = "miniconf" -version = "0.19.0" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba8be0161220741600b1780aeb762e495612923a28aa63824e6598cbdb2c8c15" +checksum = "111e5168eaece53a023515c386ebe4581e382a21cb91f1134c3a2efcddb9bf71" dependencies = [ "itoa", "miniconf_derive", @@ -1442,11 +1509,11 @@ dependencies = [ [[package]] name = "miniconf_derive" -version = "0.19.0" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a85197d39f81603fd67a8b4cba3e35c879133aa3044ee7d953e2526f5edbe258" +checksum = "9826a0808d011e3217d93fd84ac670d75782d1f5962438b53a3f580f4dc14016" dependencies = [ - "darling", + "darling 0.21.3", "proc-macro2", "quote", "syn", @@ -1464,9 +1531,9 @@ dependencies = [ [[package]] name = "moxcms" -version = "0.7.6" +version = "0.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cc7d85f3d741164e8972ad355e26ac6e51b20fcae5f911c7da8f2d8bbbb3f33" +checksum = "ac9557c559cd6fc9867e122e20d2cbefc9ca29d80d027a8e39310920ed2f0a97" dependencies = [ "num-traits", "pxfm", @@ -1474,13 +1541,13 @@ dependencies = [ [[package]] name = "naga" -version = "27.0.0" +version = "27.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12b2e757b11b47345d44e7760e45458339bc490463d9548cd8651c53ae523153" +checksum = "066cf25f0e8b11ee0df221219010f213ad429855f57c494f995590c861a9a7d8" dependencies = [ "arrayvec", "bit-set", - "bitflags 2.9.4", + "bitflags 2.10.0", "cfg-if", "cfg_aliases", "codespan-reporting", @@ -1503,7 +1570,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "jni-sys", "log", "ndk-sys", @@ -1564,9 +1631,9 @@ dependencies = [ [[package]] name = "num_enum" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a973b4e44ce6cad84ce69d797acf9a044532e4184c4f267913d1b546a0727b7a" +checksum = "b1207a7e20ad57b847bbddc6776b968420d38292bbfe2089accff5e19e82454c" dependencies = [ "num_enum_derive", "rustversion", @@ -1574,9 +1641,9 @@ dependencies = [ [[package]] name = "num_enum_derive" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77e878c846a8abae00dd069496dbe8751b16ac1c3d6bd2a7283a938e8228f90d" +checksum = "ff32365de1b6743cb203b710788263c44a03de03802daf96092f2da4fe6ba4d7" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -1615,7 +1682,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "block2", "libc", "objc2 0.5.2", @@ -1631,7 +1698,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "objc2 0.6.3", "objc2-core-foundation", "objc2-core-graphics", @@ -1644,7 +1711,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "block2", "objc2 0.5.2", "objc2-core-location", @@ -1668,7 +1735,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "block2", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -1680,7 +1747,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "dispatch2", "objc2 0.6.3", ] @@ -1691,7 +1758,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "dispatch2", "objc2 0.6.3", "objc2-core-foundation", @@ -1734,7 +1801,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "block2", "dispatch", "libc", @@ -1747,7 +1814,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "objc2 0.6.3", "objc2-core-foundation", ] @@ -1758,7 +1825,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "objc2 0.6.3", "objc2-core-foundation", ] @@ -1781,7 +1848,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "block2", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -1793,7 +1860,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "block2", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -1816,7 +1883,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "block2", "objc2 0.5.2", "objc2-cloud-kit", @@ -1848,7 +1915,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "block2", "objc2 0.5.2", "objc2-core-location", @@ -1863,15 +1930,15 @@ checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" [[package]] name = "once_cell_polyfill" -version = "1.70.1" +version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" +checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" [[package]] name = "orbclient" -version = "0.3.48" +version = "0.3.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba0b26cec2e24f08ed8bb31519a9333140a6599b867dac464bb150bdb796fd43" +checksum = "247ad146e19b9437f8604c21f8652423595cf710ad108af40e77d3ae6e96b827" dependencies = [ "libredox", ] @@ -1952,7 +2019,7 @@ version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97baced388464909d42d89643fe4361939af9b7ce7a31ee32a168f832a70f2a0" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "crc32fast", "fdeflate", "flate2", @@ -1975,9 +2042,9 @@ dependencies = [ [[package]] name = "portable-atomic" -version = "1.11.1" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" +checksum = "f59e70c4aef1e55797c2e8fd94a4f2a973fc972cfde0e0b05f683667b0cd39dd" [[package]] name = "portable-atomic-util" @@ -1990,9 +2057,9 @@ dependencies = [ [[package]] name = "potential_utf" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84df19adbe5b5a0782edcab45899906947ab039ccf4573713735ee7de1e6b08a" +checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" dependencies = [ "zerovec", ] @@ -2026,9 +2093,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.101" +version = "1.0.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" +checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" dependencies = [ "unicode-ident", ] @@ -2041,9 +2108,9 @@ checksum = "3eb8486b569e12e2c32ad3e204dbaba5e4b5b216e9367044f25f1dba42341773" [[package]] name = "pxfm" -version = "0.1.25" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3cbdf373972bf78df4d3b518d07003938e2c7d1fb5891e55f9cb6df57009d84" +checksum = "7186d3822593aa4393561d186d1393b3923e9d6163d3fbfd6e825e3e6cf3e6a8" dependencies = [ "num-traits", ] @@ -2065,9 +2132,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.41" +version = "1.0.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" +checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f" dependencies = [ "proc-macro2", ] @@ -2128,14 +2195,23 @@ version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", +] + +[[package]] +name = "redox_syscall" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec96166dafa0886eb81fe1c0a388bece180fbef2135f97c1e2cf8302e74b43b5" +dependencies = [ + "bitflags 2.10.0", ] [[package]] name = "regex" -version = "1.11.3" +version = "1.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b5288124840bee7b386bc413c487869b360b2b4ec421ea56425128692f2a82c" +checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" dependencies = [ "aho-corasick", "memchr", @@ -2145,9 +2221,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.11" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "833eb9ce86d40ef33cb1306d8accf7bc8ec2bfea4355cbdebb3df68b40925cad" +checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" dependencies = [ "aho-corasick", "memchr", @@ -2156,9 +2232,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.6" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001" +checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" [[package]] name = "renderdoc-sys" @@ -2173,7 +2249,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "db09040cc89e461f1a265139777a2bde7f8d8c67c4936f700c63ce3e2904d468" dependencies = [ "base64", - "bitflags 2.9.4", + "bitflags 2.10.0", "serde", "serde_derive", "unicode-ident", @@ -2211,7 +2287,7 @@ version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "errno", "libc", "linux-raw-sys 0.4.15", @@ -2224,7 +2300,7 @@ version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "errno", "libc", "linux-raw-sys 0.11.0", @@ -2296,9 +2372,9 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "simd-adler32" -version = "0.3.7" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" +checksum = "e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2" [[package]] name = "slab" @@ -2308,9 +2384,9 @@ checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" [[package]] name = "slotmap" -version = "1.0.7" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a" +checksum = "bdd58c3c93c3d278ca835519292445cb4b0d4dc59ccfdf7ceadaab3f8aeb4038" dependencies = [ "version_check", ] @@ -2327,9 +2403,9 @@ version = "0.19.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016" dependencies = [ - "bitflags 2.9.4", - "calloop", - "calloop-wayland-source", + "bitflags 2.10.0", + "calloop 0.13.0", + "calloop-wayland-source 0.3.0", "cursor-icon", "libc", "log", @@ -2346,14 +2422,41 @@ dependencies = [ "xkeysym", ] +[[package]] +name = "smithay-client-toolkit" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0512da38f5e2b31201a93524adb8d3136276fa4fe4aafab4e1f727a82b534cc0" +dependencies = [ + "bitflags 2.10.0", + "calloop 0.14.3", + "calloop-wayland-source 0.4.1", + "cursor-icon", + "libc", + "log", + "memmap2", + "rustix 1.1.2", + "thiserror 2.0.17", + "wayland-backend", + "wayland-client", + "wayland-csd-frame", + "wayland-cursor", + "wayland-protocols", + "wayland-protocols-experimental", + "wayland-protocols-misc", + "wayland-protocols-wlr", + "wayland-scanner", + "xkeysym", +] + [[package]] name = "smithay-clipboard" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc8216eec463674a0e90f29e0ae41a4db573ec5b56b1c6c1c71615d249b6d846" +checksum = "71704c03f739f7745053bde45fa203a46c58d25bc5c4efba1d9a60e9dba81226" dependencies = [ "libc", - "smithay-client-toolkit", + "smithay-client-toolkit 0.20.0", "wayland-backend", ] @@ -2368,12 +2471,12 @@ dependencies = [ [[package]] name = "socket2" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807" +checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881" dependencies = [ "libc", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -2384,6 +2487,7 @@ dependencies = [ "bytemuck", "clap", "derive_builder", + "dsp-process", "eframe", "egui_plot", "env_logger", @@ -2443,9 +2547,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.106" +version = "2.0.111" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" +checksum = "390cc9a294ab71bdb1aa2e99d13be9c753cd2d7bd6560c77118597410c4d2e87" dependencies = [ "proc-macro2", "quote", @@ -2519,9 +2623,9 @@ dependencies = [ [[package]] name = "tinystr" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" +checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" dependencies = [ "displaydoc", "zerovec", @@ -2529,18 +2633,18 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.7.3" +version = "0.7.5+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2cdb639ebbc97961c51720f858597f7f24c4fc295327923af55b74c3c724533" +checksum = "92e1cfed4a3038bc5a127e35a2d360f145e1f4b971b551a2ba5fd7aedf7e1347" dependencies = [ "serde_core", ] [[package]] name = "toml_edit" -version = "0.23.7" +version = "0.23.10+spec-1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6485ef6d0d9b5d0ec17244ff7eb05310113c3f316f2d14200d4de56b3cb98f8d" +checksum = "84c8b9f757e028cee9fa244aea147aab2a9ec09d5325a9b01e0a49730c2b5269" dependencies = [ "indexmap", "toml_datetime", @@ -2550,28 +2654,29 @@ dependencies = [ [[package]] name = "toml_parser" -version = "1.0.4" +version = "1.0.6+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0cbe268d35bdb4bb5a56a2de88d0ad0eb70af5384a99d648cd4b3d04039800e" +checksum = "a3198b4b0a8e11f09dd03e133c0280504d0801269e9afa46362ffde1cbeebf44" dependencies = [ "winnow", ] [[package]] name = "tracing" -version = "0.1.41" +version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" +checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" dependencies = [ + "log", "pin-project-lite", "tracing-core", ] [[package]] name = "tracing-core" -version = "0.1.34" +version = "0.1.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" [[package]] name = "transpose" @@ -2600,9 +2705,9 @@ dependencies = [ [[package]] name = "unicode-ident" -version = "1.0.19" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d" +checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" [[package]] name = "unicode-segmentation" @@ -2656,15 +2761,6 @@ dependencies = [ "winapi-util", ] -[[package]] -name = "wasi" -version = "0.14.7+wasi-0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "883478de20367e224c0090af9cf5f9fa85bed63a95c1abf3afc5c083ebc06e8c" -dependencies = [ - "wasip2", -] - [[package]] name = "wasip2" version = "1.0.1+wasi-0.2.4" @@ -2676,9 +2772,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.104" +version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1da10c01ae9f1ae40cbfac0bac3b1e724b320abfcf52229f80b547c0d250e2d" +checksum = "0d759f433fa64a2d763d1340820e46e111a7a5ab75f993d1852d70b03dbb80fd" dependencies = [ "cfg-if", "once_cell", @@ -2687,25 +2783,11 @@ dependencies = [ "wasm-bindgen-shared", ] -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.104" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "671c9a5a66f49d8a47345ab942e2cb93c7d1d0339065d4f8139c486121b43b19" -dependencies = [ - "bumpalo", - "log", - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-shared", -] - [[package]] name = "wasm-bindgen-futures" -version = "0.4.54" +version = "0.4.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e038d41e478cc73bae0ff9b36c60cff1c98b8f38f8d7e8061e79ee63608ac5c" +checksum = "836d9622d604feee9e5de25ac10e3ea5f2d65b41eac0d9ce72eb5deae707ce7c" dependencies = [ "cfg-if", "js-sys", @@ -2716,9 +2798,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.104" +version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ca60477e4c59f5f2986c50191cd972e3a50d8a95603bc9434501cf156a9a119" +checksum = "48cb0d2638f8baedbc542ed444afc0644a29166f1595371af4fecf8ce1e7eeb3" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -2726,22 +2808,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.104" +version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f07d2f20d4da7b26400c9f4a0511e6e0345b040694e8a75bd41d578fa4421d7" +checksum = "cefb59d5cd5f92d9dcf80e4683949f15ca4b511f4ac0a6e14d4e1ac60c6ecd40" dependencies = [ + "bumpalo", "proc-macro2", "quote", "syn", - "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.104" +version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bad67dc8b2a1a6e5448428adec4c3e84c43e561d8c9ee8a9e5aabeb193ec41d1" +checksum = "cbc538057e648b67f72a982e708d485b2efa771e1ac05fec311f9f63e5800db4" dependencies = [ "unicode-ident", ] @@ -2766,7 +2848,7 @@ version = "0.31.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c66a47e840dc20793f2264eb4b3e4ecb4b75d91c0dd4af04b456128e0bdd449d" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "rustix 1.1.2", "wayland-backend", "wayland-scanner", @@ -2778,7 +2860,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "cursor-icon", "wayland-backend", ] @@ -2800,19 +2882,45 @@ version = "0.32.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "efa790ed75fbfd71283bd2521a1cfdc022aabcc28bdcff00851f9e4ae88d9901" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "wayland-backend", "wayland-client", "wayland-scanner", ] +[[package]] +name = "wayland-protocols-experimental" +version = "20250721.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40a1f863128dcaaec790d7b4b396cc9b9a7a079e878e18c47e6c2d2c5a8dcbb1" +dependencies = [ + "bitflags 2.10.0", + "wayland-backend", + "wayland-client", + "wayland-protocols", + "wayland-scanner", +] + +[[package]] +name = "wayland-protocols-misc" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dfe33d551eb8bffd03ff067a8b44bb963919157841a99957151299a6307d19c" +dependencies = [ + "bitflags 2.10.0", + "wayland-backend", + "wayland-client", + "wayland-protocols", + "wayland-scanner", +] + [[package]] name = "wayland-protocols-plasma" version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a07a14257c077ab3279987c4f8bb987851bf57081b93710381daea94f2c2c032" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "wayland-backend", "wayland-client", "wayland-protocols", @@ -2825,7 +2933,7 @@ version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "efd94963ed43cf9938a090ca4f7da58eb55325ec8200c3848963e98dc25b78ec" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "wayland-backend", "wayland-client", "wayland-protocols", @@ -2857,9 +2965,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.81" +version = "0.3.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9367c417a924a74cae129e6a2ae3b47fabb1f8995595ab474029da749a8be120" +checksum = "9b32828d774c412041098d182a8b38b16ea816958e07cf40eec2bc080ae137ac" dependencies = [ "js-sys", "wasm-bindgen", @@ -2877,9 +2985,9 @@ dependencies = [ [[package]] name = "webbrowser" -version = "1.0.5" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aaf4f3c0ba838e82b4e5ccc4157003fb8c324ee24c058470ffb82820becbde98" +checksum = "00f1243ef785213e3a32fa0396093424a3a6ea566f9948497e5a2309261a4c97" dependencies = [ "core-foundation 0.10.1", "jni", @@ -2893,9 +3001,9 @@ dependencies = [ [[package]] name = "weezl" -version = "0.1.10" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a751b3277700db47d3e574514de2eced5e54dc8a5436a3bf7a0b248b2cee16f3" +checksum = "a28ac98ddc8b9274cb41bb4d9d4d5c425b6020c50c46f25559911905610b4a88" [[package]] name = "wgpu" @@ -2904,7 +3012,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfe68bac7cde125de7a731c3400723cadaaf1703795ad3f4805f187459cd7a77" dependencies = [ "arrayvec", - "bitflags 2.9.4", + "bitflags 2.10.0", "cfg-if", "cfg_aliases", "document-features", @@ -2922,14 +3030,14 @@ dependencies = [ [[package]] name = "wgpu-core" -version = "27.0.1" +version = "27.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3d654c0b6c6335edfca18c11bdaed964def641b8e9997d3a495a2ff4077c922" +checksum = "27a75de515543b1897b26119f93731b385a19aea165a1ec5f0e3acecc229cae7" dependencies = [ "arrayvec", "bit-set", "bit-vec", - "bitflags 2.9.4", + "bitflags 2.10.0", "bytemuck", "cfg_aliases", "document-features", @@ -2961,11 +3069,11 @@ dependencies = [ [[package]] name = "wgpu-hal" -version = "27.0.2" +version = "27.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2618a2d6b8a5964ecc1ac32a5db56cb3b1e518725fcd773fd9a782e023453f2b" +checksum = "5b21cb61c57ee198bc4aff71aeadff4cbb80b927beb912506af9c780d64313ce" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "cfg-if", "cfg_aliases", "libloading", @@ -2985,7 +3093,7 @@ version = "27.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "afdcf84c395990db737f2dd91628706cb31e86d72e53482320d368e52b5da5eb" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "bytemuck", "js-sys", "log", @@ -3248,10 +3356,10 @@ dependencies = [ "ahash", "android-activity", "atomic-waker", - "bitflags 2.9.4", + "bitflags 2.10.0", "block2", "bytemuck", - "calloop", + "calloop 0.13.0", "cfg_aliases", "concurrent-queue", "core-foundation 0.9.4", @@ -3272,7 +3380,7 @@ dependencies = [ "raw-window-handle", "redox_syscall 0.4.1", "rustix 0.38.44", - "smithay-client-toolkit", + "smithay-client-toolkit 0.19.2", "smol_str", "tracing", "unicode-segmentation", @@ -3292,9 +3400,9 @@ dependencies = [ [[package]] name = "winnow" -version = "0.7.13" +version = "0.7.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf" +checksum = "5a5364e9d77fcdeeaa6062ced926ee3381faa2ee02d3eb83a5c27a8825540829" dependencies = [ "memchr", ] @@ -3307,9 +3415,9 @@ checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" [[package]] name = "writeable" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" +checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" [[package]] name = "x11-dl" @@ -3355,7 +3463,7 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.10.0", "dlib", "log", "once_cell", @@ -3370,17 +3478,16 @@ checksum = "b9cc00251562a284751c9973bace760d86c0276c471b4be569fe6b068ee97a56" [[package]] name = "xml-rs" -version = "0.8.27" +version = "0.8.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fd8403733700263c6eb89f192880191f1b83e332f7a20371ddcf421c4a337c7" +checksum = "3ae8337f8a065cfc972643663ea4279e04e7256de865aa66fe25cec5fb912d3f" [[package]] name = "yoke" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" +checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954" dependencies = [ - "serde", "stable_deref_trait", "yoke-derive", "zerofrom", @@ -3388,9 +3495,9 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" +checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" dependencies = [ "proc-macro2", "quote", @@ -3400,18 +3507,18 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.8.27" +version = "0.8.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" +checksum = "fd74ec98b9250adb3ca554bdde269adf631549f51d8a8f8f0a10b50f1cb298c3" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.27" +version = "0.8.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" +checksum = "d8a8d209fdf45cf5138cbb5a506f6b52522a25afccc534d1475dad8e31105c6a" dependencies = [ "proc-macro2", "quote", @@ -3441,9 +3548,9 @@ dependencies = [ [[package]] name = "zerotrie" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" +checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851" dependencies = [ "displaydoc", "yoke", @@ -3452,9 +3559,9 @@ dependencies = [ [[package]] name = "zerovec" -version = "0.11.4" +version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b" +checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002" dependencies = [ "yoke", "zerofrom", @@ -3463,9 +3570,9 @@ dependencies = [ [[package]] name = "zerovec-derive" -version = "0.11.1" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" +checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" dependencies = [ "proc-macro2", "quote", diff --git a/Cargo.toml b/Cargo.toml index 4510a33..2493abc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -31,7 +31,8 @@ bytemuck = { version = "1.13.1", features = [ thiserror = "2" anyhow = "1.0.75" socket2 = "0.6.0" -idsp = "0.18" +idsp = "0.19" +dsp-process = "0.1.0" rustfft = "6.1.0" rand = { version = "0.9.0", features = ["small_rng"] } derive_builder = "0.20.0" @@ -40,5 +41,17 @@ derive_builder = "0.20.0" # debug = 1 opt-level = 3 +[profile.dev] +debug = "line-tables-only" + [profile.dev.package."*"] # opt-level = 2 +debug = false + +[profile.debugging] +inherits = "dev" +debug = true + +[patch.crates-io] +idsp = { path = "../idsp" } +dsp-process = { path = "../idsp/dsp-process" } diff --git a/src/bin/psd.rs b/src/bin/psd.rs index 7371bb1..bb7cd94 100644 --- a/src/bin/psd.rs +++ b/src/bin/psd.rs @@ -173,7 +173,7 @@ fn main() -> Result<()> { Ok(traces) => { for (i, (name, trace)) in traces.iter().enumerate() { if dec.len() <= i { - let mut p = PsdCascade::<{ 1 << 9 }>::new(3); + let mut p = PsdCascade::<{ 1 << 9 }, { 1 << 3 }>::new(); p.set_detrend(acq.detrend); p.set_avg(acq.avg_opts()); dec.push((*name, p)); diff --git a/src/bin/stream_test.rs b/src/bin/stream_test.rs index 26a331b..1e11e1d 100644 --- a/src/bin/stream_test.rs +++ b/src/bin/stream_test.rs @@ -37,7 +37,7 @@ fn main() -> Result<()> { let mut dec: Vec<_> = (0..4) .map(|_| { - let mut c = PsdCascade::<{ 1 << 9 }>::new(3); + let mut c = PsdCascade::<{ 1 << 9 }, { 1 << 3 }>::new(); c.set_detrend(Detrend::Midpoint); c }) diff --git a/src/psd.rs b/src/psd.rs index 46d81e6..209a552 100644 --- a/src/psd.rs +++ b/src/psd.rs @@ -1,4 +1,5 @@ -use idsp::hbf::{Filter, HbfDecCascade, HBF_PASSBAND}; +use dsp_process::SplitProcess; +use idsp::hbf::{HbfDecCascade, HBF_PASSBAND, HBF_TAPS}; use rustfft::{num_complex::Complex, Fft, FftPlanner}; use std::{ops::Range, sync::Arc}; @@ -116,7 +117,7 @@ impl Detrend { /// /// One stage in [PsdCascade]. #[derive(Clone)] -pub struct Psd { +pub struct Psd { hbf: HbfDecCascade, buf: [f32; N], idx: usize, @@ -129,13 +130,13 @@ pub struct Psd { avg: u32, } -impl Psd { +impl Psd { pub fn new(fft: Arc>, win: Arc>) -> Self { let hbf = HbfDecCascade::default(); assert_eq!(N, fft.len()); // check fft and decimation block size compatibility assert!(N >= 2); // Nyquist and DC distinction - let mut s = Self { + let s = Self { hbf, buf: [0.0; N], idx: 0, @@ -144,10 +145,9 @@ impl Psd { fft, win, detrend: Detrend::default(), - drain: 0, + drain: HbfDecCascade::len(R), avg: u32::MAX, }; - s.set_stage_depth(0); s } @@ -158,11 +158,6 @@ impl Psd { pub fn set_detrend(&mut self, d: Detrend) { self.detrend = d; } - - pub fn set_stage_depth(&mut self, n: usize) { - self.hbf.set_depth(n); - self.drain = self.hbf.response_length() as _; - } } pub trait PsdStage { @@ -197,7 +192,7 @@ pub trait PsdStage { fn buf(&self) -> &[f32]; } -impl PsdStage for Psd { +impl PsdStage for Psd { fn process<'a>(&mut self, mut x: &[f32], y: &'a mut [f32]) -> &'a mut [f32] { let mut n = 0; // TODO: this could be made faster with less copying for internal segments of x @@ -248,14 +243,16 @@ impl PsdStage for Psd { }; // decimate - let mut yi = self.hbf.process_block(None, &mut self.buf[start..]); + let (xb, xr) = self.buf[start..].as_chunks::(); + assert!(xr.is_empty()); + HBF_TAPS.block(&mut self.hbf, xb, &mut y[n..][..xb.len()]); // drain decimator impulse response to initial state (zeros) - let skip = self.drain.min(yi.len()); - self.drain -= skip; - yi = &mut yi[skip..]; - // yield l - y[n..][..yi.len()].copy_from_slice(yi); - n += yi.len(); + let skip = self.drain.min(xb.len()); + if skip > 0 { + self.drain -= skip; + y[n..].copy_within(skip..xb.len(), 0); + } + n += xb.len() - skip; if is_first { // keep overlap after decimating entire segment @@ -395,27 +392,24 @@ impl Default for AvgOpts { /// Incremental updates /// Automatic FFT stage extension #[derive(Clone)] -pub struct PsdCascade { - stages: Vec>, +pub struct PsdCascade { + stages: Vec>, fft: Arc>, - stage_depth: usize, detrend: Detrend, win: Arc>, avg: AvgOpts, } -impl PsdCascade { +impl PsdCascade { /// Create a new Psd instance /// /// fft_size: size of the FFT blocks and the window /// stage_length: number of decimation stages. rate change per stage is 1 << stage_length /// detrend: [Detrend] method - pub fn new(stage_depth: usize) -> Self { - assert!(stage_depth > 0); + pub fn new() -> Self { Self { - stages: Vec::with_capacity(4), + stages: Vec::with_capacity(8), fft: FftPlanner::new().plan_fft_forward(N), - stage_depth, detrend: Detrend::None, win: Arc::new(Window::hann()), avg: AvgOpts::default(), @@ -424,13 +418,13 @@ impl PsdCascade { /// Resolution bandwidth (relative) pub fn rbw(&self) -> f32 { - (1 << self.stage_depth) as f32 / (N as f32 * HBF_PASSBAND) + R as f32 / (N as f32 * HBF_PASSBAND) } pub fn set_avg(&mut self, avg: AvgOpts) { self.avg = avg; for (i, stage) in self.stages.iter_mut().enumerate() { - stage.set_avg((self.avg.count >> (self.stage_depth * i)).min(self.avg.limit)); + stage.set_avg((self.avg.count / R.pow(i as _) as u32).min(self.avg.limit)); } } @@ -441,12 +435,11 @@ impl PsdCascade { } } - fn get_or_add(&mut self, i: usize) -> &mut Psd { + fn get_or_add(&mut self, i: usize) -> &mut Psd { while i >= self.stages.len() { let mut stage = Psd::new(self.fft.clone(), self.win.clone()); - stage.set_stage_depth(self.stage_depth); stage.set_detrend(self.detrend); - stage.set_avg((self.avg.count >> (self.stage_depth * i)).min(self.avg.limit)); + stage.set_avg((self.avg.count / R.pow(i as _) as u32).min(self.avg.limit)); self.stages.push(stage); } &mut self.stages[i] @@ -456,7 +449,7 @@ impl PsdCascade { pub fn process(&mut self, x: &[f32]) { let mut a = ([0f32; N], [0f32; N]); let (mut y, mut z) = (&mut a.0, &mut a.1); - for mut x in x.chunks(N << self.stage_depth) { + for mut x in x.chunks(N * R) { let mut i = 0; while !x.is_empty() { let n = self.get_or_add(i).process(x, y).len(); @@ -479,23 +472,17 @@ impl PsdCascade { pub fn psd(&self, opts: &MergeOpts) -> (Vec, Vec) { let mut p = Vec::with_capacity(self.stages.len() * (N / 2 + 1)); let mut b = Vec::with_capacity(self.stages.len()); - let mut decimation = 1 - << self - .stages - .iter() - .rev() - .map(|stage| stage.hbf.depth()) - .sum::(); + let mut decimation = R.pow(self.stages.len() as _); let mut end = 0; for stage in self.stages.iter().rev() { - decimation >>= stage.hbf.depth(); + decimation /= R; // a stage yields frequency bins 0..N/2 from DC up to its nyquist // 0..floor(0.4*N) is its passband if it was preceeded by a decimator // 0..floor(0.4*N)/R is the passband of the next lower stage // hence take bins ceil(floor(0.4*N)/R)..floor(0.4*N) from a non-edge stage let start = if !opts.keep_overlap { // remove low f bins, ceil - (end + (1 << stage.hbf.depth()) - 1) >> stage.hbf.depth() + (end + R - 1) / R } else { 0 }; @@ -519,7 +506,7 @@ impl PsdCascade { pending: stage.buf().len(), }); if include { - let g = decimation as f32 / stage.gain(); + let g = 1.0 / (stage.gain() * decimation as f32); p.extend(stage.spectrum()[start..end].iter().map(|pi| pi * g)); } else { end = start; @@ -557,7 +544,7 @@ mod test { #[test] #[ignore] fn insn() { - let mut s = PsdCascade::<{ 1 << 9 }>::new(3); + let mut s = PsdCascade::<{ 1 << 9 }, { 1 << 3 }>::new(); let x: Vec<_> = (0..1 << 16).map(|_| rand::random::() - 0.5).collect(); for _ in 0..(1 << 12) { // + 293 @@ -569,7 +556,7 @@ mod test { #[test] fn exact() { const N: usize = 4; - let mut s = Psd::::new( + let mut s = Psd::::new( FftPlanner::new().plan_fft_forward(N), Arc::new(Window::rectangular()), ); @@ -579,7 +566,7 @@ mod test { assert_eq!(y, &x[..N]); println!("{:?}, {}", s.spectrum(), s.gain()); - let mut s = PsdCascade::::new(1); + let mut s = PsdCascade::::new(); s.process(&x); let merge_opts = MergeOpts { keep_overlap: true, @@ -615,18 +602,15 @@ mod test { assert!((xv - 1.0).abs() < 10.0 / (x.len() as f32).sqrt()); const N: usize = 1 << 9; - let n = 3; - let mut s = Psd::::new( + const R: usize = 1 << 3; + let mut s = Psd::::new( FftPlanner::new().plan_fft_forward(N), Arc::new(Window::hann()), ); - s.set_stage_depth(n); - let mut y = vec![0.0; x.len() >> n]; + let mut y = vec![0.0; x.len() / R]; let y = s.process(&x, &mut y[..]); - let mut hbf = HbfDecCascade::default(); - hbf.set_depth(n); - assert_eq!(y.len(), (x.len() >> n) - hbf.response_length()); + assert_eq!(y.len(), (x.len() / R) - HbfDecCascade::len(R)); let g = 1.0 / s.gain(); let p: Vec<_> = s.spectrum().iter().map(|p| p * g).collect(); // psd of a stage @@ -638,7 +622,7 @@ mod test { &p[..] ); - let mut d = PsdCascade::::new(n); + let mut d = PsdCascade::::new(); d.process(&x); let (p, b) = d.psd(&MergeOpts::default()); for b in b.iter() { diff --git a/src/source.rs b/src/source.rs index 1a58b22..23b8104 100644 --- a/src/source.rs +++ b/src/source.rs @@ -1,6 +1,7 @@ use crate::{Frame, Loss}; use anyhow::Result; use clap::Parser; +use dsp_process::Process; use rand::{rngs::SmallRng, Rng, SeedableRng}; use socket2::{Domain, Protocol, Socket, Type}; use std::{ @@ -126,7 +127,7 @@ impl Source { + 0.5) * M) as u32; *x = x.wrapping_add(*ftw); - dsm.update(xi) as f32 - 0.5 + dsm.process(xi) as f32 - 0.5 }) .collect(), )] From 45777484ba3dd5ec2b224f3dfc4da366195808f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20J=C3=B6rdens?= Date: Fri, 2 Jan 2026 11:34:28 +0100 Subject: [PATCH 2/8] psd: declarative process --- src/psd.rs | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/psd.rs b/src/psd.rs index 209a552..57a7af1 100644 --- a/src/psd.rs +++ b/src/psd.rs @@ -1,5 +1,5 @@ use dsp_process::SplitProcess; -use idsp::hbf::{HbfDecCascade, HBF_PASSBAND, HBF_TAPS}; +use idsp::hbf::{HbfDecCascadeState, ResponseLength, HBF_DEC_CASCADE, HBF_PASSBAND}; use rustfft::{num_complex::Complex, Fft, FftPlanner}; use std::{ops::Range, sync::Arc}; @@ -118,7 +118,7 @@ impl Detrend { /// One stage in [PsdCascade]. #[derive(Clone)] pub struct Psd { - hbf: HbfDecCascade, + hbf: HbfDecCascadeState, buf: [f32; N], idx: usize, spectrum: [f32; N], // using only the positive half N/2 + 1 @@ -132,12 +132,11 @@ pub struct Psd { impl Psd { pub fn new(fft: Arc>, win: Arc>) -> Self { - let hbf = HbfDecCascade::default(); + const { assert!(N >= 2) } // Nyquist and DC distinction assert_eq!(N, fft.len()); // check fft and decimation block size compatibility - assert!(N >= 2); // Nyquist and DC distinction let s = Self { - hbf, + hbf: HbfDecCascadeState::default(), buf: [0.0; N], idx: 0, spectrum: [0.0; N], @@ -145,7 +144,7 @@ impl Psd { fft, win, detrend: Detrend::default(), - drain: HbfDecCascade::len(R), + drain: HbfDecCascadeState::response_length(R.trailing_zeros() as _), avg: u32::MAX, }; s @@ -245,7 +244,10 @@ impl PsdStage for Psd { // decimate let (xb, xr) = self.buf[start..].as_chunks::(); assert!(xr.is_empty()); - HBF_TAPS.block(&mut self.hbf, xb, &mut y[n..][..xb.len()]); + HBF_DEC_CASCADE + .inner + .1 + .block(&mut self.hbf.1, xb, &mut y[n..][..xb.len()]); // drain decimator impulse response to initial state (zeros) let skip = self.drain.min(xb.len()); if skip > 0 { From 41ac919a45f30b93a9c71511d9598fd82e6ded01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20J=C3=B6rdens?= Date: Fri, 2 Jan 2026 13:41:51 +0100 Subject: [PATCH 3/8] process hbf plumbing --- src/bin/psd.rs | 2 +- src/bin/stream_test.rs | 2 +- src/psd.rs | 128 +++++++++++++++++++++-------------------- 3 files changed, 69 insertions(+), 63 deletions(-) diff --git a/src/bin/psd.rs b/src/bin/psd.rs index bb7cd94..1c99e97 100644 --- a/src/bin/psd.rs +++ b/src/bin/psd.rs @@ -173,7 +173,7 @@ fn main() -> Result<()> { Ok(traces) => { for (i, (name, trace)) in traces.iter().enumerate() { if dec.len() <= i { - let mut p = PsdCascade::<{ 1 << 9 }, { 1 << 3 }>::new(); + let mut p = PsdCascade::<{ 1 << 9 }>::new(); p.set_detrend(acq.detrend); p.set_avg(acq.avg_opts()); dec.push((*name, p)); diff --git a/src/bin/stream_test.rs b/src/bin/stream_test.rs index 1e11e1d..fa97417 100644 --- a/src/bin/stream_test.rs +++ b/src/bin/stream_test.rs @@ -37,7 +37,7 @@ fn main() -> Result<()> { let mut dec: Vec<_> = (0..4) .map(|_| { - let mut c = PsdCascade::<{ 1 << 9 }, { 1 << 3 }>::new(); + let mut c = PsdCascade::<{ 1 << 9 }>::new(); c.set_detrend(Detrend::Midpoint); c }) diff --git a/src/psd.rs b/src/psd.rs index 57a7af1..09fdbd6 100644 --- a/src/psd.rs +++ b/src/psd.rs @@ -1,5 +1,5 @@ use dsp_process::SplitProcess; -use idsp::hbf::{HbfDecCascadeState, ResponseLength, HBF_DEC_CASCADE, HBF_PASSBAND}; +use idsp::hbf::{hbf_dec_response_length, HbfDec8, HBF_DEC_CASCADE, HBF_PASSBAND}; use rustfft::{num_complex::Complex, Fft, FftPlanner}; use std::{ops::Range, sync::Arc}; @@ -113,12 +113,15 @@ impl Detrend { } } +/// HBF decimation depth +pub const DEPTH: usize = 3; + /// Power spectral density accumulator and decimator /// /// One stage in [PsdCascade]. #[derive(Clone)] -pub struct Psd { - hbf: HbfDecCascadeState, +pub struct Psd { + hbf: HbfDec8, buf: [f32; N], idx: usize, spectrum: [f32; N], // using only the positive half N/2 + 1 @@ -130,13 +133,12 @@ pub struct Psd { avg: u32, } -impl Psd { +impl Psd { pub fn new(fft: Arc>, win: Arc>) -> Self { const { assert!(N >= 2) } // Nyquist and DC distinction - assert_eq!(N, fft.len()); - // check fft and decimation block size compatibility + assert_eq!(N, fft.len()); // FFT and decimation block size compatibility let s = Self { - hbf: HbfDecCascadeState::default(), + hbf: HbfDec8::default(), buf: [0.0; N], idx: 0, spectrum: [0.0; N], @@ -144,7 +146,7 @@ impl Psd { fft, win, detrend: Detrend::default(), - drain: HbfDecCascadeState::response_length(R.trailing_zeros() as _), + drain: hbf_dec_response_length(DEPTH), avg: u32::MAX, }; s @@ -191,7 +193,7 @@ pub trait PsdStage { fn buf(&self) -> &[f32]; } -impl PsdStage for Psd { +impl PsdStage for Psd { fn process<'a>(&mut self, mut x: &[f32], y: &'a mut [f32]) -> &'a mut [f32] { let mut n = 0; // TODO: this could be made faster with less copying for internal segments of x @@ -242,12 +244,14 @@ impl PsdStage for Psd { }; // decimate - let (xb, xr) = self.buf[start..].as_chunks::(); + let (xb, xr) = self.buf[start..].as_chunks::<{ 1 << DEPTH }>(); assert!(xr.is_empty()); HBF_DEC_CASCADE .inner .1 - .block(&mut self.hbf.1, xb, &mut y[n..][..xb.len()]); + .inner + .1 + .block(&mut self.hbf, xb, &mut y[n..][..xb.len()]); // drain decimator impulse response to initial state (zeros) let skip = self.drain.min(xb.len()); if skip > 0 { @@ -394,15 +398,15 @@ impl Default for AvgOpts { /// Incremental updates /// Automatic FFT stage extension #[derive(Clone)] -pub struct PsdCascade { - stages: Vec>, +pub struct PsdCascade { + stages: Vec>, fft: Arc>, detrend: Detrend, win: Arc>, avg: AvgOpts, } -impl PsdCascade { +impl PsdCascade { /// Create a new Psd instance /// /// fft_size: size of the FFT blocks and the window @@ -420,13 +424,13 @@ impl PsdCascade { /// Resolution bandwidth (relative) pub fn rbw(&self) -> f32 { - R as f32 / (N as f32 * HBF_PASSBAND) + (1 << DEPTH) as f32 / (N as f32 * HBF_PASSBAND) } pub fn set_avg(&mut self, avg: AvgOpts) { self.avg = avg; for (i, stage) in self.stages.iter_mut().enumerate() { - stage.set_avg((self.avg.count / R.pow(i as _) as u32).min(self.avg.limit)); + stage.set_avg((self.avg.count >> (DEPTH * i)).min(self.avg.limit)); } } @@ -437,11 +441,11 @@ impl PsdCascade { } } - fn get_or_add(&mut self, i: usize) -> &mut Psd { + fn get_or_add(&mut self, i: usize) -> &mut Psd { while i >= self.stages.len() { let mut stage = Psd::new(self.fft.clone(), self.win.clone()); stage.set_detrend(self.detrend); - stage.set_avg((self.avg.count / R.pow(i as _) as u32).min(self.avg.limit)); + stage.set_avg((self.avg.count >> (DEPTH * i)).min(self.avg.limit)); self.stages.push(stage); } &mut self.stages[i] @@ -451,7 +455,7 @@ impl PsdCascade { pub fn process(&mut self, x: &[f32]) { let mut a = ([0f32; N], [0f32; N]); let (mut y, mut z) = (&mut a.0, &mut a.1); - for mut x in x.chunks(N * R) { + for mut x in x.chunks(N << DEPTH) { let mut i = 0; while !x.is_empty() { let n = self.get_or_add(i).process(x, y).len(); @@ -474,17 +478,17 @@ impl PsdCascade { pub fn psd(&self, opts: &MergeOpts) -> (Vec, Vec) { let mut p = Vec::with_capacity(self.stages.len() * (N / 2 + 1)); let mut b = Vec::with_capacity(self.stages.len()); - let mut decimation = R.pow(self.stages.len() as _); + let mut decimation = 1 << (DEPTH * self.stages.len()); let mut end = 0; for stage in self.stages.iter().rev() { - decimation /= R; + decimation >>= DEPTH; // a stage yields frequency bins 0..N/2 from DC up to its nyquist // 0..floor(0.4*N) is its passband if it was preceeded by a decimator // 0..floor(0.4*N)/R is the passband of the next lower stage // hence take bins ceil(floor(0.4*N)/R)..floor(0.4*N) from a non-edge stage let start = if !opts.keep_overlap { // remove low f bins, ceil - (end + R - 1) / R + (end + (1 << DEPTH) - 1) >> DEPTH } else { 0 }; @@ -546,7 +550,7 @@ mod test { #[test] #[ignore] fn insn() { - let mut s = PsdCascade::<{ 1 << 9 }, { 1 << 3 }>::new(); + let mut s = PsdCascade::<{ 1 << 9 }>::new(); let x: Vec<_> = (0..1 << 16).map(|_| rand::random::() - 0.5).collect(); for _ in 0..(1 << 12) { // + 293 @@ -554,39 +558,42 @@ mod test { } } - /// full accuracy tests - #[test] - fn exact() { - const N: usize = 4; - let mut s = Psd::::new( - FftPlanner::new().plan_fft_forward(N), - Arc::new(Window::rectangular()), - ); - let x = vec![1.0; N]; - let mut y = vec![0.0; N]; - let y = s.process(&x, &mut y); - assert_eq!(y, &x[..N]); - println!("{:?}, {}", s.spectrum(), s.gain()); - - let mut s = PsdCascade::::new(); - s.process(&x); - let merge_opts = MergeOpts { - keep_overlap: true, - min_count: 0, - ..Default::default() - }; - let (p, b) = s.psd(&merge_opts); - let f = Break::frequencies(&b); - println!("{:?}, {:?}", p, f); - assert!(p - .iter() - .zip([16.0 / 3.0, 4.0 / 3.0, 0.0].iter()) - .all(|(p, p0)| (p - p0).abs() < 1e-7)); - assert!(f - .iter() - .zip([0.0, 0.25, 0.5].iter()) - .all(|(p, p0)| (p - p0).abs() < 1e-7)); - } + /* + /// full accuracy tests + #[test] + #[ignore] + fn exact() { + const N: usize = 4; + let mut s = Psd::::new( + FftPlanner::new().plan_fft_forward(N), + Arc::new(Window::rectangular()), + ); + let x = vec![1.0; N]; + let mut y = vec![0.0; N]; + let y = s.process(&x, &mut y); + assert_eq!(y, &x[..N]); + println!("{:?}, {}", s.spectrum(), s.gain()); + + let mut s = PsdCascade::::new(); + s.process(&x); + let merge_opts = MergeOpts { + keep_overlap: true, + min_count: 0, + ..Default::default() + }; + let (p, b) = s.psd(&merge_opts); + let f = Break::frequencies(&b); + println!("{:?}, {:?}", p, f); + assert!(p + .iter() + .zip([16.0 / 3.0, 4.0 / 3.0, 0.0].iter()) + .all(|(p, p0)| (p - p0).abs() < 1e-7)); + assert!(f + .iter() + .zip([0.0, 0.25, 0.5].iter()) + .all(|(p, p0)| (p - p0).abs() < 1e-7)); + } + */ #[test] fn test() { @@ -604,15 +611,14 @@ mod test { assert!((xv - 1.0).abs() < 10.0 / (x.len() as f32).sqrt()); const N: usize = 1 << 9; - const R: usize = 1 << 3; - let mut s = Psd::::new( + let mut s = Psd::::new( FftPlanner::new().plan_fft_forward(N), Arc::new(Window::hann()), ); - let mut y = vec![0.0; x.len() / R]; + let mut y = vec![0.0; x.len() >> DEPTH]; let y = s.process(&x, &mut y[..]); - assert_eq!(y.len(), (x.len() / R) - HbfDecCascade::len(R)); + assert_eq!(y.len(), (x.len() >> DEPTH) - hbf_dec_response_length(DEPTH)); let g = 1.0 / s.gain(); let p: Vec<_> = s.spectrum().iter().map(|p| p * g).collect(); // psd of a stage @@ -624,7 +630,7 @@ mod test { &p[..] ); - let mut d = PsdCascade::::new(); + let mut d = PsdCascade::::new(); d.process(&x); let (p, b) = d.psd(&MergeOpts::default()); for b in b.iter() { From c9c64f61e97a407be9c12e709f1b89ea97f5c9e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20J=C3=B6rdens?= Date: Fri, 2 Jan 2026 13:59:11 +0100 Subject: [PATCH 4/8] stream-test: fix variance --- src/bin/stream_test.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bin/stream_test.rs b/src/bin/stream_test.rs index fa97417..332b83d 100644 --- a/src/bin/stream_test.rs +++ b/src/bin/stream_test.rs @@ -58,7 +58,7 @@ fn main() -> Result<()> { log::info!("breaks: {:?}", b); log::info!("psd: {:?}", y); - if let Some(b0) = b.last() { + if let Some(b0) = b.first() { let var = VarBuilder::default().dc_cut(1).clip(1.0).build().unwrap(); let mut fdev = vec![]; let mut tau = 1.0; From 537014ea438ef4f0fbefa878005b2e8c81209afa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20J=C3=B6rdens?= Date: Tue, 6 Jan 2026 10:52:15 +0100 Subject: [PATCH 5/8] deps: bump --- Cargo.lock | 130 +++++++++++++++++++++++++++-------------------------- 1 file changed, 66 insertions(+), 64 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ca0d559..5dd5da8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -289,7 +289,7 @@ checksum = "cb9f6e1368bd4621d2c86baa7e37de77a938adf5221e5dd3d6133340101b309e" dependencies = [ "bitflags 2.10.0", "polling", - "rustix 1.1.2", + "rustix 1.1.3", "slab", "tracing", ] @@ -313,16 +313,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "138efcf0940a02ebf0cc8d1eff41a1682a46b431630f4c52450d6265876021fa" dependencies = [ "calloop 0.14.3", - "rustix 1.1.2", + "rustix 1.1.3", "wayland-backend", "wayland-client", ] [[package]] name = "cc" -version = "1.2.50" +version = "1.2.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f50d563227a1c37cc0a263f64eca3334388c01c5e4c4861a9def205c614383c" +checksum = "7a0aeaff4ff1a90589618835a598e545176939b97874f7abc7851caa0618f203" dependencies = [ "find-msvc-tools", "jobserver", @@ -359,9 +359,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.53" +version = "4.5.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9e340e012a1bf4935f5282ed1436d1489548e8f72308207ea5df0e23d2d03f8" +checksum = "c6e6ff9dcd79cff5cd969a17a545d79e84ab086e444102a591e288a8aa3ce394" dependencies = [ "clap_builder", "clap_derive", @@ -369,9 +369,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.53" +version = "4.5.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d76b5d13eaa18c901fd2f7fca939fefe3a0727a953561fefdf3b2922b8569d00" +checksum = "fa42cf4d2b7a41bc8f663a7cab4031ebafa1bf3875705bfaf8466dc60ab52c00" dependencies = [ "anstream", "anstyle", @@ -948,9 +948,9 @@ dependencies = [ [[package]] name = "find-msvc-tools" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a3076410a55c90011c298b04d0cfa770b00fa04e1e3c97d3f6c9de105a03844" +checksum = "645cbb3a84e60b7531617d5ae4e57f7e27308f6445f5abf653209ea76dec8dff" [[package]] name = "flate2" @@ -1016,7 +1016,7 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bd49230192a3797a9a4d6abe9b3eed6f7fa4c8a8a4947977c6f80025f92cbd8" dependencies = [ - "rustix 1.1.2", + "rustix 1.1.3", "windows-link", ] @@ -1281,6 +1281,7 @@ dependencies = [ name = "idsp" version = "0.19.0" dependencies = [ + "bytemuck", "dsp-fixedpoint", "dsp-process", "miniconf", @@ -1323,15 +1324,15 @@ checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" [[package]] name = "itoa" -version = "1.0.16" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ee5b5339afb4c41626dde77b7a611bd4f2c202b897852b4bcf5d03eddc61010" +checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" [[package]] name = "jiff" -version = "0.2.16" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49cce2b81f2098e7e3efc35bc2e0a6b7abec9d34128283d7a26fa8f32a6dbb35" +checksum = "e67e8da4c49d6d9909fe03361f9b620f58898859f5c7aded68351e85e71ecf50" dependencies = [ "jiff-static", "log", @@ -1342,9 +1343,9 @@ dependencies = [ [[package]] name = "jiff-static" -version = "0.2.16" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "980af8b43c3ad5d8d349ace167ec8170839f753a42d233ba19e08afe1850fa69" +checksum = "e0c84ee7f197eca9a86c6fd6cb771e55eb991632f15f2bc3ca6ec838929e6e78" dependencies = [ "proc-macro2", "quote", @@ -1401,9 +1402,9 @@ checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" [[package]] name = "libc" -version = "0.2.178" +version = "0.2.179" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37c93d8daa9d8a012fd8ab92f088405fb202ea0b6ab73ee2482ae66af4f42091" +checksum = "c5a2d376baa530d1238d133232d15e239abad80d05838b4b59354e5268af431f" [[package]] name = "libloading" @@ -1423,13 +1424,13 @@ checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" [[package]] name = "libredox" -version = "0.1.11" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df15f6eac291ed1cf25865b1ee60399f57e7c227e7f51bdbd4c5270396a9ed50" +checksum = "3d0b95e02c851351f877147b7deea7b1afb1df71b63aa5f8270716e0c5720616" dependencies = [ "bitflags 2.10.0", "libc", - "redox_syscall 0.6.0", + "redox_syscall 0.7.0", ] [[package]] @@ -1936,10 +1937,11 @@ checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" [[package]] name = "orbclient" -version = "0.3.49" +version = "0.3.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "247ad146e19b9437f8604c21f8652423595cf710ad108af40e77d3ae6e96b827" +checksum = "52ad2c6bae700b7aa5d1cc30c59bdd3a1c180b09dbaea51e2ae2b8e1cf211fdd" dependencies = [ + "libc", "libredox", ] @@ -2036,15 +2038,15 @@ dependencies = [ "concurrent-queue", "hermit-abi", "pin-project-lite", - "rustix 1.1.2", + "rustix 1.1.3", "windows-sys 0.61.2", ] [[package]] name = "portable-atomic" -version = "1.12.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f59e70c4aef1e55797c2e8fd94a4f2a973fc972cfde0e0b05f683667b0cd39dd" +checksum = "f89776e4d69bb58bc6993e99ffa1d11f228b839984854c7daeb5d37f87cbe950" [[package]] name = "portable-atomic-util" @@ -2093,9 +2095,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.103" +version = "1.0.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" +checksum = "535d180e0ecab6268a3e718bb9fd44db66bbbc256257165fc699dadf70d16fe7" dependencies = [ "unicode-ident", ] @@ -2123,18 +2125,18 @@ checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" [[package]] name = "quick-xml" -version = "0.37.5" +version = "0.38.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "331e97a1af0bf59823e6eadffe373d7b27f485be8748f71471c662c1f269b7fb" +checksum = "b66c2058c55a409d601666cffe35f04333cf1013010882cec174a7467cd4e21c" dependencies = [ "memchr", ] [[package]] name = "quote" -version = "1.0.42" +version = "1.0.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f" +checksum = "dc74d9a594b72ae6656596548f56f667211f8a97b3d4c3d467150794690dc40a" dependencies = [ "proc-macro2", ] @@ -2200,9 +2202,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec96166dafa0886eb81fe1c0a388bece180fbef2135f97c1e2cf8302e74b43b5" +checksum = "49f3fe0889e69e2ae9e41f4d6c4c0181701d00e4697b356fb1f74173a5e0ee27" dependencies = [ "bitflags 2.10.0", ] @@ -2296,9 +2298,9 @@ dependencies = [ [[package]] name = "rustix" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" +checksum = "146c9e247ccc180c1f61615433868c99f3de3ae256a30a43b49f67c2d9171f34" dependencies = [ "bitflags 2.10.0", "errno", @@ -2435,7 +2437,7 @@ dependencies = [ "libc", "log", "memmap2", - "rustix 1.1.2", + "rustix 1.1.3", "thiserror 2.0.17", "wayland-backend", "wayland-client", @@ -2547,9 +2549,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.111" +version = "2.0.113" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "390cc9a294ab71bdb1aa2e99d13be9c753cd2d7bd6560c77118597410c4d2e87" +checksum = "678faa00651c9eb72dd2020cbdf275d92eccb2400d568e419efdd64838145cb4" dependencies = [ "proc-macro2", "quote", @@ -2723,9 +2725,9 @@ checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" [[package]] name = "url" -version = "2.5.7" +version = "2.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" +checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" dependencies = [ "form_urlencoded", "idna", @@ -2830,13 +2832,13 @@ dependencies = [ [[package]] name = "wayland-backend" -version = "0.3.11" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "673a33c33048a5ade91a6b139580fa174e19fb0d23f396dca9fa15f2e1e49b35" +checksum = "fee64194ccd96bf648f42a65a7e589547096dfa702f7cadef84347b66ad164f9" dependencies = [ "cc", "downcast-rs", - "rustix 1.1.2", + "rustix 1.1.3", "scoped-tls", "smallvec", "wayland-sys", @@ -2844,12 +2846,12 @@ dependencies = [ [[package]] name = "wayland-client" -version = "0.31.11" +version = "0.31.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c66a47e840dc20793f2264eb4b3e4ecb4b75d91c0dd4af04b456128e0bdd449d" +checksum = "b8e6faa537fbb6c186cb9f1d41f2f811a4120d1b57ec61f50da451a0c5122bec" dependencies = [ "bitflags 2.10.0", - "rustix 1.1.2", + "rustix 1.1.3", "wayland-backend", "wayland-scanner", ] @@ -2867,20 +2869,20 @@ dependencies = [ [[package]] name = "wayland-cursor" -version = "0.31.11" +version = "0.31.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "447ccc440a881271b19e9989f75726d60faa09b95b0200a9b7eb5cc47c3eeb29" +checksum = "5864c4b5b6064b06b1e8b74ead4a98a6c45a285fe7a0e784d24735f011fdb078" dependencies = [ - "rustix 1.1.2", + "rustix 1.1.3", "wayland-client", "xcursor", ] [[package]] name = "wayland-protocols" -version = "0.32.9" +version = "0.32.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efa790ed75fbfd71283bd2521a1cfdc022aabcc28bdcff00851f9e4ae88d9901" +checksum = "baeda9ffbcfc8cd6ddaade385eaf2393bd2115a69523c735f12242353c3df4f3" dependencies = [ "bitflags 2.10.0", "wayland-backend", @@ -2903,9 +2905,9 @@ dependencies = [ [[package]] name = "wayland-protocols-misc" -version = "0.3.9" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dfe33d551eb8bffd03ff067a8b44bb963919157841a99957151299a6307d19c" +checksum = "791c58fdeec5406aa37169dd815327d1e47f334219b523444bc26d70ceb4c34e" dependencies = [ "bitflags 2.10.0", "wayland-backend", @@ -2916,9 +2918,9 @@ dependencies = [ [[package]] name = "wayland-protocols-plasma" -version = "0.3.9" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a07a14257c077ab3279987c4f8bb987851bf57081b93710381daea94f2c2c032" +checksum = "aa98634619300a535a9a97f338aed9a5ff1e01a461943e8346ff4ae26007306b" dependencies = [ "bitflags 2.10.0", "wayland-backend", @@ -2929,9 +2931,9 @@ dependencies = [ [[package]] name = "wayland-protocols-wlr" -version = "0.3.9" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efd94963ed43cf9938a090ca4f7da58eb55325ec8200c3848963e98dc25b78ec" +checksum = "e9597cdf02cf0c34cd5823786dce6b5ae8598f05c2daf5621b6e178d4f7345f3" dependencies = [ "bitflags 2.10.0", "wayland-backend", @@ -2942,9 +2944,9 @@ dependencies = [ [[package]] name = "wayland-scanner" -version = "0.31.7" +version = "0.31.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54cb1e9dc49da91950bdfd8b848c49330536d9d1fb03d4bfec8cae50caa50ae3" +checksum = "5423e94b6a63e68e439803a3e153a9252d5ead12fd853334e2ad33997e3889e3" dependencies = [ "proc-macro2", "quick-xml", @@ -2953,9 +2955,9 @@ dependencies = [ [[package]] name = "wayland-sys" -version = "0.31.7" +version = "0.31.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34949b42822155826b41db8e5d0c1be3a2bd296c747577a43a3e6daefc296142" +checksum = "1e6dbfc3ac5ef974c92a2235805cc0114033018ae1290a72e474aa8b28cbbdfd" dependencies = [ "dlib", "log", @@ -3441,7 +3443,7 @@ dependencies = [ "libc", "libloading", "once_cell", - "rustix 1.1.2", + "rustix 1.1.3", "x11rb-protocol", ] From 7b597a19ab06f8c55b8b373837fe0f0f6dcb83ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20J=C3=B6rdens?= Date: Tue, 13 Jan 2026 16:34:17 +0100 Subject: [PATCH 6/8] idsp: 0.20 --- Cargo.lock | 8 +++++++- Cargo.toml | 6 +----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5dd5da8..1d44276 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -678,6 +678,8 @@ checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76" [[package]] name = "dsp-fixedpoint" version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c71e6691b4edb40c0a1bd948fa524482e3f36f690d782fcabdc39b5d52f6dcf8" dependencies = [ "num-traits", "serde", @@ -686,6 +688,8 @@ dependencies = [ [[package]] name = "dsp-process" version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f999350286aca82b7fb79f05318f2abe0967b1f068d7a24c573c02369d1153f5" [[package]] name = "ecolor" @@ -1279,7 +1283,9 @@ dependencies = [ [[package]] name = "idsp" -version = "0.19.0" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f514ce6181d9bf2385f0a0ba7df1d63ea4c561ac7b86067345a9e73fba5c15f7" dependencies = [ "bytemuck", "dsp-fixedpoint", diff --git a/Cargo.toml b/Cargo.toml index 2493abc..0842f78 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -31,7 +31,7 @@ bytemuck = { version = "1.13.1", features = [ thiserror = "2" anyhow = "1.0.75" socket2 = "0.6.0" -idsp = "0.19" +idsp = "0.20" dsp-process = "0.1.0" rustfft = "6.1.0" rand = { version = "0.9.0", features = ["small_rng"] } @@ -51,7 +51,3 @@ debug = false [profile.debugging] inherits = "dev" debug = true - -[patch.crates-io] -idsp = { path = "../idsp" } -dsp-process = { path = "../idsp/dsp-process" } From 59644b0b328b1bd9baa83fb474fc3517734f33cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20J=C3=B6rdens?= Date: Tue, 13 Jan 2026 16:40:06 +0100 Subject: [PATCH 7/8] deps: bump --- Cargo.lock | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 1d44276..7f8c6bc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -320,9 +320,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.51" +version = "1.2.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a0aeaff4ff1a90589618835a598e545176939b97874f7abc7851caa0618f203" +checksum = "cd4932aefd12402b36c60956a4fe0035421f544799057659ff86f923657aada3" dependencies = [ "find-msvc-tools", "jobserver", @@ -393,9 +393,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d" +checksum = "c3e64b0cc0439b12df2fa678eae89a1c56a529fd067a9115f7827f1fffd22b32" [[package]] name = "clipboard-win" @@ -952,15 +952,15 @@ dependencies = [ [[package]] name = "find-msvc-tools" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645cbb3a84e60b7531617d5ae4e57f7e27308f6445f5abf653209ea76dec8dff" +checksum = "f449e6c6c08c865631d4890cfacf252b3d396c9bcc83adb6623cdb02a8336c41" [[package]] name = "flate2" -version = "1.1.5" +version = "1.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfe33edd8e85a12a67454e37f8c75e730830d83e313556ab9ebf9ee7fbeb3bfb" +checksum = "b375d6465b98090a5f25b1c7703f3859783755aa9a80433b36e0379a3ec2f369" dependencies = [ "crc32fast", "miniz_oxide", @@ -1314,9 +1314,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.12.1" +version = "2.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ad4bb2b565bca0645f4d68c5c9af97fba094e9791da685bf83cb5f3ce74acf2" +checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017" dependencies = [ "equivalent", "hashbrown", @@ -1408,9 +1408,9 @@ checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" [[package]] name = "libc" -version = "0.2.179" +version = "0.2.180" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5a2d376baa530d1238d133232d15e239abad80d05838b4b59354e5268af431f" +checksum = "bcc35a38544a891a5f7c865aca548a982ccb3b8650a5b06d0fd33a10283c56fc" [[package]] name = "libloading" @@ -2175,9 +2175,9 @@ dependencies = [ [[package]] name = "rand_core" -version = "0.9.3" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" +checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" dependencies = [ "getrandom", ] @@ -2555,9 +2555,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.113" +version = "2.0.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "678faa00651c9eb72dd2020cbdf275d92eccb2400d568e419efdd64838145cb4" +checksum = "d4d107df263a3013ef9b1879b0df87d706ff80f65a86ea879bd9c31f9b307c2a" dependencies = [ "proc-macro2", "quote", @@ -3515,18 +3515,18 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.8.31" +version = "0.8.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd74ec98b9250adb3ca554bdde269adf631549f51d8a8f8f0a10b50f1cb298c3" +checksum = "668f5168d10b9ee831de31933dc111a459c97ec93225beb307aed970d1372dfd" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.31" +version = "0.8.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8a8d209fdf45cf5138cbb5a506f6b52522a25afccc534d1475dad8e31105c6a" +checksum = "2c7962b26b0a8685668b671ee4b54d007a67d4eaf05fda79ac0ecf41e32270f1" dependencies = [ "proc-macro2", "quote", From 9406a410b59b79b492fa2c973cfce70e6d3b1740 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20J=C3=B6rdens?= Date: Tue, 13 Jan 2026 16:45:12 +0100 Subject: [PATCH 8/8] ci, lints --- .github/workflows/ci.yml | 43 ++++++++++++++++++++++------------------ Cargo.toml | 1 - src/bin/psd.rs | 2 +- src/bin/stream_test.rs | 2 +- src/psd.rs | 15 +++++++------- 5 files changed, 34 insertions(+), 29 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 06e7133..b16c83e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,30 +12,35 @@ jobs: style: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - name: cargo fmt --check - uses: actions-rs/cargo@v1 + - uses: actions/checkout@v6 + - uses: dtolnay/rust-toolchain@stable with: - command: fmt - args: --all -- --check - - uses: actions-rs/clippy-check@v1 - with: - token: ${{ secrets.GITHUB_TOKEN }} - - name: cargo check - uses: actions-rs/cargo@v1 - with: - command: check - args: --verbose + components: clippy, rustfmt + - run: cargo fmt --all --check + - run: cargo clippy --all-features compile: runs-on: ubuntu-latest strategy: matrix: - toolchain: [stable] + toolchain: [stable, beta, nightly] + features: [""] + continue-on-error: ${{ matrix.toolchain == 'nightly' }} steps: - - uses: actions/checkout@v2 - - - uses: actions-rs/cargo@v1 + - uses: actions/checkout@v6 + - uses: dtolnay/rust-toolchain@master with: - command: build - args: --release + toolchain: ${{ matrix.toolchain }} + - run: cargo check --features "${{ matrix.features }}" + - run: cargo test --features "${{ matrix.features }}" + - run: cargo bench --features "${{ matrix.features }}" + - run: cargo build --release --features "${{ matrix.features }}" + + doc: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + - uses: dtolnay/rust-toolchain@stable + - run: cargo doc --no-deps + - run: cargo install cargo-deadlinks + - run: cargo deadlinks --ignore-fragments --check-intra-doc-links diff --git a/Cargo.toml b/Cargo.toml index 0842f78..2f54b18 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,7 +7,6 @@ authors = [ ] license = "MIT OR Apache-2.0" edition = "2021" -rust-version = "1.70" description = "Tools to interact with Stabilizer streams, including PSD analysis app" repository = "https://github.com/quartiq/stabilizer-streaming" diff --git a/src/bin/psd.rs b/src/bin/psd.rs index 1c99e97..13f039c 100644 --- a/src/bin/psd.rs +++ b/src/bin/psd.rs @@ -173,7 +173,7 @@ fn main() -> Result<()> { Ok(traces) => { for (i, (name, trace)) in traces.iter().enumerate() { if dec.len() <= i { - let mut p = PsdCascade::<{ 1 << 9 }>::new(); + let mut p = PsdCascade::<{ 1 << 9 }>::default(); p.set_detrend(acq.detrend); p.set_avg(acq.avg_opts()); dec.push((*name, p)); diff --git a/src/bin/stream_test.rs b/src/bin/stream_test.rs index 332b83d..8208271 100644 --- a/src/bin/stream_test.rs +++ b/src/bin/stream_test.rs @@ -37,7 +37,7 @@ fn main() -> Result<()> { let mut dec: Vec<_> = (0..4) .map(|_| { - let mut c = PsdCascade::<{ 1 << 9 }>::new(); + let mut c = PsdCascade::<{ 1 << 9 }>::default(); c.set_detrend(Detrend::Midpoint); c }) diff --git a/src/psd.rs b/src/psd.rs index 09fdbd6..3e09732 100644 --- a/src/psd.rs +++ b/src/psd.rs @@ -137,7 +137,7 @@ impl Psd { pub fn new(fft: Arc>, win: Arc>) -> Self { const { assert!(N >= 2) } // Nyquist and DC distinction assert_eq!(N, fft.len()); // FFT and decimation block size compatibility - let s = Self { + Self { hbf: HbfDec8::default(), buf: [0.0; N], idx: 0, @@ -148,8 +148,7 @@ impl Psd { detrend: Detrend::default(), drain: hbf_dec_response_length(DEPTH), avg: u32::MAX, - }; - s + } } pub fn set_avg(&mut self, avg: u32) { @@ -406,13 +405,13 @@ pub struct PsdCascade { avg: AvgOpts, } -impl PsdCascade { +impl Default for PsdCascade { /// Create a new Psd instance /// /// fft_size: size of the FFT blocks and the window /// stage_length: number of decimation stages. rate change per stage is 1 << stage_length /// detrend: [Detrend] method - pub fn new() -> Self { + fn default() -> Self { Self { stages: Vec::with_capacity(8), fft: FftPlanner::new().plan_fft_forward(N), @@ -421,7 +420,9 @@ impl PsdCascade { avg: AvgOpts::default(), } } +} +impl PsdCascade { /// Resolution bandwidth (relative) pub fn rbw(&self) -> f32 { (1 << DEPTH) as f32 / (N as f32 * HBF_PASSBAND) @@ -550,7 +551,7 @@ mod test { #[test] #[ignore] fn insn() { - let mut s = PsdCascade::<{ 1 << 9 }>::new(); + let mut s = PsdCascade::<{ 1 << 9 }>::default(); let x: Vec<_> = (0..1 << 16).map(|_| rand::random::() - 0.5).collect(); for _ in 0..(1 << 12) { // + 293 @@ -630,7 +631,7 @@ mod test { &p[..] ); - let mut d = PsdCascade::::new(); + let mut d = PsdCascade::::default(); d.process(&x); let (p, b) = d.psd(&MergeOpts::default()); for b in b.iter() {