From 565b7553c02b5d167f44b45691bb9509541da3ed Mon Sep 17 00:00:00 2001 From: Luke Curley Date: Thu, 5 Nov 2026 22:29:41 -0800 Subject: [PATCH 1/6] chore(quest): claim quest/m0/effects.md Quest-Claim: 56b27ebd7cbe2eba From 9d304d6fdc7f3eb1e712547d37d009405b4b539b Mon Sep 17 00:00:00 2001 From: Luke Curley Date: Thu, 5 Nov 2026 23:51:15 -0800 Subject: [PATCH 2/6] feat(scene): remove a source's background with a person segmentation model A source's `[video.]` entry takes `background = "remove"`, which cuts the person out of each picture before its crop and filters. MediaPipe's selfie segmentation (landscape, Apache-2.0) runs on the CPU through tract on a thread per source; the compositor shrinks each picture on the GPU, reads it back, and cuts the held picture out with its own matte a frame later. Co-Authored-By: Claude Opus 5.5 --- Cargo.lock | 410 ++++++++++++++- Cargo.toml | 12 + README.md | 18 +- quest/m0/README.md | 1 - quest/m0/effects.md | 27 - quest/m2/publish-independently.md | 5 + rs/moq-scene/Cargo.toml | 3 + rs/moq-scene/src/collection.rs | 82 +++ rs/moq-scene/src/compositor.rs | 276 +++++++--- rs/moq-scene/src/lib.rs | 14 +- rs/moq-scene/src/matte.rs | 473 ++++++++++++++++++ rs/moq-scene/src/matte.wgsl | 43 ++ rs/moq-scene/src/model/README.md | 9 + .../model/selfie_segmentation_landscape.onnx | Bin 0 -> 462338 bytes rs/moq-scene/src/test_data/person.jpg | Bin 0 -> 9527 bytes rs/moq-studio/src/ui.rs | 39 +- 16 files changed, 1301 insertions(+), 111 deletions(-) delete mode 100644 quest/m0/effects.md create mode 100644 rs/moq-scene/src/matte.rs create mode 100644 rs/moq-scene/src/matte.wgsl create mode 100644 rs/moq-scene/src/model/README.md create mode 100644 rs/moq-scene/src/model/selfie_segmentation_landscape.onnx create mode 100644 rs/moq-scene/src/test_data/person.jpg diff --git a/Cargo.lock b/Cargo.lock index 36db5085..3d7dd49d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -176,6 +176,12 @@ version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" +[[package]] +name = "anymap3" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb5dfbc6d8d2675589ccbe4d0fd61df2419075625f8c1a62325e718e2b0049f9" + [[package]] name = "anyrender" version = "0.14.0" @@ -586,7 +592,16 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2f926cc3060f09db9ebc5b52823d85268d24bb917e472c0c4bea35780a7d" dependencies = [ - "bit-vec", + "bit-vec 0.9.1", +] + +[[package]] +name = "bit-set" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56d87354e4229f54a44f7bf2435906a4656dba36026ab6eaca629a2c436a691c" +dependencies = [ + "bit-vec 0.10.1", ] [[package]] @@ -598,6 +613,16 @@ dependencies = [ "serde", ] +[[package]] +name = "bit-vec" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5727b15fa97d4f4fee0a3b7c3d550ed0269f54329207b86388de918604e31269" +dependencies = [ + "borsh", + "serde", +] + [[package]] name = "bitflags" version = "1.3.2" @@ -749,10 +774,24 @@ version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "553c5d846a6ba5150c65e3b1b8ec073bcf1abc20f9b7220de384a4443ea4e20a" dependencies = [ + "borsh-derive", "bytes", "cfg_aliases", ] +[[package]] +name = "borsh-derive" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12cdfe656708a01f89b451a7d36466e6fe6c414de0aa18fc54f864f6f9ca9f56" +dependencies = [ + "once_cell", + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 3.0.6", +] + [[package]] name = "bs58" version = "0.5.1" @@ -1647,6 +1686,17 @@ dependencies = [ "serde_core", ] +[[package]] +name = "derive-new" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2cdc8d50f426189eef89dac62fabfa0abb27d5cc008f25bf4156a0203325becc" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + [[package]] name = "derive_more" version = "2.1.1" @@ -1747,6 +1797,12 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" +[[package]] +name = "downcast-rs" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "117240f60069e65410b3ae1bb213295bd828f707b5bec6596a1afc8793ce0cbc" + [[package]] name = "download-cef" version = "3.0.0" @@ -1811,6 +1867,12 @@ version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" +[[package]] +name = "dyn-hash" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fdab65db9274e0168143841eb8f864a0a21f8b1b8d2ba6812bbe6024346e99e" + [[package]] name = "ebml-iterable" version = "0.7.1" @@ -2102,6 +2164,17 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" +[[package]] +name = "erased-serde" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e59b668157f32d3459d4bd634861a06ffa2503a461ca5f0916b9f0252605e66" +dependencies = [ + "serde", + "serde_core", + "typeid", +] + [[package]] name = "errno" version = "0.3.14" @@ -3305,6 +3378,15 @@ dependencies = [ "libc", ] +[[package]] +name = "inventory" +version = "0.3.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6928282826c822ad91bf1c9a1cb90a30ba1c26770749929b4656cd6be829cd7c" +dependencies = [ + "rustversion", +] + [[package]] name = "ipnet" version = "2.12.2" @@ -3812,6 +3894,12 @@ dependencies = [ "synstructure 0.13.2", ] +[[package]] +name = "maplit" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" + [[package]] name = "markup5ever" version = "0.40.0" @@ -3838,6 +3926,16 @@ version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3" +[[package]] +name = "matrixmultiply" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f607c237553f086e7043417a51df26b2eb899d3caff94e6a67592ff992fedc7" +dependencies = [ + "autocfg", + "rawpointer", +] + [[package]] name = "memchr" version = "2.8.3" @@ -3862,12 +3960,31 @@ dependencies = [ "autocfg", ] +[[package]] +name = "metrics" +version = "0.24.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89550ee9f79e88fef3119de263694973a8adb26c21d75322164fb8c493039fe2" +dependencies = [ + "portable-atomic", + "rapidhash", +] + [[package]] name = "mime" version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" +[[package]] +name = "minijinja" +version = "3.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00f5a04892e86ddb4fc254e9160835370b63a0d44042d3ab4725bc2dbcbab136" +dependencies = [ + "serde", +] + [[package]] name = "minimal-lexical" version = "0.2.1" @@ -4212,6 +4329,7 @@ dependencies = [ "tokio", "toml", "tracing", + "tract-onnx", "url", "vello", ] @@ -4460,7 +4578,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a616d2fb8c89516ac2723a581f69d6c18576046bed761bd6b305e5618e6ae130" dependencies = [ "arrayvec", - "bit-set", + "bit-set 0.10.0", "bitflags 2.13.2", "cfg-if", "cfg_aliases", @@ -4500,6 +4618,21 @@ dependencies = [ "log", ] +[[package]] +name = "ndarray" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "520080814a7a6b4a6e9070823bb24b4531daac8c4627e08ba5de8c5ef2f2752d" +dependencies = [ + "matrixmultiply", + "num-complex", + "num-integer", + "num-traits", + "portable-atomic", + "portable-atomic-util", + "rawpointer", +] + [[package]] name = "ndk" version = "0.9.0" @@ -4570,6 +4703,15 @@ dependencies = [ "memchr", ] +[[package]] +name = "nom-language" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2de2bc5b451bfedaef92c90b8939a8fff5770bdcc1fafd6239d086aab8fa6b29" +dependencies = [ + "nom 8.0.0", +] + [[package]] name = "notify" version = "8.2.0" @@ -5731,6 +5873,15 @@ dependencies = [ "syn 2.0.119", ] +[[package]] +name = "primal-check" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc0d895b311e3af9902528fbb8f928688abbd95872819320517cc24ca6b2bd08" +dependencies = [ + "num-integer", +] + [[package]] name = "proc-macro-crate" version = "3.5.0" @@ -5812,6 +5963,29 @@ dependencies = [ "syn 3.0.6", ] +[[package]] +name = "prost" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "528ac67416ff8646872a3c02cad9cc4ee5dc9f9540c9b10771855c95cb2e5ae1" +dependencies = [ + "bytes", + "prost-derive", +] + +[[package]] +name = "prost-derive" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b570b25f7617e43d59005d0990ccb79e950a423952cea19671b7a876da390adf" +dependencies = [ + "anyhow", + "itertools 0.14.0", + "proc-macro2", + "quote", + "syn 2.0.119", +] + [[package]] name = "pxfm" version = "0.1.30" @@ -5962,6 +6136,16 @@ version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69" +[[package]] +name = "rand_distr" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d431c2703ccf129de4d45253c03f49ebb22b97d6ad79ee3ecfc7e3f4862c1d8" +dependencies = [ + "num-traits", + "rand", +] + [[package]] name = "rand_pcg" version = "0.10.2" @@ -5983,6 +6167,15 @@ version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a611d15b50743feb4c76b7d03edcb0e64f399c26961e4efe6975bc398be6aa3d" +[[package]] +name = "rapidhash" +version = "4.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5da7e78a036ce858e8d55b7e7dc8ba3a88b78350fd2155d3591bbd966b58589e" +dependencies = [ + "rustversion", +] + [[package]] name = "raw-window-handle" version = "0.6.2" @@ -6001,6 +6194,12 @@ dependencies = [ "objc2-quartz-core 0.3.2", ] +[[package]] +name = "rawpointer" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" + [[package]] name = "rayon" version = "1.12.0" @@ -6313,6 +6512,20 @@ dependencies = [ "semver", ] +[[package]] +name = "rustfft" +version = "6.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21db5f9893e91f41798c88680037dba611ca6674703c1a18601b01a72c8adb89" +dependencies = [ + "num-complex", + "num-integer", + "num-traits", + "primal-check", + "strength_reduce", + "transpose", +] + [[package]] name = "rusticata-macros" version = "4.1.0" @@ -7111,6 +7324,22 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" +[[package]] +name = "strength_reduce" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe895eb47f22e2ddd4dabc02bce419d2e643c8e3b585c78158b349195bc24d82" + +[[package]] +name = "string-interner" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad3df9b59e2eded8d825c7c4363ad339a20fb6bc0b9a4778560f518f59910b15" +dependencies = [ + "hashbrown 0.16.1", + "serde", +] + [[package]] name = "string_cache" version = "0.11.0" @@ -7861,6 +8090,173 @@ dependencies = [ "tracing-log", ] +[[package]] +name = "tract-core" +version = "0.23.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5690191b7344a995507bed7523aeea052f907aa1316c0500540eec801e824a1c" +dependencies = [ + "anyhow", + "anymap3", + "bit-set 0.11.1", + "derive-new", + "downcast-rs 2.0.2", + "dyn-clone", + "erased-serde", + "inventory", + "lazy_static", + "log", + "maplit", + "metrics", + "ndarray", + "num-complex", + "num-integer", + "num-traits", + "pastey", + "rustfft", + "serde", + "smallvec", + "tract-data", + "tract-linalg", +] + +[[package]] +name = "tract-data" +version = "0.23.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5feff0e09b8cf92be4932457bda1b2156e348bbaf8311753da7f9b102c4af0b3" +dependencies = [ + "anyhow", + "downcast-rs 2.0.2", + "dyn-clone", + "dyn-hash", + "half", + "inventory", + "itertools 0.15.0", + "lazy_static", + "libm", + "maplit", + "ndarray", + "nom 8.0.0", + "nom-language", + "num-integer", + "num-traits", + "parking_lot", + "smallvec", + "string-interner", +] + +[[package]] +name = "tract-extra" +version = "0.23.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da9b3105cbc51d3a24e6b640e18c7d6cdedebeef5b9435a74518e7658ee93578" +dependencies = [ + "tract-nnef", +] + +[[package]] +name = "tract-hir" +version = "0.23.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a84e8187c517f1a641dcd1b764f1dca2b6b8d39d4c78b2743e1b69874e65b735" +dependencies = [ + "derive-new", + "log", + "tract-core", +] + +[[package]] +name = "tract-linalg" +version = "0.23.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88d389398bb62713b4dd4fc92c3a36ae1552faf522e17b1ae3f636537893a55c" +dependencies = [ + "byteorder", + "cc", + "derive-new", + "downcast-rs 2.0.2", + "dyn-clone", + "dyn-hash", + "half", + "inventory", + "lazy_static", + "libc", + "log", + "minijinja", + "num-traits", + "pastey", + "tract-data", + "walkdir", +] + +[[package]] +name = "tract-nnef" +version = "0.23.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "def0bced596beb4318148cac90de95dc9953089bb1df86ce2ef4c733ee450773" +dependencies = [ + "byteorder", + "erased-serde", + "log", + "nom 8.0.0", + "nom-language", + "serde", + "serde_json", + "simd-adler32", + "tar", + "tract-core", + "walkdir", +] + +[[package]] +name = "tract-onnx" +version = "0.23.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "994cd1cb5ea6747ac82707e39ae9588784f6794f96a4a86d137e71ebc49e2689" +dependencies = [ + "bytes", + "derive-new", + "log", + "memmap2", + "nom 8.0.0", + "nom-language", + "num-integer", + "num-rational", + "num-traits", + "prost", + "smallvec", + "tract-extra", + "tract-hir", + "tract-nnef", + "tract-onnx-opl", +] + +[[package]] +name = "tract-onnx-opl" +version = "0.23.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee1b86a41af0b03fa2bb6d50c86d79ec363ba12e8c76fb0bff1d899d584bf310" +dependencies = [ + "getrandom 0.4.3", + "log", + "rand", + "rand_distr", + "rustfft", + "tract-extra", + "tract-nnef", +] + +[[package]] +name = "transpose" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ad61aed86bc3faea4300c7aee358b4c6d0c8d6ccc36524c96e4c92ccf26e77e" +dependencies = [ + "num-integer", + "strength_reduce", +] + [[package]] name = "try-lock" version = "0.2.5" @@ -8321,7 +8717,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38a91b4eaddff87b1cd1074985e3713da4af2c49742d1b356b2c01670a67a078" dependencies = [ "cc", - "downcast-rs", + "downcast-rs 1.2.1", "rustix 1.1.5", "scoped-tls", "smallvec", @@ -8565,8 +8961,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "14c018fce9b6270aa203c2fdd56f3cce996713534bd757e4ea58c8560b121f14" dependencies = [ "arrayvec", - "bit-set", - "bit-vec", + "bit-set 0.10.0", + "bit-vec 0.9.1", "bitflags 2.13.2", "bytemuck", "cfg_aliases", @@ -8638,7 +9034,7 @@ dependencies = [ "android_system_properties", "arrayvec", "ash", - "bit-set", + "bit-set 0.10.0", "bitflags 2.13.2", "block2 0.6.2", "bytemuck", @@ -9233,7 +9629,7 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b5f6765e852b9b4dc8e2a76843e4d64d1cea8e79bcde0b6901aea8e7c7f08282" dependencies = [ - "bit-vec", + "bit-vec 0.9.1", "time", ] diff --git a/Cargo.toml b/Cargo.toml index 1d709807..b4418c67 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -88,6 +88,18 @@ opt-level = 3 [profile.dev.package.rubato] opt-level = 3 +# Background removal's model, which runs on every picture of a source and is +# ten times slower unoptimized: a camera would cut out a few pictures a +# second rather than every one. +[profile.dev.package.tract-core] +opt-level = 3 + +[profile.dev.package.tract-data] +opt-level = 3 + +[profile.dev.package.tract-linalg] +opt-level = 3 + [profile.release] lto = "fat" codegen-units = 1 diff --git a/README.md b/README.md index c041ca1a..55ca415a 100644 --- a/README.md +++ b/README.md @@ -101,7 +101,7 @@ Every panel is a tab you can drag, split, or stack. | Sources | Add a source by hand, see whether each and its own track are live and where it is shown, clone one, and remove one. Select a source to filter it. A camera or broadcast without a new picture, or a microphone or system audio without new sound, for a second reads as stalled. A browser source shows whether its page is copied on the GPU or, as a fallback, uploaded from memory (CPU), in place of a track, and **Reload** restarts its page. A media file reads as ended once it plays to its end without looping, **Play** plays it from its start, **Stop** stops it at once, blank and silent, until played again, and **Reload** reads the file again. | | Devices | List this machine's cameras, displays, windows, and audio inputs, and add one as a source. | | Guests | Invite a guest, show their join link as a QR code, see who joined, and take a guest out of every scene. | -| Filters | Crop the selected source or item, add, order, and set its filters, set an item's blend mode, and copy or paste filters. | +| Filters | Remove the selected source's background, crop the selected source or item, add, order, and set its filters, set an item's blend mode, and copy or paste filters. | | Keyframes | Animate the selected item: add, time, ease, and remove its keyframes, and set how far each moves, resizes, crops, and filters it (see [Keyframes](#keyframes)). **Play** plays the preview scene's keyframes again. | | Audio | Add, rename (double-click), and remove mixes, pick the one on program and the one to listen to and on which output, and set each audio source's gain, mute, delay, and the mixes it feeds, with a meter on every mix and source. | | Output | Start and stop recording, pick the mix it records, set the canvas size and frame rate, add, resize, and remove further canvases, and see the broadcast path, whether the program is encoding, the encoder sessions open, and each canvas's renditions' encoder work. | @@ -527,6 +527,7 @@ kind = "lut" path = "teal-orange.cube" [video.camera] +background = "remove" # cut the person out, leaving the rest transparent crop = { left = 0.1, right = 0.1 } # trim 10% of the picture off each side filters = [ { kind = "chroma_key", color = "#00ff00", similarity = 0.4, smoothness = 0.08, spill = 0.1 }, @@ -582,8 +583,15 @@ without `[mixes]`, the collection has one mix, `Program`. `[audio.]` sets a source's linear `gain`, `muted`, the mixes it is left out of (`exclude`), and its `delay`. -`[video.]` sets a source's `crop` and `filters`, wherever it is shown, -and an item's `crop`, `filters`, and `blend` its own. A `crop` trims a fraction +`[video.]` sets a source's `background`, `crop`, and `filters`, +wherever it is shown, and an item's `crop`, `filters`, and `blend` its own. +`background = "remove"` cuts the person out of a camera, display, window, +image, media, broadcast, browser, or replay source's picture before its crop +and filters, leaving the rest transparent. A segmentation model finds them in +each picture on the CPU, so each picture shows a frame late, and only once +its cut-out is ready. It is MediaPipe's selfie segmentation model, made for +one or two people near the camera. A clone shows its source's cut-out, so it +cannot remove a background of its own. A `crop` trims a fraction (0 to 1) of the picture off its `left`, `top`, `right`, and `bottom`, opposite sides together trimming less than the whole, and stretches the rest over the item; an item's crop trims what its source's @@ -701,7 +709,9 @@ changes size or color space moves to a new track, which its catalog entry follows. Images and colors keep their picture once, as the image file and as a one-pixel PNG. Removing or editing a source ends its track. A track carries the plain capture, before any filter, and a clone has none, since it shows its -source's capture. A browser source or an overlay has no track of its own, and a +source's capture. A removed background stays in the track, since H.264 carries +no transparency, so a replay of the source shows it unless the replay source +removes it too. A browser source or an overlay has no track of its own, and a broadcast source is already its publisher's. A microphone, system audio, or media file's sound encodes its track as Opus, diff --git a/quest/m0/README.md b/quest/m0/README.md index e13ffb5d..48294eb4 100644 --- a/quest/m0/README.md +++ b/quest/m0/README.md @@ -91,7 +91,6 @@ repository. - [Studio on macOS with capture granted](/quest/m0/app-macos.md) - camera, screen, and audio capture run on a Mac, not only Linux - [Studio on Windows](/quest/m0/app-windows.md) - the studio runs on Windows, not only Linux - [Wayland display and window sources](/quest/m0/wayland-sources.md) - portal-picked sources that reopen without the picker -- [ML video effects](/quest/m0/effects.md) - background removal and other ML effects, baked into their source's track - [Destinations](/quest/m0/destinations.md) - RTMP, RTMPS, and WHIP push with per-destination codecs and shared encoders, on a UI-free egress library a hosted service can reuse - [Composable scenes](/quest/m0/scenes/README.md) - scenes nest scenes and the program, any scene publishes at its own size, and mixes become audio scenes - [The join page is live](/quest/m0/join-page-live.md) - `join.studio.moq.dev` serves the join page `--join-page` defaults to diff --git a/quest/m0/effects.md b/quest/m0/effects.md deleted file mode 100644 index 04f5f82d..00000000 --- a/quest/m0/effects.md +++ /dev/null @@ -1,27 +0,0 @@ -# [M] ML video effects - -## Goal - -Sources in `moq-studio` offer ML video effects, starting with background -removal (a person cut out of a camera), applied to the source's picture before -it is drawn or published, so every viewer sees the same cut-out from the -source's own track. - -## Plan - -The rest of the effect set landed as moq-scene `Filter`s that every -composition host renders with the same WGSL and the layout carries by name and -settings. A model cannot meet that parity rule: viewers would each need the -model and a GPU to run it, and inference differs across backends. So an ML -effect is baked into its source's track per the -[composition epic](/quest/m1/compose/README.md): it belongs to a source, never -to one scene item, and sits before the source's crop and filters, as the -encoder in `rs/moq-scene/src/publish.rs` sees the capture. - -This quest picks the runtime crate (`ort`, `tract`, or `burn`) and the model -(a small, permissively licensed person segmentation model such as MediaPipe's -selfie segmentation, Apache-2.0) after measuring each candidate's per-frame -cost at 1080p and 30 fps (decided 2026-11-03, maintainer, on -[moq-dev/studio#17](https://github.com/moq-dev/studio/pull/17)). Running on the -studio's own wgpu device keeps the frame on the GPU and works toward the -[web studio](/quest/m0/web.md); a CPU runtime costs a readback per frame. diff --git a/quest/m2/publish-independently.md b/quest/m2/publish-independently.md index 17450735..1dff0be9 100644 --- a/quest/m2/publish-independently.md +++ b/quest/m2/publish-independently.md @@ -25,6 +25,11 @@ source among those on program (`Publish::set_on_program` in Moved to m2 on 2026-11-05 (maintainer, /quest-plan): no service places sources itself yet, so it waits behind m0 and m1. +A source with its background removed (`background = "remove"`) keeps the +background in its track, since H.264 carries no transparency. Publishing one +independently needs its cut-out in the track, such as moq-video encoding +alpha, or the option refused for it. + Low priority: this is for services that move webcams and overlays themselves, and none exists yet. The option lives on the source, in the scene file, so it travels with the scene. The option and its effect on the program change what a diff --git a/rs/moq-scene/Cargo.toml b/rs/moq-scene/Cargo.toml index 7d03c13e..18e25b80 100644 --- a/rs/moq-scene/Cargo.toml +++ b/rs/moq-scene/Cargo.toml @@ -69,6 +69,9 @@ thiserror = { workspace = true } tokio = { workspace = true, features = ["macros", "sync", "time"] } toml = { workspace = true } tracing = { workspace = true } +# Runs background removal's person segmentation model on the CPU. Pure Rust, so +# it builds wherever the studio does with no runtime library to download. +tract-onnx = { version = "0.23.10", default-features = false } url = { workspace = true } vello = "0.11" diff --git a/rs/moq-scene/src/collection.rs b/rs/moq-scene/src/collection.rs index 6d5e23f4..c1e09b75 100644 --- a/rs/moq-scene/src/collection.rs +++ b/rs/moq-scene/src/collection.rs @@ -315,6 +315,12 @@ impl Collection { "video settings for `{name}`, which is not a source with a picture" ))); } + if video.background == Background::Remove && !self.sources[name].removes_background() { + return Err(Error::Invalid(format!( + "`{name}` cannot have its background removed: only a camera, display, window, image, media, \ + broadcast, browser, or replay source can, and a clone shows its source's" + ))); + } let on = format!("`{name}`"); video .crop @@ -1335,6 +1341,10 @@ pub(crate) fn validate_filters(filters: &[Filter], on: &str) -> Result<(), Error #[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)] #[serde(deny_unknown_fields)] pub struct Video { + /// What happens behind the person in the picture, before the crop and + /// every filter. + #[serde(default, skip_serializing_if = "Background::is_kept")] + pub background: Background, /// Trimmed before every filter and each item's own crop. #[serde(default, skip_serializing_if = "Crop::is_none")] pub crop: Crop, @@ -1343,6 +1353,26 @@ pub struct Video { pub filters: Vec, } +/// What happens to the background behind a person in a source's picture. +#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Serialize, Deserialize)] +#[serde(rename_all = "snake_case")] +pub enum Background { + /// Shown as captured. + #[default] + Keep, + /// Made transparent, leaving the person a segmentation model finds in each + /// picture. Each picture draws a frame late, with its own cut-out. The + /// source's own track keeps the background, since its encoding carries no + /// transparency. + Remove, +} + +impl Background { + fn is_kept(&self) -> bool { + *self == Self::Keep + } +} + /// A rectangle in canvas pixels, from the top-left corner. #[derive(Clone, Copy, Debug, PartialEq, Serialize, Deserialize)] #[serde(deny_unknown_fields)] @@ -1512,6 +1542,22 @@ impl Source { !matches!(self, Self::Clone { .. }) } + /// Whether the source's picture can have its background removed: a + /// picture of its own that may show a person. + pub fn removes_background(&self) -> bool { + matches!( + self, + Self::Camera { .. } + | Self::Display { .. } + | Self::Window { .. } + | Self::Image { .. } + | Self::Media { .. } + | Self::Broadcast { .. } + | Self::Browser { .. } + | Self::Replay + ) + } + /// Whether the source feeds the program audio. pub fn has_audio(&self) -> bool { matches!( @@ -2102,6 +2148,42 @@ path = "sting.webm" } } + /// A background is removed only from a picture of the source's own that + /// may show a person. + #[test] + fn removes_a_background_only_from_a_picture_of_its_own() { + let text = r#" +version = 1 + +[canvas] +width = 1280 +height = 720 +framerate = 30 + +[sources.cam] +kind = "camera" + +[video.cam] +background = "remove" +"#; + let collection = Collection::from_toml(text).unwrap(); + assert_eq!(collection.video["cam"].background, Background::Remove); + assert_eq!( + Collection::from_toml(&collection.to_toml().unwrap()).unwrap(), + collection + ); + + let color = Source::Color { + color: Rgba([0, 0, 0, 255]), + }; + for source in [Source::Clone { source: "cam".into() }, color] { + let mut collection = collection.clone(); + collection.sources.insert("other".into(), source.clone()); + collection.video.insert("other".into(), collection.video["cam"].clone()); + assert!(matches!(collection.validate(), Err(Error::Invalid(_))), "{source:?}"); + } + } + #[test] fn refuses_a_filter_out_of_range() { let red = Rgba([255, 0, 0, 255]); diff --git a/rs/moq-scene/src/compositor.rs b/rs/moq-scene/src/compositor.rs index 5ab516b4..662f4578 100644 --- a/rs/moq-scene/src/compositor.rs +++ b/rs/moq-scene/src/compositor.rs @@ -10,9 +10,10 @@ use moq_video::render::{Renderer, wgpu}; use crate::Error; use crate::collection::{ - Canvas, Collection, Crop, Direction, Filter, Item, Layer as Place, Rect, Settled, Source, Transition, + Background, Canvas, Collection, Crop, Direction, Filter, Item, Layer as Place, Rect, Settled, Source, Transition, }; use crate::effect::{self, Effects, Frame, Lut, Picture, Prepared}; +use crate::matte::Matte; use crate::overlay::{Overlay, Overlays}; use crate::source::{self, Feed, Sources, Status}; @@ -149,7 +150,15 @@ struct Layer { source: Source, /// Converts video frames, created on the first one. renderer: Option, - /// The newest picture; `None` until the first arrives. + /// The newest picture as the source delivered it, and whether it is newer + /// than what `picture` shows or `matte` started on. + raw: Option, + fresh: bool, + /// Cuts the person out of each picture, while the source's background is + /// removed. + matte: Option, + /// The newest picture drawn; `None` until the first arrives, and while the + /// first cut-out is under way. picture: Option, /// A LUT source's table; `None` until it is read. lut: Option, @@ -159,6 +168,63 @@ struct Layer { error: Option, } +impl Layer { + /// Bring the picture drawn up to date with the newest one delivered, + /// through its matte while `background` is removed. + fn develop( + &mut self, + name: &str, + background: Background, + device: &wgpu::Device, + queue: &wgpu::Queue, + effects: &Effects, + ) { + if background == Background::Keep { + // One switched back shows the picture it held back. + if self.matte.take().is_some() || self.fresh { + self.fresh = false; + self.picture = self.raw.as_ref().map(|raw| effects.picture(raw)); + } + return; + } + + let matte = match &mut self.matte { + Some(matte) => matte, + None => match Matte::new(device, queue) { + Ok(matte) => { + // What was drawn shows the background, so nothing is until + // the first cut-out. + self.picture = None; + self.fresh = self.raw.is_some(); + self.matte.insert(matte) + } + Err(err) => { + self.error = Some(err.to_string()); + return; + } + }, + }; + match matte.finish() { + Some(Ok(cut)) => self.picture = Some(effects.picture(cut)), + Some(Err(err)) => { + if self.error.is_none() { + tracing::warn!(source = %name, %err, "cannot remove the background"); + } + self.error = Some(err.to_string()); + self.picture = None; + } + None => {} + } + if self.fresh + && !matte.busy() + && let Some(raw) = &self.raw + { + matte.start(raw); + self.fresh = false; + } + } +} + /// The pictures and tables of the compositor's layers, for filters to read. struct Library<'a>(&'a HashMap); @@ -484,72 +550,93 @@ impl Compositor { let Some(feed) = sources.get(name).filter(|feed| feed.source() == source) else { continue; }; - let Some(picture) = feed.take() else { - continue; + let picture = feed.take(); + let mut layer = match self.layers.remove(name) { + Some(layer) => layer, + None if picture.is_some() => Layer { + source: source.clone(), + renderer: None, + raw: None, + fresh: false, + matte: None, + picture: None, + lut: None, + overlay: None, + error: None, + }, + None => continue, }; - let layer = self.layers.entry(name.clone()).or_insert_with(|| Layer { - source: source.clone(), - renderer: None, - picture: None, - lut: None, - overlay: None, - error: None, - }); - // Every picture lands premultiplied, so scaling it mixes no - // transparent texel's color: a page arrives so, moq-video renders - // a frame opaque, a still is premultiplied here, and an overlay's - // paint as it lands. - let texture = match picture { - source::Picture::Frame(frame) => { - let renderer = match layer.renderer.as_mut() { - Some(renderer) => Ok(renderer), - None => Renderer::new(&self.device, &self.queue, Default::default()) - .map(|renderer| layer.renderer.insert(renderer)), - }; - renderer - .and_then(|renderer| renderer.render(&frame)) - .map_err(Error::from) - } - source::Picture::Rgba { size, mut pixels } => { - premultiply(&mut pixels); - upload(&self.device, &self.queue, size, &pixels) - } - source::Picture::Texture(texture) => Ok(texture), - source::Picture::Lut(cube) => { - layer.lut = Some(self.effects.lut(&cube)); - continue; - } - source::Picture::Overlay => { - let Source::Overlay { html, width, height } = source else { - unreachable!("only an overlay source shows an overlay") - }; - let overlays = match &mut self.overlays { - Some(overlays) => Ok(overlays), - None => Overlays::new(&self.device, &self.queue).map(|overlays| self.overlays.insert(overlays)), - }; - match overlays { - Ok(overlays) => { - let overlay = overlays.open(html, *width, *height, now); - layer.picture = Some(self.effects.picture(overlay.texture())); - layer.overlay = Some(overlay); - } - Err(err) => layer.error = Some(err.to_string()), + if let Some(picture) = picture { + self.take(name, source, &mut layer, picture, now); + } + let background = collection + .video + .get(name) + .map(|video| video.background) + .unwrap_or_default(); + layer.develop(name, background, &self.device, &self.queue, &self.effects); + self.layers.insert(name.clone(), layer); + } + } + + /// Put `picture` from source `name` on the GPU as `layer`'s newest. An + /// overlay that arrives now starts its CSS timeline at `now`. + fn take(&mut self, name: &str, source: &Source, layer: &mut Layer, picture: source::Picture, now: Instant) { + // Every picture lands premultiplied, so scaling it mixes no + // transparent texel's color: a page arrives so, moq-video renders + // a frame opaque, a still is premultiplied here, and an overlay's + // paint as it lands. + let texture = match picture { + source::Picture::Frame(frame) => { + let renderer = match layer.renderer.as_mut() { + Some(renderer) => Ok(renderer), + None => Renderer::new(&self.device, &self.queue, Default::default()) + .map(|renderer| layer.renderer.insert(renderer)), + }; + renderer + .and_then(|renderer| renderer.render(&frame)) + .map_err(Error::from) + } + source::Picture::Rgba { size, mut pixels } => { + premultiply(&mut pixels); + upload(&self.device, &self.queue, size, &pixels) + } + source::Picture::Texture(texture) => Ok(texture), + source::Picture::Lut(cube) => { + layer.lut = Some(self.effects.lut(&cube)); + return; + } + source::Picture::Overlay => { + let Source::Overlay { html, width, height } = source else { + unreachable!("only an overlay source shows an overlay") + }; + let overlays = match &mut self.overlays { + Some(overlays) => Ok(overlays), + None => Overlays::new(&self.device, &self.queue).map(|overlays| self.overlays.insert(overlays)), + }; + match overlays { + Ok(overlays) => { + let overlay = overlays.open(html, *width, *height, now); + layer.picture = Some(self.effects.picture(overlay.texture())); + layer.overlay = Some(overlay); } - continue; + Err(err) => layer.error = Some(err.to_string()), } - }; + return; + } + }; - match texture { - Ok(texture) => { - layer.error = None; - layer.picture = Some(self.effects.picture(&texture)); - } - Err(err) => { - if layer.error.is_none() { - tracing::warn!(source = %name, %err, "cannot draw source"); - } - layer.error = Some(err.to_string()); + match texture { + Ok(texture) => { + layer.error = None; + layer.raw = Some(texture); + layer.fresh = true; + } + Err(err) => { + if layer.error.is_none() { + tracing::warn!(source = %name, %err, "cannot draw source"); } + layer.error = Some(err.to_string()); } } } @@ -1173,7 +1260,7 @@ mod tests { use std::time::Duration; use super::*; - use crate::collection::{Blend, Extra, MaskMode, Rgba, Scene}; + use crate::collection::{Blend, Extra, MaskMode, Rgba, Scene, Video}; use crate::source::test::{context, listen, local, start}; /// A fade over a second. @@ -2243,6 +2330,67 @@ mod tests { .await; } + /// A source with its background removed draws only the person, each + /// picture once the model has it, and its whole picture again once kept. + #[tokio::test] + #[ignore = "needs a Vulkan device; run by just rs render-sw"] + async fn removes_the_background() { + local(async { + let dir = tempfile::tempdir().unwrap(); + std::fs::write(dir.path().join("person.jpg"), include_bytes!("test_data/person.jpg")).unwrap(); + let mut collection = Collection::new(); + collection.canvas.width = 256; + collection.canvas.height = 144; + collection.sources.insert( + "person".into(), + Source::Image { + path: "person.jpg".into(), + }, + ); + let removed = Video { + background: Background::Remove, + ..Video::default() + }; + collection.video.insert("person".into(), removed.clone()); + collection.scenes[0].items = vec![Item::new("person", Rect::fill(&collection.canvas))]; + collection.validate().unwrap(); + let scene = collection.scenes[0].name.clone(); + + let mut studio = Studio::with_files(collection, dir).await; + studio.compositor.set_preview(Some(scene)); + studio.compositor.cut(&studio.sources); + let at = |rgba: &[u8], x: usize, y: usize| -> [u8; 4] { + let at = (y * 256 + x) * 4; + rgba[at..at + 4].try_into().unwrap() + }; + let face = (128, 50); + let flag = (30, 100); + let cut = |studio: &mut Studio| { + studio.render(Instant::now()); + let program = studio.program(); + // Nothing shows until the cut-out is ready, not even the background. + assert_eq!(at(&program, face.0, face.1), BLACK); + let layer = studio.compositor.layers.get_mut("person").unwrap(); + layer.matte.as_mut().expect("removing the background").wait(); + studio.render(Instant::now()); + let program = studio.program(); + assert_ne!(at(&program, face.0, face.1), BLACK); + assert_eq!(at(&program, flag.0, flag.1), BLACK); + }; + cut(&mut studio); + assert!(studio.compositor.error("person").is_none()); + + studio.collection.video.remove("person"); + studio.render(Instant::now()); + let program = studio.program(); + assert_ne!(at(&program, flag.0, flag.1), BLACK); + + studio.collection.video.insert("person".into(), removed); + cut(&mut studio); + }) + .await; + } + /// The program of `collection` with scene "red" cut to it, its files in `dir`. async fn drawn(collection: Collection, dir: tempfile::TempDir) -> Vec { let mut studio = Studio::with_files(collection, dir).await; diff --git a/rs/moq-scene/src/lib.rs b/rs/moq-scene/src/lib.rs index f71e24a5..c9c9b458 100644 --- a/rs/moq-scene/src/lib.rs +++ b/rs/moq-scene/src/lib.rs @@ -20,7 +20,9 @@ //! textures on the caller's `wgpu` device, one pair per canvas from one //! upload of each source's picture, cutting or running a [`Transition`] //! between them on every canvas together, and plays each item's -//! [`Keyframe`]s from when its scene went on. `moq_video::render::export` hands the +//! [`Keyframe`]s from when its scene went on. A source whose [`Background`] +//! is removed is cut out first, by a segmentation model on the CPU. +//! `moq_video::render::export` hands the //! program to an encoder, on the GPU where the platform allows, and a //! [`Scaler`] draws it smaller for a smaller rendition. //! - [`publish`] gives each local source its own track, in a broadcast the @@ -38,6 +40,7 @@ mod compositor; mod edit; mod effect; mod lut; +mod matte; mod media; mod overlay; mod playout; @@ -48,8 +51,8 @@ pub mod source; pub use clip::Clip; pub use collection::{ - Audio, Blend, Canvas, Collection, Crop, Direction, Ease, Extra, Filter, Item, Keyframe, Layer, MaskMode, Mixes, - Rect, Rgba, Scene, Source, Transition, Video, + Audio, Background, Blend, Canvas, Collection, Crop, Direction, Ease, Extra, Filter, Item, Keyframe, Layer, + MaskMode, Mixes, Rect, Rgba, Scene, Source, Transition, Video, }; pub use compositor::{Compositor, FORMAT}; pub use edit::{Change, Draft, Edit, History}; @@ -131,4 +134,9 @@ pub enum Error { /// failed to draw. #[error("overlay: {0}")] Overlay(String), + + /// Removing a source's background failed: running the model, or reading + /// a picture back for it. + #[error("background removal: {0}")] + Matte(String), } diff --git a/rs/moq-scene/src/matte.rs b/rs/moq-scene/src/matte.rs new file mode 100644 index 00000000..80e4e375 --- /dev/null +++ b/rs/moq-scene/src/matte.rs @@ -0,0 +1,473 @@ +//! Background removal: a person segmentation model finds who is in each of a +//! source's pictures, and the rest of the picture turns transparent. +//! +//! The compositor shrinks each picture on the GPU to the model's size and +//! reads that back. A thread of the matte's own runs the model on the CPU, +//! with tract, and the compositor cuts the held full-size picture out with +//! the result. Each picture is drawn with its own matte, a frame late, never +//! with an older one. + +use std::collections::HashMap; +use std::sync::{Arc, OnceLock, mpsc}; + +use moq_video::render::wgpu; +use tract_onnx::prelude::*; + +use crate::Error; +use crate::compositor::FORMAT; + +/// MediaPipe's selfie segmentation, landscape variant: see `model/README.md`. +const MODEL: &[u8] = include_bytes!("model/selfie_segmentation_landscape.onnx"); + +/// The model's input and output size: RGB in, a person's alpha out. +const WIDTH: u32 = 256; +const HEIGHT: u32 = 144; + +type Model = Arc; + +/// The model, parsed and optimized once per process, on the first matte's +/// thread. +fn model() -> Result<&'static Model, String> { + static MODEL_PLAN: OnceLock> = OnceLock::new(); + let load = || -> TractResult { + let model = tract_onnx::onnx().model_for_read(&mut &MODEL[..])?.into_typed()?; + let batch = model.symbols.sym("batch_size"); + model + .set_symbols(&HashMap::from([(batch, TDim::from(1))]))? + .into_optimized()? + .into_runnable() + }; + MODEL_PLAN + .get_or_init(|| load().map_err(|err| format!("the segmentation model: {err}"))) + .as_ref() + .map_err(Clone::clone) +} + +/// The alpha of each pixel of a `WIDTH` by `HEIGHT` RGBA picture: 255 where +/// it shows a person, 0 where it shows what is behind them. +fn segment(model: &Model, rgba: &[u8]) -> Result, String> { + let plane = (WIDTH * HEIGHT) as usize; + let mut input = vec![0.0f32; 3 * plane]; + for (at, pixel) in rgba.as_chunks::<4>().0.iter().enumerate() { + for (channel, value) in pixel[..3].iter().enumerate() { + input[channel * plane + at] = f32::from(*value) / 255.0; + } + } + let run = || -> TractResult> { + let input = Tensor::from_shape(&[1, 3, HEIGHT as usize, WIDTH as usize], &input)?; + let output = model.run(tvec!(input.into()))?; + let alpha = output[0].to_plain_array_view::()?; + Ok(alpha + .iter() + .map(|alpha| (alpha.clamp(0.0, 1.0) * 255.0).round() as u8) + .collect()) + }; + run().map_err(|err| format!("the segmentation model: {err}")) +} + +/// Cuts a person out of one source's pictures. Dropping it stops its thread +/// once the picture in hand is done. +pub(crate) struct Matte { + device: wgpu::Device, + queue: wgpu::Queue, + copy: wgpu::RenderPipeline, + shrink: wgpu::RenderPipeline, + cut: wgpu::RenderPipeline, + picture_layout: wgpu::BindGroupLayout, + sampler: wgpu::Sampler, + /// The picture at the model's size, read back into `readback`. + small: wgpu::Texture, + readback: wgpu::Buffer, + mask: wgpu::Texture, + mask_bind: wgpu::BindGroup, + /// The newest picture started, and its cut-out, at its size. + held: Option, + jobs: mpsc::Sender, + results: mpsc::Receiver, String>>, + /// Whether the thread has a picture, which also has `readback` mapped. + busy: bool, + /// The thread's result, once a test has waited for it. + #[cfg(test)] + ready: Option, String>>, +} + +struct Held { + picture: wgpu::Texture, + bind: wgpu::BindGroup, + cut: wgpu::Texture, +} + +impl Matte { + pub fn new(device: &wgpu::Device, queue: &wgpu::Queue) -> Result { + let shader = device.create_shader_module(wgpu::include_wgsl!("matte.wgsl")); + let texture_entry = |binding| wgpu::BindGroupLayoutEntry { + binding, + visibility: wgpu::ShaderStages::FRAGMENT, + ty: wgpu::BindingType::Texture { + sample_type: wgpu::TextureSampleType::Float { filterable: true }, + view_dimension: wgpu::TextureViewDimension::D2, + multisampled: false, + }, + count: None, + }; + let picture_layout = device.create_bind_group_layout(&wgpu::BindGroupLayoutDescriptor { + label: Some("moq-scene matte picture"), + entries: &[ + texture_entry(0), + wgpu::BindGroupLayoutEntry { + binding: 1, + visibility: wgpu::ShaderStages::FRAGMENT, + ty: wgpu::BindingType::Sampler(wgpu::SamplerBindingType::Filtering), + count: None, + }, + ], + }); + let mask_layout = device.create_bind_group_layout(&wgpu::BindGroupLayoutDescriptor { + label: Some("moq-scene matte mask"), + entries: &[texture_entry(0)], + }); + let pipeline = |entry: &str, layouts: &[Option<&wgpu::BindGroupLayout>]| { + let layout = device.create_pipeline_layout(&wgpu::PipelineLayoutDescriptor { + label: Some("moq-scene matte"), + bind_group_layouts: layouts, + immediate_size: 0, + }); + device.create_render_pipeline(&wgpu::RenderPipelineDescriptor { + label: Some("moq-scene matte"), + layout: Some(&layout), + vertex: wgpu::VertexState { + module: &shader, + entry_point: Some("vs_main"), + buffers: &[], + compilation_options: Default::default(), + }, + fragment: Some(wgpu::FragmentState { + module: &shader, + entry_point: Some(entry), + targets: &[Some(FORMAT.into())], + compilation_options: Default::default(), + }), + primitive: Default::default(), + depth_stencil: None, + multisample: Default::default(), + multiview_mask: None, + cache: None, + }) + }; + let copy = pipeline("fs_copy", &[Some(&picture_layout)]); + let shrink = pipeline("fs_shrink", &[Some(&picture_layout)]); + let cut = pipeline("fs_cut", &[Some(&picture_layout), Some(&mask_layout)]); + let sampler = device.create_sampler(&wgpu::SamplerDescriptor { + label: Some("moq-scene matte"), + mag_filter: wgpu::FilterMode::Linear, + min_filter: wgpu::FilterMode::Linear, + ..Default::default() + }); + + let size = wgpu::Extent3d { + width: WIDTH, + height: HEIGHT, + depth_or_array_layers: 1, + }; + let small = device.create_texture(&wgpu::TextureDescriptor { + label: Some("moq-scene matte input"), + size, + mip_level_count: 1, + sample_count: 1, + dimension: wgpu::TextureDimension::D2, + format: FORMAT, + usage: wgpu::TextureUsages::RENDER_ATTACHMENT | wgpu::TextureUsages::COPY_SRC, + view_formats: &[], + }); + // A row of the model's input is 1024 bytes, already aligned for a copy. + let readback = device.create_buffer(&wgpu::BufferDescriptor { + label: Some("moq-scene matte input"), + size: u64::from(WIDTH * HEIGHT * 4), + usage: wgpu::BufferUsages::COPY_DST | wgpu::BufferUsages::MAP_READ, + mapped_at_creation: false, + }); + let mask = device.create_texture(&wgpu::TextureDescriptor { + label: Some("moq-scene matte"), + size, + mip_level_count: 1, + sample_count: 1, + dimension: wgpu::TextureDimension::D2, + format: wgpu::TextureFormat::R8Unorm, + usage: wgpu::TextureUsages::TEXTURE_BINDING | wgpu::TextureUsages::COPY_DST, + view_formats: &[], + }); + let mask_bind = device.create_bind_group(&wgpu::BindGroupDescriptor { + label: Some("moq-scene matte mask"), + layout: &mask_layout, + entries: &[wgpu::BindGroupEntry { + binding: 0, + resource: wgpu::BindingResource::TextureView(&mask.create_view(&Default::default())), + }], + }); + + let (jobs, inbox) = mpsc::channel(); + let (outbox, results) = mpsc::channel(); + let thread = Thread { + device: device.clone(), + readback: readback.clone(), + }; + std::thread::Builder::new() + .name("moq-scene matte".into()) + .spawn(move || thread.run(inbox, outbox)) + .map_err(|err| Error::Unsupported(format!("cannot start background removal: {err}")))?; + + Ok(Self { + device: device.clone(), + queue: queue.clone(), + copy, + shrink, + cut, + picture_layout, + sampler, + small, + readback, + mask, + mask_bind, + held: None, + jobs, + results, + busy: false, + #[cfg(test)] + ready: None, + }) + } + + /// Whether a picture is still being cut out, so another cannot start. + pub fn busy(&self) -> bool { + self.busy + } + + /// Start cutting `picture` out: hold a copy, since its texture may be + /// drawn over, and hand the thread a shrunk one. + pub fn start(&mut self, picture: &wgpu::Texture) { + assert!(!self.busy, "a matte cuts one picture at a time"); + let size = picture.size(); + let held = match self.held.take() { + Some(held) if held.picture.size() == size => held, + _ => self.hold(size), + }; + + let bind = self.bind(picture); + let mut encoder = self.device.create_command_encoder(&Default::default()); + self.pass(&mut encoder, &self.copy, &held.picture, &[&bind]); + self.pass(&mut encoder, &self.shrink, &self.small, &[&held.bind]); + encoder.copy_texture_to_buffer( + self.small.as_image_copy(), + wgpu::TexelCopyBufferInfo { + buffer: &self.readback, + layout: wgpu::TexelCopyBufferLayout { + offset: 0, + bytes_per_row: Some(WIDTH * 4), + rows_per_image: None, + }, + }, + self.small.size(), + ); + let submission = self.queue.submit([encoder.finish()]); + self.held = Some(held); + // A thread that is gone reports so through `finish`. + let _ = self.jobs.send(submission); + self.busy = true; + } + + /// The cut-out of the picture last started, once the thread has its + /// matte; `None` while it works on it or when nothing is started. + pub fn finish(&mut self) -> Option> { + if !self.busy { + return None; + } + #[cfg(test)] + if let Some(result) = self.ready.take() { + return Some(self.cut(result)); + } + let result = match self.results.try_recv() { + Ok(result) => result, + Err(mpsc::TryRecvError::Empty) => return None, + Err(mpsc::TryRecvError::Disconnected) => Err("the background removal thread stopped".into()), + }; + Some(self.cut(result)) + } + + /// Block until the thread is done with the picture last started, for + /// the next [`finish`](Self::finish) to cut out. + #[cfg(test)] + pub fn wait(&mut self) { + assert!(self.busy, "nothing is started"); + let result = self + .results + .recv() + .unwrap_or_else(|_| Err("the background removal thread stopped".into())); + self.ready = Some(result); + } + + fn cut(&mut self, alpha: Result, String>) -> Result<&wgpu::Texture, Error> { + self.busy = false; + let alpha = alpha.map_err(Error::Matte)?; + self.queue.write_texture( + self.mask.as_image_copy(), + &alpha, + wgpu::TexelCopyBufferLayout { + offset: 0, + bytes_per_row: Some(WIDTH), + rows_per_image: None, + }, + self.mask.size(), + ); + let held = self.held.as_ref().expect("a started picture is held"); + let mut encoder = self.device.create_command_encoder(&Default::default()); + self.pass(&mut encoder, &self.cut, &held.cut, &[&held.bind, &self.mask_bind]); + self.queue.submit([encoder.finish()]); + Ok(&held.cut) + } + + /// The textures a picture of `size` is held and cut out in. + fn hold(&self, size: wgpu::Extent3d) -> Held { + let texture = |label| { + self.device.create_texture(&wgpu::TextureDescriptor { + label: Some(label), + size, + mip_level_count: 1, + sample_count: 1, + dimension: wgpu::TextureDimension::D2, + format: FORMAT, + usage: wgpu::TextureUsages::RENDER_ATTACHMENT | wgpu::TextureUsages::TEXTURE_BINDING, + view_formats: &[], + }) + }; + let picture = texture("moq-scene matte held"); + Held { + bind: self.bind(&picture), + picture, + cut: texture("moq-scene matte cut"), + } + } + + fn bind(&self, texture: &wgpu::Texture) -> wgpu::BindGroup { + self.device.create_bind_group(&wgpu::BindGroupDescriptor { + label: Some("moq-scene matte picture"), + layout: &self.picture_layout, + entries: &[ + wgpu::BindGroupEntry { + binding: 0, + resource: wgpu::BindingResource::TextureView(&texture.create_view(&Default::default())), + }, + wgpu::BindGroupEntry { + binding: 1, + resource: wgpu::BindingResource::Sampler(&self.sampler), + }, + ], + }) + } + + /// Draw `pipeline` over the whole of `target`. + fn pass( + &self, + encoder: &mut wgpu::CommandEncoder, + pipeline: &wgpu::RenderPipeline, + target: &wgpu::Texture, + binds: &[&wgpu::BindGroup], + ) { + let view = target.create_view(&Default::default()); + let mut pass = encoder.begin_render_pass(&wgpu::RenderPassDescriptor { + label: Some("moq-scene matte"), + color_attachments: &[Some(wgpu::RenderPassColorAttachment { + view: &view, + depth_slice: None, + resolve_target: None, + ops: wgpu::Operations { + load: wgpu::LoadOp::Clear(wgpu::Color::TRANSPARENT), + store: wgpu::StoreOp::Store, + }, + })], + ..Default::default() + }); + pass.set_pipeline(pipeline); + for (index, bind) in binds.iter().enumerate() { + pass.set_bind_group(index as u32, *bind, &[]); + } + pass.draw(0..3, 0..1); + } +} + +/// What a matte's thread holds: the device to wait on, and the buffer the +/// shrunk picture lands in. +struct Thread { + device: wgpu::Device, + readback: wgpu::Buffer, +} + +impl Thread { + /// Run the model on each shrunk picture, once the GPU has it, until the + /// matte is dropped. + fn run(self, jobs: mpsc::Receiver, results: mpsc::Sender, String>>) { + for submission in jobs { + let alpha = self.read(submission).and_then(|rgba| segment(model()?, &rgba)); + if results.send(alpha).is_err() { + return; + } + } + } + + /// The shrunk picture, once `submission` has copied it into the buffer. + fn read(&self, submission: wgpu::SubmissionIndex) -> Result, String> { + let (mapped, map) = mpsc::channel(); + self.readback.map_async(wgpu::MapMode::Read, .., move |result| { + let _ = mapped.send(result); + }); + self.device + .poll(wgpu::PollType::Wait { + submission_index: Some(submission), + timeout: None, + }) + .map_err(|err| format!("waiting for the GPU: {err}"))?; + map.recv() + .map_err(|_| "the GPU dropped the background removal buffer".to_string())? + .map_err(|err| format!("reading the picture back: {err}"))?; + let pixels = self + .readback + .slice(..) + .get_mapped_range() + .map_err(|err| format!("reading the picture back: {err}"))? + .to_vec(); + self.readback.unmap(); + Ok(pixels) + } +} + +#[cfg(test)] +mod tests { + use super::*; + + /// The model finds the person in a portrait and nothing beside them. + /// `person.jpg` is Ilan Ramon's NASA portrait (public domain), cropped to + /// head and shoulders and shrunk to the model's size. + #[test] + fn finds_the_person() { + let image = image::load_from_memory(include_bytes!("test_data/person.jpg")) + .unwrap() + .to_rgba8(); + assert_eq!(image.dimensions(), (WIDTH, HEIGHT)); + let alpha = segment(model().unwrap(), image.as_raw()).unwrap(); + let at = |x: u32, y: u32| alpha[(y * WIDTH + x) as usize]; + // The face, and the suit below it. + assert!(at(128, 50) > 240, "{}", at(128, 50)); + assert!(at(128, 130) > 240, "{}", at(128, 130)); + // The flag on the left and the shuttle model on the right. + for (x, y) in [(10, 10), (30, 100), (245, 10), (225, 70)] { + assert!(at(x, y) < 15, "({x}, {y}): {}", at(x, y)); + } + } + + /// A plain picture shows nobody. + #[test] + fn finds_nobody_in_a_wall() { + let wall = [180u8, 170, 160, 255].repeat((WIDTH * HEIGHT) as usize); + let alpha = segment(model().unwrap(), &wall).unwrap(); + assert!(alpha.iter().all(|alpha| *alpha < 15)); + } +} diff --git a/rs/moq-scene/src/matte.wgsl b/rs/moq-scene/src/matte.wgsl new file mode 100644 index 00000000..9ae74533 --- /dev/null +++ b/rs/moq-scene/src/matte.wgsl @@ -0,0 +1,43 @@ +// Background removal's GPU half: hold a picture, shrink it for the model, and +// cut it out with the model's matte. + +@group(0) @binding(0) var picture: texture_2d; +@group(0) @binding(1) var linear: sampler; +@group(1) @binding(0) var matte: texture_2d; + +struct Varyings { + @builtin(position) position: vec4, + @location(0) uv: vec2, +} + +// One triangle covering the whole target. +@vertex fn vs_main(@builtin(vertex_index) index: u32) -> Varyings { + let corner = vec2(f32((index << 1u) & 2u), f32(index & 2u)); + var out: Varyings; + out.position = vec4(corner * vec2(2.0, -2.0) + vec2(-1.0, 1.0), 0.0, 1.0); + out.uv = corner; + return out; +} + +// Same size, so each pixel samples its own texel's center. +@fragment fn fs_copy(in: Varyings) -> @location(0) vec4 { + return textureSample(picture, linear, in.uv); +} + +// Sixteen bilinear taps spread over the target pixel's footprint: a box over +// 8x8 texels, enough for 1080p shrunk to the model's 256x144. +@fragment fn fs_shrink(in: Varyings) -> @location(0) vec4 { + let step = fwidth(in.uv) * 0.25; + var sum = vec4(0.0); + for (var y = 0; y < 4; y++) { + for (var x = 0; x < 4; x++) { + sum += textureSample(picture, linear, in.uv + (vec2(f32(x), f32(y)) - 1.5) * step); + } + } + return sum / 16.0; +} + +// The picture is premultiplied, so scaling every channel by the matte keeps it so. +@fragment fn fs_cut(in: Varyings) -> @location(0) vec4 { + return textureSample(picture, linear, in.uv) * textureSample(matte, linear, in.uv).r; +} diff --git a/rs/moq-scene/src/model/README.md b/rs/moq-scene/src/model/README.md new file mode 100644 index 00000000..60ef68a1 --- /dev/null +++ b/rs/moq-scene/src/model/README.md @@ -0,0 +1,9 @@ +# Models + +`selfie_segmentation_landscape.onnx` is MediaPipe's selfie segmentation, +landscape variant: 256x144 RGB in `[0, 1]` in, a 256x144 person alpha out. +It is Google's model under the Apache License 2.0, as converted to ONNX by +[onnx-community/mediapipe_selfie_segmentation_landscape](https://huggingface.co/onnx-community/mediapipe_selfie_segmentation_landscape) +at commit `2497d5bec26c626c7b3c4edc6e1fefc21b64f6c3` (`onnx/model.onnx`, +SHA-256 `7a0adcfdb1715d3b0ff0f61486d8a181c33f4a208343a5abfccbc6540e872d24`), +unmodified. diff --git a/rs/moq-scene/src/model/selfie_segmentation_landscape.onnx b/rs/moq-scene/src/model/selfie_segmentation_landscape.onnx new file mode 100644 index 0000000000000000000000000000000000000000..2671dd4c487a410fa3e8d7c5b4aa01c2981063d1 GIT binary patch literal 462338 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 z%0Dq&#YTMd7kszFpTQ7bp4CxRv_`x`eXf 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¬Y8_ENjuwt$ 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

  • S367C9g%T`l>=A&nIir{U&l=)%GT| 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 F{y#skIZ^-s literal 0 HcmV?d00001 diff --git a/rs/moq-scene/src/test_data/person.jpg b/rs/moq-scene/src/test_data/person.jpg new file mode 100644 index 0000000000000000000000000000000000000000..57e7c744b6a18a2697bf9aeb012c15f829240bda GIT binary patch literal 9527 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 b<*h(u^U=xCtWOGh#&a}z<+M`x, crop: Crop, filters: Vec, /// An item's blend mode; a source has none. @@ -404,9 +406,10 @@ impl Selection { fn look(&self, collection: &Collection) -> Option { match self { Self::Source(name) => { - collection.sources.get(name).filter(|source| source.has_video())?; + let source = collection.sources.get(name).filter(|source| source.has_video())?; let video = collection.video.get(name).cloned().unwrap_or_default(); Some(Look { + background: source.removes_background().then_some(video.background), crop: video.crop, filters: video.filters, blend: None, @@ -415,6 +418,7 @@ impl Selection { Self::Item(layer, index) => { let item = collection.items(layer)?.get(*index)?; Some(Look { + background: None, crop: item.crop, filters: item.filters.clone(), blend: Some(item.blend), @@ -429,9 +433,21 @@ impl Selection { } fn set_look(&self, draft: &mut Draft, look: Look) -> Result<(), moq_scene::Error> { - let Look { crop, filters, blend } = look; + let Look { + background, + crop, + filters, + blend, + } = look; match self { - Self::Source(name) => draft.set_video(name, Some(Video { crop, filters })), + Self::Source(name) => draft.set_video( + name, + Some(Video { + background: background.unwrap_or_default(), + crop, + filters, + }), + ), Self::Item(layer, index) => { let item = draft .collection() @@ -1846,6 +1862,19 @@ impl Panels { let mut next = look.clone(); let mut action: Option<(String, Option)> = None; egui::Grid::new("look").show(ui, |ui| { + if let Some(background) = &mut next.background { + ui.label("Background"); + let mut removed = *background == Background::Remove; + let response = ui + .checkbox(&mut removed, "Remove") + .on_hover_text("Cut the person out of the picture, leaving the rest transparent, before the crop and every filter. Each picture shows a frame late, and the source's own track keeps the background."); + if response.changed() { + *background = if removed { Background::Remove } else { Background::Keep }; + let verb = if removed { "Remove" } else { "Keep" }; + action = Some((format!("{verb} the background of {what}"), None)); + } + ui.end_row(); + } ui.label("Crop"); ui.horizontal(|ui| { let crop = &mut next.crop; From 7f9ac86bbfea31957d2c8bf0f53ccac80a7937fd Mon Sep 17 00:00:00 2001 From: Luke Curley Date: Thu, 5 Nov 2026 23:57:56 -0800 Subject: [PATCH 3/6] fix(scene): a failed cut-out stays failed until the background is kept A matte error was cleared by each new picture and retried, so the source's error flickered and a model that cannot load ran again on every picture. Co-Authored-By: Claude Opus 5.5 --- rs/moq-scene/src/compositor.rs | 70 +++++++++++++++++++--------------- 1 file changed, 40 insertions(+), 30 deletions(-) diff --git a/rs/moq-scene/src/compositor.rs b/rs/moq-scene/src/compositor.rs index 662f4578..826ae0b3 100644 --- a/rs/moq-scene/src/compositor.rs +++ b/rs/moq-scene/src/compositor.rs @@ -155,8 +155,9 @@ struct Layer { raw: Option, fresh: bool, /// Cuts the person out of each picture, while the source's background is - /// removed. - matte: Option, + /// removed, or why it cannot. A failure stays until the background is kept + /// or the source edited, since retrying the model would fail the same way. + matte: Option>, /// The newest picture drawn; `None` until the first arrives, and while the /// first cut-out is under way. picture: Option, @@ -181,41 +182,47 @@ impl Layer { ) { if background == Background::Keep { // One switched back shows the picture it held back. - if self.matte.take().is_some() || self.fresh { - self.fresh = false; - self.picture = self.raw.as_ref().map(|raw| effects.picture(raw)); + match self.matte.take() { + Some(Err(_)) => self.error = None, + Some(Ok(_)) => {} + None if !self.fresh => return, + None => {} } + self.fresh = false; + self.picture = self.raw.as_ref().map(|raw| effects.picture(raw)); return; } - let matte = match &mut self.matte { - Some(matte) => matte, - None => match Matte::new(device, queue) { - Ok(matte) => { - // What was drawn shows the background, so nothing is until - // the first cut-out. - self.picture = None; - self.fresh = self.raw.is_some(); - self.matte.insert(matte) - } - Err(err) => { - self.error = Some(err.to_string()); - return; + if self.matte.is_none() { + // What was drawn shows the background, so nothing is until the + // first cut-out. + self.picture = None; + self.fresh = self.raw.is_some(); + self.matte = Some(Matte::new(device, queue).map_err(|err| err.to_string())); + } else if let Some(Err(err)) = &self.matte { + self.error = Some(err.clone()); + return; + } + let failed = match self.matte.as_mut().expect("set above") { + Err(err) => Some(err.clone()), + Ok(matte) => match matte.finish() { + Some(Ok(cut)) => { + self.picture = Some(effects.picture(cut)); + None } + Some(Err(err)) => Some(err.to_string()), + None => None, }, }; - match matte.finish() { - Some(Ok(cut)) => self.picture = Some(effects.picture(cut)), - Some(Err(err)) => { - if self.error.is_none() { - tracing::warn!(source = %name, %err, "cannot remove the background"); - } - self.error = Some(err.to_string()); - self.picture = None; - } - None => {} + if let Some(err) = failed { + tracing::warn!(source = %name, %err, "cannot remove the background"); + self.error = Some(err.clone()); + self.picture = None; + self.matte = Some(Err(err)); + return; } - if self.fresh + if let Some(Ok(matte)) = &mut self.matte + && self.fresh && !matte.busy() && let Some(raw) = &self.raw { @@ -2371,7 +2378,10 @@ mod tests { // Nothing shows until the cut-out is ready, not even the background. assert_eq!(at(&program, face.0, face.1), BLACK); let layer = studio.compositor.layers.get_mut("person").unwrap(); - layer.matte.as_mut().expect("removing the background").wait(); + let Some(Ok(matte)) = &mut layer.matte else { + panic!("not removing the background") + }; + matte.wait(); studio.render(Instant::now()); let program = studio.program(); assert_ne!(at(&program, face.0, face.1), BLACK); From aa229441f452e39be8f7bb05088181d289233d96 Mon Sep 17 00:00:00 2001 From: Luke Curley Date: Fri, 6 Nov 2026 00:13:30 -0800 Subject: [PATCH 4/6] fix(scene): a clear picture shows at once over a pending cut-out A media source stopped or played again, and a replay starting, ending, or crossing a gap, clears its picture. With the background removed, the clear waited behind the cut-out in hand, which then showed the previous play. A wholly transparent picture has nobody to cut out: it draws at once and throws that cut-out away. Co-Authored-By: Claude Opus 5.5 --- rs/moq-scene/src/compositor.rs | 66 ++++++++++++++++++++++++++++++++-- rs/moq-scene/src/matte.rs | 26 +++++++++++--- 2 files changed, 86 insertions(+), 6 deletions(-) diff --git a/rs/moq-scene/src/compositor.rs b/rs/moq-scene/src/compositor.rs index 826ae0b3..e89e6de7 100644 --- a/rs/moq-scene/src/compositor.rs +++ b/rs/moq-scene/src/compositor.rs @@ -150,10 +150,12 @@ struct Layer { source: Source, /// Converts video frames, created on the first one. renderer: Option, - /// The newest picture as the source delivered it, and whether it is newer - /// than what `picture` shows or `matte` started on. + /// The newest picture as the source delivered it, whether it is newer + /// than what `picture` shows or `matte` started on, and whether it is + /// wholly transparent, such as a media source cleared between plays. raw: Option, fresh: bool, + blank: bool, /// Cuts the person out of each picture, while the source's background is /// removed, or why it cannot. A failure stays until the background is kept /// or the source edited, since retrying the model would fail the same way. @@ -203,6 +205,18 @@ impl Layer { self.error = Some(err.clone()); return; } + // Nobody is in a clear picture, and it shows at once, so a cut-out of + // what came before, such as a media source's last play, never shows + // after it. + if self.fresh + && self.blank + && let Some(Ok(matte)) = &mut self.matte + { + matte.discard(); + self.fresh = false; + self.picture = self.raw.as_ref().map(|raw| effects.picture(raw)); + return; + } let failed = match self.matte.as_mut().expect("set above") { Err(err) => Some(err.clone()), Ok(matte) => match matte.finish() { @@ -565,6 +579,7 @@ impl Compositor { renderer: None, raw: None, fresh: false, + blank: false, matte: None, picture: None, lut: None, @@ -593,6 +608,7 @@ impl Compositor { // transparent texel's color: a page arrives so, moq-video renders // a frame opaque, a still is premultiplied here, and an overlay's // paint as it lands. + let mut blank = false; let texture = match picture { source::Picture::Frame(frame) => { let renderer = match layer.renderer.as_mut() { @@ -605,6 +621,7 @@ impl Compositor { .map_err(Error::from) } source::Picture::Rgba { size, mut pixels } => { + blank = pixels.as_chunks::<4>().0.iter().all(|pixel| pixel[3] == 0); premultiply(&mut pixels); upload(&self.device, &self.queue, size, &pixels) } @@ -638,6 +655,7 @@ impl Compositor { layer.error = None; layer.raw = Some(texture); layer.fresh = true; + layer.blank = blank; } Err(err) => { if layer.error.is_none() { @@ -2401,6 +2419,50 @@ mod tests { .await; } + /// A clear picture, such as a media source stopped or played again, + /// shows at once, and the cut-out of the picture before it never does. + #[tokio::test] + #[ignore = "needs a Vulkan device; run by just rs render-sw"] + async fn a_clear_picture_overtakes_a_cut_out() { + let (device, queue) = gpu().await; + let effects = Effects::new(&device, &queue, 256, 144); + let person = image::load_from_memory(include_bytes!("test_data/person.jpg")) + .unwrap() + .to_rgba8(); + let mut layer = Layer { + source: Source::Replay, + renderer: None, + raw: Some(upload(&device, &queue, moq_video::Size::new(256, 144), &person).unwrap()), + fresh: true, + blank: false, + matte: None, + picture: None, + lut: None, + overlay: None, + error: None, + }; + layer.develop("replay", Background::Remove, &device, &queue, &effects); + assert!(layer.picture.is_none(), "until the cut-out"); + + layer.raw = Some(upload(&device, &queue, moq_video::Size::new(1, 1), &[0; 4]).unwrap()); + layer.fresh = true; + layer.blank = true; + layer.develop("replay", Background::Remove, &device, &queue, &effects); + assert_eq!(layer.picture.as_ref().map(Picture::size), Some((1, 1))); + + let Some(Ok(matte)) = &mut layer.matte else { + panic!("not removing the background") + }; + matte.wait(); + layer.develop("replay", Background::Remove, &device, &queue, &effects); + assert_eq!(layer.picture.as_ref().map(Picture::size), Some((1, 1))); + let Some(Ok(matte)) = &layer.matte else { + panic!("not removing the background") + }; + assert!(!matte.busy()); + assert!(layer.error.is_none()); + } + /// The program of `collection` with scene "red" cut to it, its files in `dir`. async fn drawn(collection: Collection, dir: tempfile::TempDir) -> Vec { let mut studio = Studio::with_files(collection, dir).await; diff --git a/rs/moq-scene/src/matte.rs b/rs/moq-scene/src/matte.rs index 80e4e375..49104a57 100644 --- a/rs/moq-scene/src/matte.rs +++ b/rs/moq-scene/src/matte.rs @@ -86,6 +86,9 @@ pub(crate) struct Matte { results: mpsc::Receiver, String>>, /// Whether the thread has a picture, which also has `readback` mapped. busy: bool, + /// Whether the picture the thread has was overtaken, so its cut-out is + /// thrown away. + stale: bool, /// The thread's result, once a test has waited for it. #[cfg(test)] ready: Option, String>>, @@ -232,6 +235,7 @@ impl Matte { jobs, results, busy: false, + stale: false, #[cfg(test)] ready: None, }) @@ -275,22 +279,29 @@ impl Matte { self.busy = true; } + /// Throw away the cut-out of the picture in hand, such as when the source + /// clears its picture, so it never shows after what overtook it. + pub fn discard(&mut self) { + self.stale = self.busy; + } + /// The cut-out of the picture last started, once the thread has its - /// matte; `None` while it works on it or when nothing is started. + /// matte; `None` while it works on it, when nothing is started, or when it + /// was discarded. pub fn finish(&mut self) -> Option> { if !self.busy { return None; } #[cfg(test)] if let Some(result) = self.ready.take() { - return Some(self.cut(result)); + return self.cut(result); } let result = match self.results.try_recv() { Ok(result) => result, Err(mpsc::TryRecvError::Empty) => return None, Err(mpsc::TryRecvError::Disconnected) => Err("the background removal thread stopped".into()), }; - Some(self.cut(result)) + self.cut(result) } /// Block until the thread is done with the picture last started, for @@ -305,8 +316,15 @@ impl Matte { self.ready = Some(result); } - fn cut(&mut self, alpha: Result, String>) -> Result<&wgpu::Texture, Error> { + fn cut(&mut self, alpha: Result, String>) -> Option> { self.busy = false; + if std::mem::take(&mut self.stale) { + return None; + } + Some(self.paint(alpha)) + } + + fn paint(&mut self, alpha: Result, String>) -> Result<&wgpu::Texture, Error> { let alpha = alpha.map_err(Error::Matte)?; self.queue.write_texture( self.mask.as_image_copy(), From fd5fe475c586cd69053df48b516116efcdc921f8 Mon Sep 17 00:00:00 2001 From: Luke Curley Date: Fri, 6 Nov 2026 00:24:37 -0800 Subject: [PATCH 5/6] fix(scene): a source's clear survives the picture that overtakes it The mailbox held only the newest picture, so a media source's next play could replace its clear before the compositor took it, and the cut-out of the old play still showed. The mailbox now keeps whether the source cleared since the last take, and the compositor drops the cut-out in hand on it. This replaces spotting a clear by its transparency. Co-Authored-By: Claude Opus 5.5 --- rs/moq-scene/src/browser/run.rs | 7 +- rs/moq-scene/src/compositor.rs | 98 ++++++++++++----------- rs/moq-scene/src/publish.rs | 2 +- rs/moq-scene/src/source.rs | 136 +++++++++++++++++++++++--------- 4 files changed, 155 insertions(+), 88 deletions(-) diff --git a/rs/moq-scene/src/browser/run.rs b/rs/moq-scene/src/browser/run.rs index cae9a335..c242580a 100644 --- a/rs/moq-scene/src/browser/run.rs +++ b/rs/moq-scene/src/browser/run.rs @@ -64,10 +64,7 @@ pub(crate) async fn run( drop(opened); // A stopped page leaves the canvas rather than freezing on its last // picture, which for an alert or a ticker would show stale news. - *picture.lock().unwrap() = Some(Picture::Rgba { - size: moq_video::Size::new(1, 1), - pixels: vec![0; 4], - }); + picture.lock().unwrap().clear(); Err(Error::Browser(reason)) } @@ -167,7 +164,7 @@ impl Routes { Ok(None) => return, Err(reason) => return self.end(id, reason), }; - *route.picture.lock().unwrap() = Some(Picture::Texture(texture)); + route.picture.lock().unwrap().show(Picture::Texture(texture)); if !std::mem::replace(&mut route.live, true) && let Ok(mut status) = route.status.write() { diff --git a/rs/moq-scene/src/compositor.rs b/rs/moq-scene/src/compositor.rs index e89e6de7..8d4b4ef2 100644 --- a/rs/moq-scene/src/compositor.rs +++ b/rs/moq-scene/src/compositor.rs @@ -150,12 +150,14 @@ struct Layer { source: Source, /// Converts video frames, created on the first one. renderer: Option, - /// The newest picture as the source delivered it, whether it is newer - /// than what `picture` shows or `matte` started on, and whether it is - /// wholly transparent, such as a media source cleared between plays. + /// The newest picture as the source delivered it, and whether it is newer + /// than what `picture` shows or `matte` started on. raw: Option, fresh: bool, - blank: bool, + /// Whether the source cleared its picture since `matte` last looked, such + /// as a media source stopped or played again, so nothing from before may + /// show. + cleared: bool, /// Cuts the person out of each picture, while the source's background is /// removed, or why it cannot. A failure stays until the background is kept /// or the source edited, since retrying the model would fail the same way. @@ -182,6 +184,7 @@ impl Layer { queue: &wgpu::Queue, effects: &Effects, ) { + let cleared = std::mem::take(&mut self.cleared); if background == Background::Keep { // One switched back shows the picture it held back. match self.matte.take() { @@ -205,17 +208,11 @@ impl Layer { self.error = Some(err.clone()); return; } - // Nobody is in a clear picture, and it shows at once, so a cut-out of - // what came before, such as a media source's last play, never shows - // after it. - if self.fresh - && self.blank - && let Some(Ok(matte)) = &mut self.matte - { + // The cut-out in hand is from before the clear, such as a media + // source's last play, so it never shows. + if cleared && let Some(Ok(matte)) = &mut self.matte { matte.discard(); - self.fresh = false; - self.picture = self.raw.as_ref().map(|raw| effects.picture(raw)); - return; + self.picture = None; } let failed = match self.matte.as_mut().expect("set above") { Err(err) => Some(err.clone()), @@ -571,15 +568,15 @@ impl Compositor { let Some(feed) = sources.get(name).filter(|feed| feed.source() == source) else { continue; }; - let picture = feed.take(); + let taken = feed.take(); let mut layer = match self.layers.remove(name) { Some(layer) => layer, - None if picture.is_some() => Layer { + None if taken.is_some() => Layer { source: source.clone(), renderer: None, raw: None, fresh: false, - blank: false, + cleared: false, matte: None, picture: None, lut: None, @@ -588,8 +585,9 @@ impl Compositor { }, None => continue, }; - if let Some(picture) = picture { - self.take(name, source, &mut layer, picture, now); + if let Some(taken) = taken { + layer.cleared |= taken.cleared; + self.take(name, source, &mut layer, taken.picture, now); } let background = collection .video @@ -608,7 +606,6 @@ impl Compositor { // transparent texel's color: a page arrives so, moq-video renders // a frame opaque, a still is premultiplied here, and an overlay's // paint as it lands. - let mut blank = false; let texture = match picture { source::Picture::Frame(frame) => { let renderer = match layer.renderer.as_mut() { @@ -621,7 +618,6 @@ impl Compositor { .map_err(Error::from) } source::Picture::Rgba { size, mut pixels } => { - blank = pixels.as_chunks::<4>().0.iter().all(|pixel| pixel[3] == 0); premultiply(&mut pixels); upload(&self.device, &self.queue, size, &pixels) } @@ -655,7 +651,6 @@ impl Compositor { layer.error = None; layer.raw = Some(texture); layer.fresh = true; - layer.blank = blank; } Err(err) => { if layer.error.is_none() { @@ -2419,47 +2414,60 @@ mod tests { .await; } - /// A clear picture, such as a media source stopped or played again, - /// shows at once, and the cut-out of the picture before it never does. + /// A source that clears its picture, such as a media source played + /// again, never shows the cut-out of a picture from before, even when its + /// next picture overtakes the clear. #[tokio::test] #[ignore = "needs a Vulkan device; run by just rs render-sw"] - async fn a_clear_picture_overtakes_a_cut_out() { + async fn a_clear_drops_the_cut_out_in_hand() { let (device, queue) = gpu().await; let effects = Effects::new(&device, &queue, 256, 144); - let person = image::load_from_memory(include_bytes!("test_data/person.jpg")) + let person = image::load_from_memory(include_bytes!("test_data/person.jpg")).unwrap(); + let picture = |width: u32, height: u32| { + let rgba = person.resize_exact(width, height, image::imageops::FilterType::Triangle); + upload( + &device, + &queue, + moq_video::Size::new(width, height), + rgba.to_rgba8().as_raw(), + ) .unwrap() - .to_rgba8(); + }; let mut layer = Layer { source: Source::Replay, renderer: None, - raw: Some(upload(&device, &queue, moq_video::Size::new(256, 144), &person).unwrap()), + raw: Some(picture(256, 144)), fresh: true, - blank: false, + cleared: false, matte: None, picture: None, lut: None, overlay: None, error: None, }; - layer.develop("replay", Background::Remove, &device, &queue, &effects); + let develop = |layer: &mut Layer| layer.develop("replay", Background::Remove, &device, &queue, &effects); + let wait = |layer: &mut Layer| { + let Some(Ok(matte)) = &mut layer.matte else { + panic!("not removing the background") + }; + matte.wait(); + }; + develop(&mut layer); assert!(layer.picture.is_none(), "until the cut-out"); - layer.raw = Some(upload(&device, &queue, moq_video::Size::new(1, 1), &[0; 4]).unwrap()); + // The next play's first picture, smaller, replaced the clear unseen. + layer.raw = Some(picture(128, 72)); layer.fresh = true; - layer.blank = true; - layer.develop("replay", Background::Remove, &device, &queue, &effects); - assert_eq!(layer.picture.as_ref().map(Picture::size), Some((1, 1))); - - let Some(Ok(matte)) = &mut layer.matte else { - panic!("not removing the background") - }; - matte.wait(); - layer.develop("replay", Background::Remove, &device, &queue, &effects); - assert_eq!(layer.picture.as_ref().map(Picture::size), Some((1, 1))); - let Some(Ok(matte)) = &layer.matte else { - panic!("not removing the background") - }; - assert!(!matte.busy()); + layer.cleared = true; + develop(&mut layer); + assert!(layer.picture.is_none()); + + wait(&mut layer); + develop(&mut layer); + assert!(layer.picture.is_none(), "the old play's cut-out is dropped"); + wait(&mut layer); + develop(&mut layer); + assert_eq!(layer.picture.as_ref().map(Picture::size), Some((128, 72))); assert!(layer.error.is_none()); } diff --git a/rs/moq-scene/src/publish.rs b/rs/moq-scene/src/publish.rs index 75443851..9ff46f1f 100644 --- a/rs/moq-scene/src/publish.rs +++ b/rs/moq-scene/src/publish.rs @@ -795,7 +795,7 @@ mod tests { /// threads the runtime cannot see, such as a decoder's or an encoder's, /// finishing within any span of the clock. async fn pictures(feed: &crate::source::Feed, first: kio::clock::Instant, count: u32) { - let shown = || matches!(feed.take(), Some(crate::source::Picture::Frame(_))).then_some(()); + let shown = || matches!(feed.next_picture(), Some(crate::source::Picture::Frame(_))).then_some(()); for index in 0..count { until_time(first + std::time::Duration::from_millis(100) * index).await; until(shown).await; diff --git a/rs/moq-scene/src/source.rs b/rs/moq-scene/src/source.rs index df93396a..c36171fa 100644 --- a/rs/moq-scene/src/source.rs +++ b/rs/moq-scene/src/source.rs @@ -55,9 +55,47 @@ pub(crate) enum Picture { Overlay, } -/// The one picture a source holds for the compositor. A newer picture replaces -/// an undrawn one, so a slow canvas skips pictures instead of queuing them. -pub(crate) type Mailbox = Arc>>; +/// The one picture a source holds for the compositor, and whether it cleared +/// its picture since the compositor last took one. A newer picture replaces an +/// undrawn one, so a slow canvas skips pictures instead of queuing them, but +/// not the clear before it. +#[derive(Default)] +pub(crate) struct Slot { + picture: Option, + cleared: bool, +} + +impl Slot { + /// Hold `picture` for the compositor, replacing one not yet drawn. + pub fn show(&mut self, picture: Picture) { + self.picture = Some(picture); + } + + /// Show nothing, ending what the source showed before, such as a play + /// stopped or a page closed. + pub fn clear(&mut self) { + self.picture = Some(clear()); + self.cleared = true; + } + + fn take(&mut self) -> Option { + let picture = self.picture.take()?; + Some(Taken { + picture, + cleared: std::mem::take(&mut self.cleared), + }) + } +} + +pub(crate) type Mailbox = Arc>; + +/// A picture the compositor takes from a source. +pub(crate) struct Taken { + pub picture: Picture, + /// Whether the source cleared its picture since the last one taken, even + /// if `picture` came after the clear: nothing from before it may show. + pub cleared: bool, +} /// When a source last delivered a picture or, for a microphone or system /// audio, a buffer of sound. `None` before its first. @@ -456,7 +494,7 @@ impl Feed { // Cleared before the driver hears of it, so the next frame drawn, such // as the first of a scene going on program, shows nothing rather than // where the last play was, and the new first picture replaces it. - *self.picture.lock().unwrap() = Some(clear()); + self.picture.lock().unwrap().clear(); let cue = Cue { play: latest.run.play, stopped: false, @@ -476,7 +514,7 @@ impl Feed { let mut latest = self.runs.lock().unwrap(); latest.run.ended.get_or_insert_with(kio::clock::now); latest.stopped = true; - *self.picture.lock().unwrap() = Some(clear()); + self.picture.lock().unwrap().clear(); // Kept even with the driver gone, which plays nothing anyway. cues.send_replace(Cue { play: latest.run.play, @@ -560,9 +598,15 @@ impl Feed { } /// The newest picture not yet drawn. - pub(crate) fn take(&self) -> Option { + pub(crate) fn take(&self) -> Option { self.picture.lock().unwrap().take() } + + /// The newest picture not yet drawn, without whether it follows a clear. + #[cfg(test)] + pub(crate) fn next_picture(&self) -> Option { + self.take().map(|taken| taken.picture) + } } /// The work behind one [`Feed`]: opening the source and delivering what it @@ -731,7 +775,7 @@ impl Driver { } fn show(&self, picture: Picture) { - *self.picture.lock().unwrap() = Some(picture); + self.picture.lock().unwrap().show(picture); *self.delivered.lock().unwrap() = Some(kio::clock::now()); set(&self.status, Status::Live); } @@ -1193,7 +1237,7 @@ impl Driver { /// Play each replay [`Feed::replay`] hands over, showing nothing between /// them. A new one cuts off the one playing. async fn replays(&self, mut plays: watch::Receiver, listing: Option<&Listing<'_>>) -> Result<(), Error> { - *self.picture.lock().unwrap() = Some(clear()); + self.picture.lock().unwrap().clear(); set(&self.status, Status::Live); let mut playing: Option> = None; @@ -1210,13 +1254,13 @@ impl Driver { // already, and clearing it again would show before the new // one's first picture even when that is due at once. if playing.is_some() { - *self.picture.lock().unwrap() = Some(clear()); + self.picture.lock().unwrap().clear(); } playing = play.map(|play| Box::pin(self.replay(play, listing)) as Playing<'_>); } result = async { playing.as_mut().expect("guarded").await }, if playing.is_some() => { playing = None; - *self.picture.lock().unwrap() = Some(clear()); + self.picture.lock().unwrap().clear(); set(&self.status, match result { Ok(()) => Status::Live, Err(err) => Status::Failed(err.to_string()), @@ -1266,7 +1310,7 @@ impl Driver { moq_video::decode::Read::Gap { timestamp, .. } | moq_video::decode::Read::End { end: timestamp } => { kio::clock::sleep_until(at(timestamp.clamp(take.start, take.end))).await; - *self.picture.lock().unwrap() = Some(clear()); + self.picture.lock().unwrap().clear(); if let Some(video) = &mut own.track && let Err(err) = video.discontinuity() { @@ -2043,6 +2087,21 @@ mod tests { collection } + /// A picture that replaces a clear before the compositor takes it still + /// says the source cleared, once. + #[test] + fn a_clear_outlives_the_picture_after_it() { + let mut slot = Slot::default(); + slot.show(clear()); + assert!(!slot.take().unwrap().cleared); + slot.clear(); + slot.show(clear()); + assert!(slot.take().unwrap().cleared); + assert!(slot.take().is_none()); + slot.show(clear()); + assert!(!slot.take().unwrap().cleared); + } + #[tokio::test] async fn a_color_shows_one_pixel() { local(async { @@ -2056,12 +2115,12 @@ mod tests { let red = sources.get("red").unwrap(); assert_eq!(red.status(), Status::Live); assert!(red.strip().is_none(), "a color is silent"); - let Some(Picture::Rgba { size, pixels }) = red.take() else { + let Some(Picture::Rgba { size, pixels }) = red.next_picture() else { panic!("a color shows a picture"); }; assert_eq!(size, moq_video::Size::new(1, 1)); assert_eq!(pixels, [255, 0, 0, 255]); - assert!(red.take().is_none(), "taken once"); + assert!(red.next_picture().is_none(), "taken once"); let guest = sources.get("guest").unwrap(); assert_eq!(guest.status(), Status::Offline, "nothing is announced"); @@ -2211,7 +2270,7 @@ mod tests { let drivers = sources.sync(&collection); assert_eq!(drivers.iter().map(Driver::name).collect::>(), ["red"]); start(&sources, drivers).await; - let Some(Picture::Rgba { pixels, .. }) = sources.get("red").unwrap().take() else { + let Some(Picture::Rgba { pixels, .. }) = sources.get("red").unwrap().next_picture() else { panic!("the edited color shows"); }; assert_eq!(pixels, [0, 0, 255, 255]); @@ -2404,7 +2463,7 @@ mod tests { /// The picture a feed shows next, once it shows one. async fn shown(feed: &Feed) -> Duration { - until(|| match feed.take() { + until(|| match feed.next_picture() { Some(Picture::Frame(frame)) => Some(frame.timestamp.into()), Some(_) => panic!("a broadcast shows only frames"), None => None, @@ -2432,7 +2491,7 @@ mod tests { let stamp = moq_net::Timestamp::from_millis(1_000).unwrap(); let due = until(|| clock.due(stamp)).await; assert_eq!(due, arrived + VIDEO_DELAY); - assert!(feed.take().is_none(), "shown on arrival"); + assert!(feed.next_picture().is_none(), "shown on arrival"); until_time(due).await; assert_eq!(shown(feed).await, Duration::from(stamp)); assert_eq!(feed.delay(), Some(VIDEO_DELAY)); @@ -2477,14 +2536,14 @@ mod tests { until_time(kio::clock::now()).await; let arrived = kio::clock::now(); picture(&mut live.video, &mut encoder, 0); - let moved = until(|| match feed.take() { + let moved = until(|| match feed.next_picture() { Some(Picture::Frame(frame)) => panic!("{:?} shown on arrival", frame.timestamp), _ => clock.due(first).filter(|at| *at != due), }) .await; assert!(moved > due, "the replacement re-anchored behind the first track"); until_time(arrived + VIDEO_DELAY - Duration::from_millis(1)).await; - assert!(feed.take().is_none(), "shown before its delay"); + assert!(feed.next_picture().is_none(), "shown before its delay"); until_time(arrived + VIDEO_DELAY).await; assert!( shown(feed).await < Duration::from(first), @@ -2520,7 +2579,7 @@ mod tests { let due = arrived + target + crate::playout::BUS_LATENCY; until(|| (clock.due(stamp) == Some(due)).then_some(())).await; until_time(due - Duration::from_millis(1)).await; - assert!(feed.take().is_none(), "shown before its sound"); + assert!(feed.next_picture().is_none(), "shown before its sound"); until_time(due).await; assert_eq!(shown(feed).await, Duration::from(stamp)); assert_eq!(feed.delay(), Some(target)); @@ -2589,7 +2648,7 @@ mod tests { let drivers = sources.sync(&collection); start(&sources, drivers).await; - let Some(Picture::Rgba { size, pixels }) = sources.get("logo").unwrap().take() else { + let Some(Picture::Rgba { size, pixels }) = sources.get("logo").unwrap().next_picture() else { panic!("an image shows a picture"); }; assert_eq!(size, moq_video::Size::new(3, 2)); @@ -2662,7 +2721,7 @@ mod tests { let title = sources.get("title").unwrap(); assert_eq!(title.status(), Status::Live); - assert!(matches!(title.take(), Some(Picture::Overlay))); + assert!(matches!(title.next_picture(), Some(Picture::Overlay))); let Status::Failed(reason) = sources.get("shadow").unwrap().status() else { panic!("an overlay outside the subset fails"); }; @@ -2706,7 +2765,7 @@ mod tests { let drivers = sources.sync(&collection); start(&sources, drivers).await; let feed = sources.get("replay").unwrap(); - assert!(matches!(feed.take(), Some(Picture::Rgba { pixels, .. }) if pixels == [0; 4])); + assert!(matches!(feed.next_picture(), Some(Picture::Rgba { pixels, .. }) if pixels == [0; 4])); let (broadcast, video, _live) = video(None).await; let target = Target { @@ -2728,9 +2787,9 @@ mod tests { for index in 45..75u64 { let timestamp = moq_net::Timestamp::from_micros(index * 1_000_000 / 30).unwrap(); let due = begin + (Duration::from(timestamp) - Duration::from(start)).div_f32(speed); - assert!(feed.take().is_none(), "a picture before {timestamp:?} is due"); + assert!(feed.next_picture().is_none(), "a picture before {timestamp:?} is due"); until_time(due).await; - let shown = until(|| match feed.take() { + let shown = until(|| match feed.next_picture() { Some(Picture::Frame(frame)) => Some(frame.timestamp), Some(_) => panic!("cleared before {timestamp:?}"), None => None, @@ -2741,12 +2800,15 @@ mod tests { // Nothing more, and the replay ends once the span's second has // played over two. - assert!(feed.take().is_none(), "the picture at the end shows for no time"); + assert!( + feed.next_picture().is_none(), + "the picture at the end shows for no time" + ); let end = begin + Duration::from_secs(2); until_time(end - Duration::from_millis(1)).await; - assert!(feed.take().is_none(), "cleared before the end"); + assert!(feed.next_picture().is_none(), "cleared before the end"); until_time(end).await; - until(|| matches!(feed.take(), Some(Picture::Rgba { .. })).then_some(())).await; + until(|| matches!(feed.next_picture(), Some(Picture::Rgba { .. })).then_some(())).await; assert_eq!(feed.status(), Status::Live, "ready for the next replay"); }) .await; @@ -2778,10 +2840,10 @@ mod tests { }; // Its first picture, at 1.5 s, is due at once. feed.replay(take(2_500_000), 1.0).unwrap(); - until(|| matches!(feed.take(), Some(Picture::Frame(_))).then_some(())).await; + until(|| matches!(feed.next_picture(), Some(Picture::Frame(_))).then_some(())).await; // This one's first picture, at the same 1.5 s, is due 20 ms in. feed.replay(take(2_480_000), 1.0).unwrap(); - let shown = until(|| feed.take()).await; + let shown = until(|| feed.next_picture()).await; assert!(matches!(shown, Picture::Rgba { pixels, .. } if pixels == [0; 4])); }) .await; @@ -2813,7 +2875,7 @@ mod media_tests { /// The next picture `feed` shows, passing over the clear a restart puts up, /// and when it showed. async fn shown(feed: &Feed) -> (moq_net::Timestamp, Instant) { - let timestamp = until(|| match feed.take() { + let timestamp = until(|| match feed.next_picture() { Some(Picture::Frame(frame)) => Some(frame.timestamp), Some(Picture::Rgba { pixels, .. }) if pixels == [0; 4] => None, Some(_) => panic!("not a decoded picture"), @@ -2848,7 +2910,7 @@ mod media_tests { let into = Duration::from_millis(index * 100); // Within the timer wheel's millisecond of when the test saw the first. until_time(begin + into - Duration::from_millis(2)).await; - assert!(feed.take().is_none(), "picture {index} before its moment"); + assert!(feed.next_picture().is_none(), "picture {index} before its moment"); until_time(begin + into).await; let (timestamp, _) = shown(feed).await; assert_eq!(Duration::from(timestamp) - Duration::from(first), into); @@ -2860,10 +2922,10 @@ mod media_tests { assert_eq!(feed.status(), Status::Live); until_time(begin + Duration::from_millis(1_100)).await; until_status(&sources, "clip.mkv", Status::Ended).await; - assert!(feed.take().is_none(), "the last picture holds"); + assert!(feed.next_picture().is_none(), "the last picture holds"); feed.play().unwrap(); - let cleared = feed.take(); + let cleared = feed.next_picture(); assert!( matches!(cleared, Some(Picture::Rgba { pixels, .. }) if pixels == [0; 4]), "the held picture is cleared at once" @@ -2894,7 +2956,7 @@ mod media_tests { let feed = sources.get("clip.mkv").unwrap(); assert_eq!(feed.status(), Status::Ended); until_time(kio::clock::now() + Duration::from_millis(1_100)).await; - assert!(feed.take().is_none(), "nothing plays until asked"); + assert!(feed.next_picture().is_none(), "nothing plays until asked"); assert_eq!(feed.run(), Run::default()); feed.play().unwrap(); @@ -2981,7 +3043,7 @@ mod media_tests { feed.stop().unwrap(); let stopped = kio::clock::now(); - let blank = feed.take(); + let blank = feed.next_picture(); assert!( matches!(blank, Some(Picture::Rgba { pixels, .. }) if pixels == [0; 4]), "blank at once" @@ -2991,7 +3053,7 @@ mod media_tests { let heard = listen(&mut mixer, &program, &mut at, stopped + Duration::from_millis(500)).await; assert_eq!(heard, 0.0, "nothing it queued plays"); assert!( - !matches!(feed.take(), Some(Picture::Frame(_))), + !matches!(feed.next_picture(), Some(Picture::Frame(_))), "no picture after the stop" ); assert_eq!(feed.run().ended, Some(stopped), "the play stays ended there"); @@ -3023,7 +3085,7 @@ mod media_tests { let (last, _) = shown(feed).await; assert_eq!(Duration::from(last) - Duration::from(first), Duration::from_millis(900)); until_time(begin + Duration::from_millis(998)).await; - assert!(feed.take().is_none(), "the start again before the end"); + assert!(feed.next_picture().is_none(), "the start again before the end"); until_time(begin + Duration::from_millis(1_100)).await; let (again, _) = shown(feed).await; assert_eq!(again, first); From 71a666981b91b353c3347f0bd6ff12306e9a4258 Mon Sep 17 00:00:00 2001 From: Luke Curley Date: Fri, 6 Nov 2026 00:48:25 -0800 Subject: [PATCH 6/6] fix(scene): a clone of a source with its background removed adds cleanly A clone copies its source's crop and filters but not a removed background, which validation refuses on a clone. Also from review: a matte failure reports over Compositor::error without overwriting or clearing a picture's own error, a clear drops the held picture so nothing from before it shows when the next one fails to draw, the clear test waits for the old cut-out before clearing, and the docs say a slow model skips pictures. Co-Authored-By: Claude Opus 5.5 --- README.md | 5 +-- rs/moq-scene/src/collection.rs | 3 +- rs/moq-scene/src/compositor.rs | 36 +++++++++++--------- rs/moq-scene/src/matte.rs | 5 +-- rs/moq-scene/src/source.rs | 9 +++-- rs/moq-studio/src/ui.rs | 62 ++++++++++++++++++++++++++++++---- 6 files changed, 90 insertions(+), 30 deletions(-) diff --git a/README.md b/README.md index 55ca415a..01a8eecd 100644 --- a/README.md +++ b/README.md @@ -588,8 +588,9 @@ wherever it is shown, and an item's `crop`, `filters`, and `blend` its own. `background = "remove"` cuts the person out of a camera, display, window, image, media, broadcast, browser, or replay source's picture before its crop and filters, leaving the rest transparent. A segmentation model finds them in -each picture on the CPU, so each picture shows a frame late, and only once -its cut-out is ready. It is MediaPipe's selfie segmentation model, made for +each picture on the CPU, so each picture shows only once its cut-out is +ready, a frame or more late, and a model that falls behind skips pictures +rather than queue them. It is MediaPipe's selfie segmentation model, made for one or two people near the camera. A clone shows its source's cut-out, so it cannot remove a background of its own. A `crop` trims a fraction (0 to 1) of the picture off its `left`, `top`, `right`, and `bottom`, opposite diff --git a/rs/moq-scene/src/collection.rs b/rs/moq-scene/src/collection.rs index c1e09b75..731fbee7 100644 --- a/rs/moq-scene/src/collection.rs +++ b/rs/moq-scene/src/collection.rs @@ -1361,7 +1361,8 @@ pub enum Background { #[default] Keep, /// Made transparent, leaving the person a segmentation model finds in each - /// picture. Each picture draws a frame late, with its own cut-out. The + /// picture. Each picture draws once its own cut-out is ready, a frame or + /// more late, skipping pictures while the model is behind. The /// source's own track keeps the background, since its encoding carries no /// transparency. Remove, diff --git a/rs/moq-scene/src/compositor.rs b/rs/moq-scene/src/compositor.rs index 8d4b4ef2..c196c659 100644 --- a/rs/moq-scene/src/compositor.rs +++ b/rs/moq-scene/src/compositor.rs @@ -160,7 +160,8 @@ struct Layer { cleared: bool, /// Cuts the person out of each picture, while the source's background is /// removed, or why it cannot. A failure stays until the background is kept - /// or the source edited, since retrying the model would fail the same way. + /// or the source edited, since retrying the model would fail the same way, + /// and is reported over `error`. matte: Option>, /// The newest picture drawn; `None` until the first arrives, and while the /// first cut-out is under way. @@ -187,11 +188,8 @@ impl Layer { let cleared = std::mem::take(&mut self.cleared); if background == Background::Keep { // One switched back shows the picture it held back. - match self.matte.take() { - Some(Err(_)) => self.error = None, - Some(Ok(_)) => {} - None if !self.fresh => return, - None => {} + if self.matte.take().is_none() && !self.fresh { + return; } self.fresh = false; self.picture = self.raw.as_ref().map(|raw| effects.picture(raw)); @@ -204,8 +202,7 @@ impl Layer { self.picture = None; self.fresh = self.raw.is_some(); self.matte = Some(Matte::new(device, queue).map_err(|err| err.to_string())); - } else if let Some(Err(err)) = &self.matte { - self.error = Some(err.clone()); + } else if let Some(Err(_)) = &self.matte { return; } // The cut-out in hand is from before the clear, such as a media @@ -227,7 +224,6 @@ impl Layer { }; if let Some(err) = failed { tracing::warn!(source = %name, %err, "cannot remove the background"); - self.error = Some(err.clone()); self.picture = None; self.matte = Some(Err(err)); return; @@ -369,9 +365,14 @@ impl Compositor { self.program_scene.as_deref() } - /// Why `source`'s newest picture could not be drawn, until one is. + /// Why `source`'s newest picture could not be drawn, until one is, or why + /// its background cannot be removed. pub fn error(&self, source: &str) -> Option<&str> { - self.layers.get(source)?.error.as_deref() + let layer = self.layers.get(source)?; + match &layer.matte { + Some(Err(err)) => Some(err), + _ => layer.error.as_deref(), + } } /// Whether a transition is under way. @@ -586,7 +587,13 @@ impl Compositor { None => continue, }; if let Some(taken) = taken { - layer.cleared |= taken.cleared; + if taken.cleared { + // Nothing from before the clear may show, even if the picture + // after it fails to draw. + layer.cleared = true; + layer.raw = None; + layer.fresh = true; + } self.take(name, source, &mut layer, taken.picture, now); } let background = collection @@ -2454,16 +2461,13 @@ mod tests { }; develop(&mut layer); assert!(layer.picture.is_none(), "until the cut-out"); + wait(&mut layer); // The next play's first picture, smaller, replaced the clear unseen. layer.raw = Some(picture(128, 72)); layer.fresh = true; layer.cleared = true; develop(&mut layer); - assert!(layer.picture.is_none()); - - wait(&mut layer); - develop(&mut layer); assert!(layer.picture.is_none(), "the old play's cut-out is dropped"); wait(&mut layer); develop(&mut layer); diff --git a/rs/moq-scene/src/matte.rs b/rs/moq-scene/src/matte.rs index 49104a57..9b8f9803 100644 --- a/rs/moq-scene/src/matte.rs +++ b/rs/moq-scene/src/matte.rs @@ -4,8 +4,9 @@ //! The compositor shrinks each picture on the GPU to the model's size and //! reads that back. A thread of the matte's own runs the model on the CPU, //! with tract, and the compositor cuts the held full-size picture out with -//! the result. Each picture is drawn with its own matte, a frame late, never -//! with an older one. +//! the result. Each picture is drawn with its own matte, a frame or more +//! late, never with an older one; pictures that arrive while the model works +//! are skipped for the newest. use std::collections::HashMap; use std::sync::{Arc, OnceLock, mpsc}; diff --git a/rs/moq-scene/src/source.rs b/rs/moq-scene/src/source.rs index c36171fa..b9832b96 100644 --- a/rs/moq-scene/src/source.rs +++ b/rs/moq-scene/src/source.rs @@ -2095,8 +2095,13 @@ mod tests { slot.show(clear()); assert!(!slot.take().unwrap().cleared); slot.clear(); - slot.show(clear()); - assert!(slot.take().unwrap().cleared); + slot.show(Picture::Rgba { + size: moq_video::Size::new(2, 1), + pixels: vec![255; 8], + }); + let taken = slot.take().unwrap(); + assert!(taken.cleared); + assert!(matches!(taken.picture, Picture::Rgba { size, .. } if size == moq_video::Size::new(2, 1))); assert!(slot.take().is_none()); slot.show(clear()); assert!(!slot.take().unwrap().cleared); diff --git a/rs/moq-studio/src/ui.rs b/rs/moq-studio/src/ui.rs index 8331a124..d808f9fd 100644 --- a/rs/moq-studio/src/ui.rs +++ b/rs/moq-studio/src/ui.rs @@ -1637,13 +1637,8 @@ impl Panels { draft.remove_source(&name) }) } else if let Some(name) = clone { - // A clone of a clone shows the same capture, so it clones that, with - // a copy of the clone's filters. let collection = state.collection(); - let source = Source::Clone { - source: collection.capture(&name).to_string(), - }; - let video = collection.video.get(&name).cloned(); + let (source, video) = clone_of(collection, &name); let clone = collection.unused_name(&format!("{name} clone")); let layer = self.layer(&state).ok(); add(&mut state, layer, clone, source, video).map(drop) @@ -1867,7 +1862,7 @@ impl Panels { let mut removed = *background == Background::Remove; let response = ui .checkbox(&mut removed, "Remove") - .on_hover_text("Cut the person out of the picture, leaving the rest transparent, before the crop and every filter. Each picture shows a frame late, and the source's own track keeps the background."); + .on_hover_text("Cut the person out of the picture, leaving the rest transparent, before the crop and every filter. Each picture shows a frame or more late, and the source's own track keeps the background."); if response.changed() { *background = if removed { Background::Remove } else { Background::Keep }; let verb = if removed { "Remove" } else { "Keep" }; @@ -3282,6 +3277,20 @@ fn color_ui(ui: &mut Ui, color: &mut moq_scene::Rgba) -> egui::Response { response } +/// The source and video settings of a clone of `name`. A clone of a clone +/// shows the same capture, so it clones that. It copies the crop and filters, +/// but not a removed background: the clone already shows the cut-out. +fn clone_of(collection: &Collection, name: &str) -> (Source, Option