diff --git a/Cargo.lock b/Cargo.lock index 54dc1084..f72ff4fe 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -86,7 +86,7 @@ dependencies = [ "futures-lite", "futures-util", "serde", - "zbus", + "zbus 5.19.0", ] [[package]] @@ -399,9 +399,23 @@ dependencies = [ "futures-util", "getrandom 0.4.3", "serde", + "tokio", + "zbus 5.19.0", +] + +[[package]] +name = "ashpd" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ba377f1fb1e3972907220f1f8e7c0a45164580905c981d872c1fb90d921cbcc" +dependencies = [ + "bitflags 2.13.2", + "futures-util", + "getrandom 0.4.3", + "serde", "serde_repr", "tokio", - "zbus", + "zbus 6.3.0", ] [[package]] @@ -605,7 +619,7 @@ dependencies = [ "enumflags2", "serde", "static_assertions", - "zbus", + "zbus 5.19.0", "zbus-lockstep", "zbus-lockstep-macros", "zbus_names", @@ -620,7 +634,7 @@ checksum = "2230e48787ed3eb4088996eab66a32ca20c0b67bbd4fd6cdfe79f04f1f04c9fc" dependencies = [ "atspi-common", "serde", - "zbus", + "zbus 5.19.0", ] [[package]] @@ -716,9 +730,9 @@ dependencies = [ [[package]] name = "axum-server" -version = "0.8.0" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1df331683d982a0b9492b38127151e6453639cd34926eb9c07d4cd8c6d22bfc" +checksum = "3766086d344b8f8d2a9cf6fb211b581de5b160e052d7bc75a92e58cc41909054" dependencies = [ "arc-swap", "bytes", @@ -731,6 +745,7 @@ dependencies = [ "pin-project-lite", "rustls", "rustls-pki-types", + "socket2", "tokio", "tokio-rustls", "tower-service", @@ -1136,9 +1151,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.10.0" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86e055fa6e3e40ad6187ba25b6855eeb635d5271f8e0f0e1e9a5826b8d75bea0" +checksum = "4ff2a8126fff0f8c839080d619675a585e61720bb12d2baceae45769fd66f155" dependencies = [ "find-msvc-tools", "jobserver", @@ -1681,7 +1696,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d045de693cb712d0b22c6a64be5b953f67b3ce00ab5ad3dd5d8b441886ab8e1a" dependencies = [ "quote", - "syn 3.0.6", + "syn 2.0.119", ] [[package]] @@ -1862,11 +1877,12 @@ dependencies = [ [[package]] name = "der" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a878c850e9e421b20262e9b41f9c860e4785fa07541c266b62ff9d1ef998a80a" +checksum = "6a996a108feb8b427a6e12fcf6af4aa83409b79d72c15337d7741368131ee004" dependencies = [ "const-oid 0.10.2", + "zeroize", ] [[package]] @@ -2517,9 +2533,9 @@ checksum = "1c66915cc5391097de7a2b0b972e8505aa33c0df401fd3a6811dbdb32881ba48" [[package]] name = "flate2" -version = "1.1.10" +version = "1.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e634e2e0ebac1ee034020da1ca582e17ffe4e0f5e985823721e168928136dcb" +checksum = "626d4928326b646e70f65ed36fc7cf9f206bdb68a0019ee7c6b4709da4e084c4" dependencies = [ "crc32fast", "miniz_oxide 0.9.1", @@ -4326,7 +4342,7 @@ dependencies = [ "kio", "moq-crypto", "moq-pattern", - "pkcs1", + "pkcs1 0.8.0", "pkcs8 0.11.0", "rand", "reqwest", @@ -4538,17 +4554,6 @@ dependencies = [ "usage-rs", ] -[[package]] -name = "moq-room" -version = "0.2.11" -dependencies = [ - "kio", - "moq-auth", - "moq-json", - "moq-net", - "thiserror 2.0.21", -] - [[package]] name = "moq-scene" version = "0.1.0" @@ -4589,6 +4594,7 @@ dependencies = [ "url", "vello", "wayland-client", + "wgpu", "wuff", "x11rb 0.13.2", ] @@ -4628,7 +4634,7 @@ name = "moq-studio" version = "0.1.0" dependencies = [ "anyhow", - "ashpd", + "ashpd 0.13.13", "bytes", "eframe", "egui", @@ -4646,7 +4652,6 @@ dependencies = [ "moq-mux", "moq-net", "moq-relay", - "moq-room", "moq-scene", "moq-stats", "moq-tokio", @@ -4668,6 +4673,7 @@ dependencies = [ "tracing", "url", "usage-rs", + "wgpu", "windows-sys 0.61.2", "winit", "x11rb 0.13.2", @@ -4682,6 +4688,7 @@ dependencies = [ "futures", "hex", "http", + "httparse", "humantime", "humantime-serde", "jni", @@ -4709,6 +4716,7 @@ dependencies = [ "time", "tokio", "tokio-rustls", + "tokio-tungstenite", "toml", "tracing", "tracing-android", @@ -4745,7 +4753,7 @@ version = "0.1.10" dependencies = [ "anyhow", "ash", - "ashpd", + "ashpd 0.14.0", "block2 0.6.2", "bytemuck", "bytes", @@ -6056,6 +6064,16 @@ dependencies = [ "spki 0.7.3", ] +[[package]] +name = "pkcs1" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6250dd7321adbe93d12b750aee0ced159fd13e77f625edcdf1cb6f83cd99f650" +dependencies = [ + "der 0.8.3", + "spki 0.8.1", +] + [[package]] name = "pkcs8" version = "0.10.2" @@ -6072,7 +6090,7 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "451913da69c775a56034ea8d9003d27ee8948e12443eae7c038ba100a4f21cb7" dependencies = [ - "der 0.8.2", + "der 0.8.3", "spki 0.8.1", ] @@ -6711,7 +6729,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd34e9d4695a1a34a4d8fc31d3db5acda9a24cfd2ca90ffbd36f7c62dc4bb7eb" dependencies = [ "jsonwebtoken", - "pkcs1", + "pkcs1 0.7.5", "rind", ] @@ -7202,9 +7220,9 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e7523beb55eece201a2356bee0bbca0d1ab466c14c07703b2e0ee6d42cb0c2c" +checksum = "9c187e0a369471c550af028cba56d4f4fa2a489ad28151ae95a4d340a2a8b782" dependencies = [ "serde_core", ] @@ -7414,9 +7432,9 @@ checksum = "9b0e903ee191d8f7a8fbf0d712c3a1699d19e04ceba5ad1eb673053c7d938a09" [[package]] name = "smallvec" -version = "1.16.4" +version = "1.16.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0d5d4b1981b8bbbb7aed204cae5726d683d5d6ac7e74ec54122ea28f315e7c8" +checksum = "149309498a5f7334b12ddae0cad8aba81ce785fe91755068867e017cf98fee46" dependencies = [ "serde", ] @@ -7611,7 +7629,8 @@ version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ef958a98b9d5da290cfc78946e9f3e61e1e62a18db0d92cac0b83cc161491a9" dependencies = [ - "der 0.8.2", + "base64ct", + "der 0.8.3", ] [[package]] @@ -8270,9 +8289,9 @@ dependencies = [ [[package]] name = "toml" -version = "1.1.8+spec-1.1.0" +version = "1.2.1+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20489e00e4d8741d6be680764cc12e270655e375a20d1011e844a9c3379e678d" +checksum = "d5755c51863cdac711f1956baf8eb9588e060755f7d3c4c979e70ea1e1f32cd7" dependencies = [ "indexmap 2.14.2", "serde_core", @@ -8285,9 +8304,9 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "1.1.2+spec-1.1.0" +version = "1.1.3+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b86d767906c6c42421dcba507eb9d203e779497710a47782a224bb871653053" +checksum = "173f25c883cd2176a2d8212155638c0a60d484a9d84546d270866f40f56b6e49" dependencies = [ "serde_core", ] @@ -8850,9 +8869,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.29.0" +version = "1.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a0e2d11620c50695fe12bbbfde96b3477fe606e7284c22d505c12ce51214514" +checksum = "4a06f08a856b009bc7bbaf7d3e79808595d032dd19074c0c2ef26e49e03e6bdc" dependencies = [ "getrandom 0.4.3", "js-sys", @@ -9994,11 +10013,39 @@ dependencies = [ "uuid", "windows-sys 0.61.2", "winnow", - "zbus_macros", + "zbus_macros 5.19.0", "zbus_names", "zvariant", ] +[[package]] +name = "zbus" +version = "6.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b4aae740b23927ceabed962431abab2cdefb9f7f885e5bbab062da09bf580e4" +dependencies = [ + "async-trait", + "bitflags 2.13.2", + "endi", + "futures-core", + "hex", + "libc", + "ordered-stream", + "rustix 1.1.6", + "serde", + "serde_repr", + "socket2", + "tokio", + "uds_windows", + "uuid", + "windows-sys 0.61.2", + "winnow", + "zbus_macros 6.3.0", + "zbus_utils", + "zcheapstr", + "zruntime", +] + [[package]] name = "zbus-lockstep" version = "0.5.2" @@ -10038,6 +10085,18 @@ dependencies = [ "zvariant_utils", ] +[[package]] +name = "zbus_macros" +version = "6.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37c9dd4beaf145c16fcb2902862f50da86e54aed13dd368ddf64a1d17e6b8529" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.6", + "zbus_utils", +] + [[package]] name = "zbus_names" version = "4.3.4" @@ -10049,6 +10108,19 @@ dependencies = [ "zvariant", ] +[[package]] +name = "zbus_utils" +version = "6.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af55e52da295311b368c45bcae221f020e28e97a2420360170ce389218e76ec7" +dependencies = [ + "proc-macro2", + "quote", + "serde", + "syn 3.0.6", + "winnow", +] + [[package]] name = "zbus_xml" version = "5.2.1" @@ -10178,6 +10250,16 @@ version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" +[[package]] +name = "zruntime" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce6a55d4f521760475a30f7b96779508fe8c40dc834478709454dd1d5f0ebc72" +dependencies = [ + "futures-core", + "futures-io", +] + [[package]] name = "zune-core" version = "0.5.3" diff --git a/Cargo.toml b/Cargo.toml index 3ebfd465..6226049a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -31,7 +31,6 @@ moq-json = { path = "moq/rs/moq-json" } moq-mux = { path = "moq/rs/moq-mux" } moq-net = { path = "moq/rs/moq-net" } moq-relay = { path = "moq/rs/moq-relay", default-features = false } -moq-room = { path = "moq/rs/moq-room" } moq-scene = { path = "rs/moq-scene" } moq-stats = { path = "moq/rs/moq-stats" } moq-tokio = { path = "moq/rs/moq-tokio", default-features = false } @@ -57,6 +56,8 @@ toml = "1.1" tracing = "0.1" url = "2" usage-rs = "7.1.0" +# moq-video's release, so its textures and the compositor's are one type. +wgpu = "30" # wgpu-core 30.0.1 with Surface::configure holding command indices across its # wait and the hal configure, so a submit from the compositor or encoder on the diff --git a/README.md b/README.md index b99e2022..c824dada 100644 --- a/README.md +++ b/README.md @@ -306,11 +306,15 @@ A broadcast source, a guest's included, plays on its publisher's timestamps, so its sound and picture stay in sync through network jitter. It plays as far behind what arrives as the network's jitter needs, measured as it goes as `moq play --delay auto` does, plus 50 ms to hand its sound to the mix, up to -2 s in all. Sound and picture each -keep that schedule on their own: a sound stall leaves the picture playing, -and the sound comes back on the clock, skipping what it missed; a picture -stall leaves the sound playing, with the canvas showing the last picture -meanwhile. Without audio, the picture plays 100 ms behind. Sources shows how +2 s in all. When that delay moves, the sound speeds up or slows down by about +a tenth until it is back on schedule, as `moq play`'s does, rather than +skipping or falling silent: a move of 100 ms takes about a second. A move +earlier by more than 200 ms skips, and one later by more than about 130 ms +falls silent until the sound is due. Sound and picture each keep that +schedule on their own: a sound stall leaves the picture playing, and the +sound comes back on the clock, skipping what it missed by more than 200 ms +and speeding up through the rest; a picture stall leaves the sound playing, +with the canvas showing the last picture meanwhile. Without audio, the picture plays 100 ms behind. Sources shows how far behind each broadcast plays. ### Audio scenes @@ -481,7 +485,7 @@ no sound has no strip in the Audio panel. Guests and phones join a room the studio owns on its relay, from a web page, and their camera and screen appear as broadcast sources. The page plays the show back to them, without their own voice. The room follows -[moq-room](https://github.com/moq-dev/moq/tree/main/rs/moq-room): a guest +[`@moq/room`](https://github.com/moq-dev/moq/tree/main/js/room): a guest named `alice` publishes `alice/camera.hang` and `alice/screen.hang` under it. Guests need a relay that verifies tokens, so run your own with [`moq auth serve`](https://doc.moq.dev/bin/cli) behind it, and a key that can @@ -1227,8 +1231,8 @@ own viewers: published scene lists the program's audio, graded where the program writes it. Latency compares the two hosts' wall clocks, so keep both synced. -- **Viewers**: each viewer that reports, with its round trip, latency, and - playout delay. The studio reads 64 at most per broadcast, a sample the grades +- **Viewers**: each viewer that reports, with its round trip and latency. + The studio reads 64 at most per broadcast, a sample the grades rest on: it counts the rest, and a reader one frees goes to the next viewer to arrive. diff --git a/bun.lock b/bun.lock index e4bea519..13593ec8 100644 --- a/bun.lock +++ b/bun.lock @@ -113,7 +113,6 @@ "@moq/qmux": "workspace:^", "@moq/signals": "workspace:*", "pako": "^3.0.3", - "sorted-btree": "^2.1.0", }, "devDependencies": { "@types/bun": "^1.4.4", @@ -145,15 +144,16 @@ "@moq/signals": "workspace:^", "@moq/ui": "workspace:^", "@moq/video": "workspace:^", - "mediabunny": "^1.65.0", + "mediabunny": "^1.65.2", }, "devDependencies": { + "@moq/libav": "workspace:^", "@types/audioworklet": "^0.0.100", "@types/bun": "^1.4.4", "@typescript/lib-dom": "npm:@types/web@^0.0.358", - "rolldown": "^1.2.16", + "rolldown": "^1.3.0", "typescript": "7.0.2", - "vite": "^8.3.5", + "vite": "^8.3.6", }, }, "moq/js/qmux": { @@ -186,7 +186,7 @@ "@types/bun": "^1.4.4", "@typescript/lib-dom": "npm:@types/web@^0.0.358", "typescript": "7.0.2", - "vite": "^8.3.5", + "vite": "^8.3.6", }, }, "moq/js/signals": { @@ -203,18 +203,15 @@ "fast-check": "^4.10.2", "react": "^19.3.1", "react-dom": "^19.3.1", - "solid-js": "^1.9.18", "typescript": "7.0.2", }, "peerDependencies": { "@types/react": "^19.2.17", "react": "^19.3.1", - "solid-js": "^1.9.15", }, "optionalPeers": [ "@types/react", "react", - "solid-js", ], }, "moq/js/ui": { @@ -227,7 +224,7 @@ "@types/bun": "^1.4.4", "@typescript/lib-dom": "npm:@types/web@^0.0.358", "typescript": "7.0.2", - "vite": "^8.3.5", + "vite": "^8.3.6", }, }, "moq/js/video": { @@ -258,12 +255,13 @@ "media-captions": "0.0.18", }, "devDependencies": { + "@moq/libav": "workspace:^", "@types/audioworklet": "^0.0.100", "@types/bun": "^1.4.4", "@typescript/lib-dom": "npm:@types/web@^0.0.358", - "rolldown": "^1.2.16", + "rolldown": "^1.3.0", "typescript": "7.0.2", - "vite": "^8.3.5", + "vite": "^8.3.6", }, }, }, @@ -290,6 +288,12 @@ "@biomejs/cli-win32-x64": ["@biomejs/cli-win32-x64@2.6.4", "", { "os": "win32", "cpu": "x64" }, "sha512-pYsMy5AThiHFOZAsngg8qN4PurM6nInKBhVX7sbj3eNpRQqo1Hb0MgCwPL7VqVMrmcEEMj9Ks3qbkallR65e8g=="], + "@emnapi/core": ["@emnapi/core@2.0.0-beta.2", "", { "dependencies": { "@emnapi/wasi-threads": "2.2.0", "tslib": "^2.4.0" } }, "sha512-MzCVoWtcg4Pm2B3je5mMvYMvj3MmBKw+fU7vbsJc9/iT8ip6/eYIHo/Dsm/mr+wsHB6SEyJDuxB09Yy6r/8+4A=="], + + "@emnapi/runtime": ["@emnapi/runtime@2.0.0-beta.2", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-JcrSPzPvZuNZvJqPTF9Fw25LbOJ8avzFVlaf2grmH4Cku0oGP47tRgqPZadcfj3YoZMHkFVnCYFbQM8I+i5QEw=="], + + "@emnapi/wasi-threads": ["@emnapi/wasi-threads@2.2.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-JP7OYH38Q7+pyTAe14raZHLQIK7BDKbdwji+Xi3pcd/6QkJYQH3SX4wu6EplGrGJWRepoNzedfm0G3B9Z4e9Rw=="], + "@happy-dom/global-registrator": ["@happy-dom/global-registrator@21.0.4", "", { "dependencies": { "@types/node": ">=20.0.0", "happy-dom": "^21.0.4" } }, "sha512-Bbr0hW9hhDhBf3Jp0EyDlkCbFgbr0z2jd3BMKYOYW+fOkPM4Nx195GMXyCtRCGEgoNn6i09FabXrSkNFm2ONzg=="], "@kixelated/libavjs-webcodecs-polyfill": ["@kixelated/libavjs-webcodecs-polyfill@0.5.6", "", { "dependencies": { "@libav.js/types": "^6.7.7", "@ungap/global-this": "^0.4.4" } }, "sha512-A6FBsEAT/t0cDDaxo3h5XabiHX2RtycQbWV+MNKUghmctrXU1ygl05i3TTtnSF/eLmCLLO8xBMrXO+eGnpLWFw=="], @@ -328,40 +332,46 @@ "@moq/watch": ["@moq/watch@workspace:moq/js/watch"], - "@oxc-project/types": ["@oxc-project/types@0.156.0", "", {}, "sha512-1Duyg48TdJNdyhEB8Xn1L36bT9Pv6GUtlKjHxOys8xkaF/rQq3XJE+bAurSK/AgIz5mGFsb77cn9Pb20+WCScw=="], + "@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.2.6", "", { "dependencies": { "@tybys/wasm-util": "^0.10.3" }, "peerDependencies": { "@emnapi/core": "^1.7.1 || 2.0.0-beta.2", "@emnapi/runtime": "^1.7.1 || 2.0.0-beta.2" } }, "sha512-mRyDmEw9/fCDXCGfL1sbgIw/GUK0PVxRW4YwgPN61F3LQ+fSyoBFarJVzgGyhF6kRzEQZ0FejDqm4WLXSeqQmw=="], - "@rolldown/binding-android-arm-eabi": ["@rolldown/binding-android-arm-eabi@1.2.16", "", { "os": "android", "cpu": "arm" }, "sha512-ia3DwAs0OsMGS7+IConptSiyk9pEXkOx/AbJ2n/lAGxH3QkWQus1t8d7gnAT38FCU2sQu8lUbeR6AiZFv4JxaA=="], + "@oxc-project/types": ["@oxc-project/types@0.158.0", "", {}, "sha512-xZ66qA4WmLbTLlxH3mqMd8f9UKbaOzOT0ATwFf4DH/14pMgpUrtqtjyYzOQmgfl2a0iRAAMbQ9G1th/67jRzGw=="], - "@rolldown/binding-android-arm64": ["@rolldown/binding-android-arm64@1.2.16", "", { "os": "android", "cpu": "arm64" }, "sha512-kx5wBiMB6E7TEvpl2B9gjLU004BkvEm2Dr941BFjx/SontPwSzNuQUIoVKxHHoSjpFIfHMmcguyLOtyn0hObRg=="], + "@rolldown/binding-android-arm-eabi": ["@rolldown/binding-android-arm-eabi@1.3.2", "", { "os": "android", "cpu": "arm" }, "sha512-kqR2xcygEx3WwDY69LsKeyf7SVmx4yzMtKZRknyaHieVJdRvvnAM97L0Gq6tUFc9T2YXcW/Ghij2+Um6He0LTw=="], - "@rolldown/binding-darwin-arm64": ["@rolldown/binding-darwin-arm64@1.2.16", "", { "os": "darwin", "cpu": "arm64" }, "sha512-qslZrXnKJU4cUpjoAmtAo/KQM9e2IRMlmpig6Zpwj+8KWxW8v+nkAf9216Bsek9lOC1jvg2yCjygCFo2f83msQ=="], + "@rolldown/binding-android-arm64": ["@rolldown/binding-android-arm64@1.3.2", "", { "os": "android", "cpu": "arm64" }, "sha512-gXM4GAAvvIZA7qUuSCQS+Zz91H2fagKa5MNppUdjzysJ8LXMWm9D/gQj4nfOKo6okquDQ5pkjsuo2SUMXNW0Rw=="], - "@rolldown/binding-darwin-x64": ["@rolldown/binding-darwin-x64@1.2.16", "", { "os": "darwin", "cpu": "x64" }, "sha512-FdF+y48ND13eAyM2mQn+85kvAqNlvRWROy2rhgA463X/0Gv4vGtazZtfaF1mRBLscYvtOlh4QnLjOWiFzX69OQ=="], + "@rolldown/binding-darwin-arm64": ["@rolldown/binding-darwin-arm64@1.3.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-OBs5hp3W+LwMEUmDMMMnu08ncG0t6DDgnFU+6TAucKtAfNgerYLZSr2jtREKb/JuPQ1J7bJnWIgKKkxvjuAw1g=="], - "@rolldown/binding-freebsd-x64": ["@rolldown/binding-freebsd-x64@1.2.16", "", { "os": "freebsd", "cpu": "x64" }, "sha512-ddjqFM5e95AgLbUPtKIS7V1KTVlA0RUgCVr5mn+/IEhsdy3pr+Vuj/HZ7nlMN2FyxIwUktOH1LEPIQXO1v9y1Q=="], + "@rolldown/binding-darwin-x64": ["@rolldown/binding-darwin-x64@1.3.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-X0VGYd4v/gdjfa/IP6uHuMhofPoUDYvK/byk3bC0jQ1pKKgt6RZ4B4puMqP0AHkjmIHAsxA471mM6AxZ39IaTA=="], - "@rolldown/binding-linux-arm-gnueabihf": ["@rolldown/binding-linux-arm-gnueabihf@1.2.16", "", { "os": "linux", "cpu": "arm" }, "sha512-tHdKWbFkFBI687iim3LIyIvyL7j66VvQYkDPss5Stn/qyE2tWkR1YD0dXmXPFKKqT/o5ZEJVsaRsWS2meQwGOA=="], + "@rolldown/binding-freebsd-x64": ["@rolldown/binding-freebsd-x64@1.3.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-mr04K4cp9J/fj9fknrX8e4QvI/V48Sp+4v64PoLwhoirIH8b8L8EBrF/0bTjV1It2IL91hoNG13GblnWLglkxA=="], - "@rolldown/binding-linux-arm64-gnu": ["@rolldown/binding-linux-arm64-gnu@1.2.16", "", { "os": "linux", "cpu": "arm64" }, "sha512-FJiLGAblPBMlBEdbOqw6kW6QcXDWAf/oJu7gYs9ZJZwmg+K+/zjFLxPTIY9izJUzxzc24FHvmseyA0IvJSl17w=="], + "@rolldown/binding-linux-arm-gnueabihf": ["@rolldown/binding-linux-arm-gnueabihf@1.3.2", "", { "os": "linux", "cpu": "arm" }, "sha512-VgWy02HU9Tiy6tU8U+kF3Fd4TQwTNdIBvs2MlgViP1ksMtAnQQTIPAj0ZsJzIQXKIOugqQSpqxQgELJ3fkuL5w=="], - "@rolldown/binding-linux-arm64-musl": ["@rolldown/binding-linux-arm64-musl@1.2.16", "", { "os": "linux", "cpu": "arm64" }, "sha512-hrJpblMsrQ58U9veWpbXzkhV5zStunds6HWLprqq1qauvgBr1E6P+24kLj6lSLI9vjRn/RYpjprhkHQPKGWpNg=="], + "@rolldown/binding-linux-arm64-gnu": ["@rolldown/binding-linux-arm64-gnu@1.3.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-0wloJFYqV844gv6boiERbHpErxbxHbmlgnMX5VxP1Ux+DLBqGrUOn0cIpBmCZEcTITes3QUelxya4u8c9ziQvQ=="], - "@rolldown/binding-linux-ppc64-gnu": ["@rolldown/binding-linux-ppc64-gnu@1.2.16", "", { "os": "linux", "cpu": "ppc64" }, "sha512-qJd/dC6j6CwLG9/s/RP2nb1RZ0GIgj7Ioj7x/SYa3RzjVrlzrmH0fhIOpfvqQDeIsdP0loi+kHaMhJzY1PBIaA=="], + "@rolldown/binding-linux-arm64-musl": ["@rolldown/binding-linux-arm64-musl@1.3.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-Kys8wgFQy8H8vua0MNpC0akMBFoNO8455RHk2yycBM0iayMIAtVAL6xmV9TWAkehFgrrlImTL2fZdX5LXfYtAA=="], - "@rolldown/binding-linux-s390x-gnu": ["@rolldown/binding-linux-s390x-gnu@1.2.16", "", { "os": "linux", "cpu": "s390x" }, "sha512-Vx7Xg5uUJuNcujJjI70OICaH0EYj80BtOLZTSN7uOYg8QOLlyKnaG0IW7Fn/J0IpJsaKzmDKMhOQv1JBM9m9vg=="], + "@rolldown/binding-linux-ppc64-gnu": ["@rolldown/binding-linux-ppc64-gnu@1.3.2", "", { "os": "linux", "cpu": "ppc64" }, "sha512-L8eej7+/StRxUHHOPsOVl7Fzx/3tumuGB4hGQZKT73xRI16KZhaSJr0gi3C3WBjNRxeJRKKps2UD4lQukP+oBw=="], - "@rolldown/binding-linux-x64-gnu": ["@rolldown/binding-linux-x64-gnu@1.2.16", "", { "os": "linux", "cpu": "x64" }, "sha512-TNKhgE3uJTsTzatUSSYt0Kgo+Oa2uSlSjz4r1aEIea7HX6ULBym4fAlYUhG1i6pjNf2njfCUAfKwr6C3E9Xg1w=="], + "@rolldown/binding-linux-s390x-gnu": ["@rolldown/binding-linux-s390x-gnu@1.3.2", "", { "os": "linux", "cpu": "s390x" }, "sha512-MV5CEb/nV8neQOj7l6945q1vy62HXtWO8zPDvfySPusoUzdBoLoJ/DfXXwaYThGTXZCniF+5bCf253WTPPK7Yw=="], - "@rolldown/binding-linux-x64-musl": ["@rolldown/binding-linux-x64-musl@1.2.16", "", { "os": "linux", "cpu": "x64" }, "sha512-7chXdpjXZ8qG0+mIxECN3cT9kvhZ3/oZhMX6Pp876P7CDrIy8nJswva6Mq357JR7eYXfuskwZxMeV1SzoZdHrA=="], + "@rolldown/binding-linux-x64-gnu": ["@rolldown/binding-linux-x64-gnu@1.3.2", "", { "os": "linux", "cpu": "x64" }, "sha512-3qssvvVvkwQookZ1/1avlKWc5orAR85vgKdzDd5noZS8nnHiI/ejOAEt0xfNYvtBBF7/DZmP8dANWkRBJVOBCA=="], - "@rolldown/binding-openharmony-arm64": ["@rolldown/binding-openharmony-arm64@1.2.16", "", { "os": "none", "cpu": "arm64" }, "sha512-Kwjt+7uNTJK5/MDkGWGVO2KQPnj8yAV75dMpfwyHZrJSXWHrniOB0aUEWlVYf3H1hOqFLIStLdM5QXq6bnKmOQ=="], + "@rolldown/binding-linux-x64-musl": ["@rolldown/binding-linux-x64-musl@1.3.2", "", { "os": "linux", "cpu": "x64" }, "sha512-rJqoFTm/bCZFKKgaT4NzWn/TuJkFDToZ/rzYFnYVBL28jH1nIfg6snx2mDri30nal9H+wcYfKpoPR9jrMQgQQg=="], - "@rolldown/binding-win32-arm64-msvc": ["@rolldown/binding-win32-arm64-msvc@1.2.16", "", { "os": "win32", "cpu": "arm64" }, "sha512-/LH6WfjDRXXJz/p5xl4TmU+jpcnwcxbKEQBW/GZE0JHfN0lGIyTtsUEGaQ/q/GikkGJ2yLKe6pwm7AnEWO8pdw=="], + "@rolldown/binding-openharmony-arm64": ["@rolldown/binding-openharmony-arm64@1.3.2", "", { "os": "none", "cpu": "arm64" }, "sha512-ozdbCjHfh0N//wJNExjJlSlcDaeIKo8k1ktzkLUyESr2Gu/Qw7nBYxKe3jgtoaxda570vg10WdYosre82263hQ=="], - "@rolldown/binding-win32-x64-msvc": ["@rolldown/binding-win32-x64-msvc@1.2.16", "", { "os": "win32", "cpu": "x64" }, "sha512-1lv1KvX0Z871zfk7vw+dnXMMnHNyDwMzWG8Kv3HxDXMOhzCX4SHc7HK319fInP0i+0p9D8brkfzL7pJOaGl+tw=="], + "@rolldown/binding-wasm32-wasi": ["@rolldown/binding-wasm32-wasi@1.3.2", "", { "dependencies": { "@emnapi/core": "2.0.0-beta.2", "@emnapi/runtime": "2.0.0-beta.2", "@napi-rs/wasm-runtime": "1.2.6" }, "cpu": "none" }, "sha512-p5VA6Vk/2cXZPVWf+dDbuE0dkhrcoAo6pISTJmzUnsSdQqNJdusyR8lZgHku095+r27zrYISNLZnJoqrcePW0A=="], + + "@rolldown/binding-win32-arm64-msvc": ["@rolldown/binding-win32-arm64-msvc@1.3.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-XDb2U14Orf4r76SwzvJ7avePL00w4gHBmi1Ig4B/itYFEUTmYMNDHVU0dcYuBa0LgNBqyREoJOrQKxQlyYJA7A=="], + + "@rolldown/binding-win32-x64-msvc": ["@rolldown/binding-win32-x64-msvc@1.3.2", "", { "os": "win32", "cpu": "x64" }, "sha512-lEsKzKJqIUDZVCBhS4lkZuyQUhV1oRg5UHkI72qlOAqJn7qEXcoVdTridFS7PHNWdZknBl95EAF/4P1Xv0K1eQ=="], "@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.1", "", {}, "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw=="], + "@tybys/wasm-util": ["@tybys/wasm-util@0.10.4", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-W3c4gRigFS0T/Ma4qIYF3GDAc5AQdHb1yL5znJT1Zv1YaD9Kitx656wBjvr19qbiosmZT8lWDM5BEMynUqX65A=="], + "@types/audioworklet": ["@types/audioworklet@0.0.100", "", {}, "sha512-mWt4Z5CWi0CupDnSYWJgx6dw61XUk9JSRGrM9F/YNrpOoY/0XG+sxP+8rAjQq80H4febOe8PrzGmmN/X3w8LsQ=="], "@types/bun": ["@types/bun@1.4.4", "", { "dependencies": { "bun-types": "1.4.4" } }, "sha512-9wkRDXUXK124pEnAutE6n/l18j+i9GC5IAHK8TmX/2nlySETmky0OU6yL5U8pW1AoKh++AN9auDCr647BfurjQ=="], @@ -468,7 +478,7 @@ "media-captions": ["media-captions@0.0.18", "", {}, "sha512-JW18P6FuHdyLSGwC4TQ0kF3WdNj/+wMw2cKOb8BnmY6vSJGtnwJ+vkYj+IjHOV34j3XMc70HDeB/QYKR7E7fuQ=="], - "mediabunny": ["mediabunny@1.65.0", "", { "dependencies": { "@types/dom-mediacapture-transform": "^0.1.11", "@types/dom-webcodecs": "0.1.13" } }, "sha512-TNnDNOmD5Fme4rwMGWuNv485a9iQwd9lgw88PI9zQ0FMnzEUoo6EJpG7ZhdJ2iwZFWo8AzNkP1KPq5IAHaktKw=="], + "mediabunny": ["mediabunny@1.66.0", "", { "dependencies": { "@types/dom-mediacapture-transform": "^0.1.11", "@types/dom-webcodecs": "0.1.13" } }, "sha512-0Zff/qLkY1ZRyjBEt2vQjLeMigmU/dFKwJLpiPyCiskIel2f2R2kqMxaLYbeHN+rmyz4PVwwLSnU9anjUHHeJQ=="], "nanoid": ["nanoid@3.3.20", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-uKdg2G3GNCKQn9byYOpxbGqrT2fGO5KRt5J/8b3pok8rT6qxGWF6hxMyJiEYtAf+FVyYuD9hRaDqX5uPFYJ4ZQ=="], @@ -486,27 +496,21 @@ "react-dom": ["react-dom@19.3.1", "", { "dependencies": { "scheduler": "^0.28.0" }, "peerDependencies": { "react": "^19.3.1" } }, "sha512-Y0bARz53lhEC1NMCASs0/j+faB/zqt3R8hpvg1e8+61ZVJ4UL0UdC4cBbXfZMcIuhrfgeILTLe+ZeBCavQPtKQ=="], - "rolldown": ["rolldown@1.2.16", "", { "dependencies": { "@oxc-project/types": "=0.156.0", "@rolldown/pluginutils": "^1.0.0" }, "optionalDependencies": { "@rolldown/binding-android-arm-eabi": "1.2.16", "@rolldown/binding-android-arm64": "1.2.16", "@rolldown/binding-darwin-arm64": "1.2.16", "@rolldown/binding-darwin-x64": "1.2.16", "@rolldown/binding-freebsd-x64": "1.2.16", "@rolldown/binding-linux-arm-gnueabihf": "1.2.16", "@rolldown/binding-linux-arm64-gnu": "1.2.16", "@rolldown/binding-linux-arm64-musl": "1.2.16", "@rolldown/binding-linux-ppc64-gnu": "1.2.16", "@rolldown/binding-linux-s390x-gnu": "1.2.16", "@rolldown/binding-linux-x64-gnu": "1.2.16", "@rolldown/binding-linux-x64-musl": "1.2.16", "@rolldown/binding-openharmony-arm64": "1.2.16", "@rolldown/binding-win32-arm64-msvc": "1.2.16", "@rolldown/binding-win32-x64-msvc": "1.2.16" }, "bin": { "rolldown": "./bin/cli.mjs" } }, "sha512-bWvlMpFKiTfDKfnK7FC2MPgPeWCf/Kpwsq49ApdW+FQaBZb6O6dZ4MAPbPUjp7hYQrw/RobqCzn64BRrQecGHw=="], + "rolldown": ["rolldown@1.3.2", "", { "dependencies": { "@oxc-project/types": "=0.158.0", "@rolldown/pluginutils": "^1.0.0" }, "optionalDependencies": { "@rolldown/binding-android-arm-eabi": "1.3.2", "@rolldown/binding-android-arm64": "1.3.2", "@rolldown/binding-darwin-arm64": "1.3.2", "@rolldown/binding-darwin-x64": "1.3.2", "@rolldown/binding-freebsd-x64": "1.3.2", "@rolldown/binding-linux-arm-gnueabihf": "1.3.2", "@rolldown/binding-linux-arm64-gnu": "1.3.2", "@rolldown/binding-linux-arm64-musl": "1.3.2", "@rolldown/binding-linux-ppc64-gnu": "1.3.2", "@rolldown/binding-linux-s390x-gnu": "1.3.2", "@rolldown/binding-linux-x64-gnu": "1.3.2", "@rolldown/binding-linux-x64-musl": "1.3.2", "@rolldown/binding-openharmony-arm64": "1.3.2", "@rolldown/binding-wasm32-wasi": "1.3.2", "@rolldown/binding-win32-arm64-msvc": "1.3.2", "@rolldown/binding-win32-x64-msvc": "1.3.2" }, "bin": { "rolldown": "./bin/cli.mjs" } }, "sha512-EFHqbVkXiYZA6akmYm2bvJhNbEGdUwAResRhYwl/BO8QhB5KxsG+t3RVHJSIOy5jBEb0XCACvrIGnnl6Z8sMGA=="], "scheduler": ["scheduler@0.28.0", "", {}, "sha512-juorfCmIkIw8tT+p5BXSm6PJjQF/ycEYmKyzURCIt/RaZIhL+PulbQ9Yu2z1HdOJDdqDTlxA1+xKBmHXJsczAw=="], - "seroval": ["seroval@1.6.12", "", {}, "sha512-CqbIVfk/7GL3ITwZI55lcPbpQbjHZ2DD5cUj4iH7E9YsCfHNJV1mx7yNp86Z84w5IpmkZZS/2s5vPOWmVWSdQg=="], - - "seroval-plugins": ["seroval-plugins@1.6.12", "", { "peerDependencies": { "seroval": "^1.0" } }, "sha512-+reiwp/lYxiyctSrdvX7OQ1YLrcbWYgBiZrhSFL+V43b0/DGRLNVSDyZINbQe+tWplPOI2fw2dPrdv6hcc09kQ=="], - - "solid-js": ["solid-js@1.9.18", "", { "dependencies": { "csstype": "^3.1.0", "seroval": "~1.6.11", "seroval-plugins": "~1.6.8" } }, "sha512-CHGO5YFk6Y9m/1YSxVtKnXfrW7JD3Tmof8HmR4z6TmCPsS8efo8LnzIR8CQh3cUvffqYm6DWyBFfk8dQw1CNQQ=="], - - "sorted-btree": ["sorted-btree@2.1.0", "", {}, "sha512-AtYXy3lL+5jrATpbymC2bM8anN/3maLkmVCd94MzypnKjokfCid/zeS3rvXedv7W6ffSfqKIGdz3UaJPWRBZ0g=="], - "source-map-js": ["source-map-js@1.2.2", "", {}, "sha512-KGj/8Y43x35aZVDtt+J4mK1hoLGHULMYfSkODJNQjNDC3oW1PqPoxMwo0pLUsWM/UEGzON/NxeHywEfNXNP3Vw=="], "tinyglobby": ["tinyglobby@0.2.17", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.4" } }, "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g=="], + "tslib": ["tslib@2.9.1", "", {}, "sha512-a4Ux9VKuIMHsOS7ENbEq6hK2ZGYIT27Rtl0E4eD9KqwxhKiQeMZE/9xb3IdYwWaSOyIBQLExhQgXDTYoiCxnWA=="], + "typescript": ["typescript@7.0.2", "", { "optionalDependencies": { "@typescript/typescript-aix-ppc64": "7.0.2", "@typescript/typescript-darwin-arm64": "7.0.2", "@typescript/typescript-darwin-x64": "7.0.2", "@typescript/typescript-freebsd-arm64": "7.0.2", "@typescript/typescript-freebsd-x64": "7.0.2", "@typescript/typescript-linux-arm": "7.0.2", "@typescript/typescript-linux-arm64": "7.0.2", "@typescript/typescript-linux-loong64": "7.0.2", "@typescript/typescript-linux-mips64el": "7.0.2", "@typescript/typescript-linux-ppc64": "7.0.2", "@typescript/typescript-linux-riscv64": "7.0.2", "@typescript/typescript-linux-s390x": "7.0.2", "@typescript/typescript-linux-x64": "7.0.2", "@typescript/typescript-netbsd-arm64": "7.0.2", "@typescript/typescript-netbsd-x64": "7.0.2", "@typescript/typescript-openbsd-arm64": "7.0.2", "@typescript/typescript-openbsd-x64": "7.0.2", "@typescript/typescript-sunos-x64": "7.0.2", "@typescript/typescript-win32-arm64": "7.0.2", "@typescript/typescript-win32-x64": "7.0.2" }, "bin": { "tsc": "bin/tsc" } }, "sha512-8FYau96o3NKOhbjKi/qNvG/W5jhzxkbdm5sj9AbZ/5T5sWqn3hJgLfGx27sRKZWTvyzCP8dLRBTf5tBTSRVUNA=="], "undici-types": ["undici-types@8.9.0", "", {}, "sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg=="], - "vite": ["vite@8.3.5", "", { "dependencies": { "lightningcss": "^1.33.0", "picomatch": "^4.0.7", "postcss": "^8.5.30", "rolldown": "~1.2.14", "tinyglobby": "^0.2.17" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "@vitejs/devtools": "^0.7.1 || ^0.8.0", "esbuild": "^0.27.0 || ^0.28.0", "jiti": ">=1.21.0", "less": "^4.0.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "@vitejs/devtools", "esbuild", "jiti", "less", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-z1YpjieJ9g0ebTmQpLBv/oq9E3F9EIlOe+7LahW8SrE3LTiG3udBRUXQOlYXP9b+IC2q2phHeVxj9xGlw34OEQ=="], + "vite": ["vite@8.3.8", "", { "dependencies": { "lightningcss": "^1.33.0", "picomatch": "^4.0.7", "postcss": "^8.5.32", "rolldown": "~1.2.18", "tinyglobby": "^0.2.17" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "@vitejs/devtools": "^0.7.1 || ^0.8.0", "esbuild": "^0.27.0 || ^0.28.0", "jiti": ">=1.21.0", "less": "^4.0.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "@vitejs/devtools", "esbuild", "jiti", "less", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-LzOn3h9rG/0vhLdXrV4yJ4QFA9eEoqCl+Yx+kGJd7aB9w6nfNgVHKSYwLPZUHrz4ZGa+t+kXjV9itvcHDLQouA=="], "whatwg-mimetype": ["whatwg-mimetype@3.0.0", "", {}, "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q=="], @@ -515,5 +519,41 @@ "zod": ["zod@4.6.7", "", {}, "sha512-g8W2D2kU6a8untc053fX1uVBKzM7yqAxW/3zwk83+6RyF2+SKOuV+c0wBDhUwzV1PaGapmZH+rmcUzPf+3CGwg=="], "bun-types/undici-types": ["undici-types@8.12.3", "", {}, "sha512-EXE4ydL3S76dFb27UFjNVZHTyv/TLdATj/KUe29ptdcg6qXL48J2tZ3126E5kICj5jn781OR+XlVH1N6Mz8jbA=="], + + "vite/rolldown": ["rolldown@1.2.19", "", { "dependencies": { "@oxc-project/types": "=0.156.0", "@rolldown/pluginutils": "^1.0.0" }, "optionalDependencies": { "@rolldown/binding-android-arm-eabi": "1.2.19", "@rolldown/binding-android-arm64": "1.2.19", "@rolldown/binding-darwin-arm64": "1.2.19", "@rolldown/binding-darwin-x64": "1.2.19", "@rolldown/binding-freebsd-x64": "1.2.19", "@rolldown/binding-linux-arm-gnueabihf": "1.2.19", "@rolldown/binding-linux-arm64-gnu": "1.2.19", "@rolldown/binding-linux-arm64-musl": "1.2.19", "@rolldown/binding-linux-ppc64-gnu": "1.2.19", "@rolldown/binding-linux-s390x-gnu": "1.2.19", "@rolldown/binding-linux-x64-gnu": "1.2.19", "@rolldown/binding-linux-x64-musl": "1.2.19", "@rolldown/binding-openharmony-arm64": "1.2.19", "@rolldown/binding-wasm32-wasi": "1.2.19", "@rolldown/binding-win32-arm64-msvc": "1.2.19", "@rolldown/binding-win32-x64-msvc": "1.2.19" }, "bin": { "rolldown": "./bin/cli.mjs" } }, "sha512-QIiV1J9d0pzN4jeeTH4sjPy0AZ6cAy2cG0ExeoE1+U8Rvj+hR3gYkokx0YbeUNGlZqiQJJ2utcETe0oKXwzsuA=="], + + "vite/rolldown/@oxc-project/types": ["@oxc-project/types@0.156.0", "", {}, "sha512-1Duyg48TdJNdyhEB8Xn1L36bT9Pv6GUtlKjHxOys8xkaF/rQq3XJE+bAurSK/AgIz5mGFsb77cn9Pb20+WCScw=="], + + "vite/rolldown/@rolldown/binding-android-arm-eabi": ["@rolldown/binding-android-arm-eabi@1.2.19", "", { "os": "android", "cpu": "arm" }, "sha512-e+Ebe0WT+9tbXmNKPIiC8YrWAHYwug3m6i4p3rZGGulfZri1jtI4HslT+OZnFf/OIHowWF71DTlHwXBP2SiA7A=="], + + "vite/rolldown/@rolldown/binding-android-arm64": ["@rolldown/binding-android-arm64@1.2.19", "", { "os": "android", "cpu": "arm64" }, "sha512-hOombrTJ+szt2ciEzS7oCA78lMPBgF5UMQWCJIyNfnrI7GLl8HYoFqCnpL2gcPOaXMqryGCU5ExdQKyDDcC+yA=="], + + "vite/rolldown/@rolldown/binding-darwin-arm64": ["@rolldown/binding-darwin-arm64@1.2.19", "", { "os": "darwin", "cpu": "arm64" }, "sha512-XoMA2pwCKGTQzUjPgtRwkedH4WmXhdIPKT6l6oOxd1PUbNodGI6DcBekgN7EC//+x3pfBYX/qL1gNmZAqivw5g=="], + + "vite/rolldown/@rolldown/binding-darwin-x64": ["@rolldown/binding-darwin-x64@1.2.19", "", { "os": "darwin", "cpu": "x64" }, "sha512-zo8EsSSwMZCY/e+fRnGaX02YGgvJD0yvhNi/9hpGPA2MJ9ZF8dPCw75UGfpI6OpQ/myR/dIYmogRvqiZD0TrXg=="], + + "vite/rolldown/@rolldown/binding-freebsd-x64": ["@rolldown/binding-freebsd-x64@1.2.19", "", { "os": "freebsd", "cpu": "x64" }, "sha512-O8ISAOfI1nj7AuBPd30FSF47z7f7lzlk5poQVGgiikvQuGEBFYvW8ki+UEnT+YJPnNGjQzn304klt4O9FUE7mA=="], + + "vite/rolldown/@rolldown/binding-linux-arm-gnueabihf": ["@rolldown/binding-linux-arm-gnueabihf@1.2.19", "", { "os": "linux", "cpu": "arm" }, "sha512-/lYCba5NO0yq4S0jGMH8QTBtkvQxoXjoQWzF5BcWp9MjB9jxVRD1GQDNofkVjcOj30DWyhLIN/4Oe60JKzaONw=="], + + "vite/rolldown/@rolldown/binding-linux-arm64-gnu": ["@rolldown/binding-linux-arm64-gnu@1.2.19", "", { "os": "linux", "cpu": "arm64" }, "sha512-pm/apFMBnSbFb3O6nG5pHO1iqHhZrjGDFEjSm+ot9J17XXPvH9L90y5h+jgfHCE+Qdlsvy8qKEcU4VKxgjD+vA=="], + + "vite/rolldown/@rolldown/binding-linux-arm64-musl": ["@rolldown/binding-linux-arm64-musl@1.2.19", "", { "os": "linux", "cpu": "arm64" }, "sha512-K1SmQp3FFichn8oqrNIwvFoZ5wcvjC7goBzpaMNvLf9FZc+QB/QvLmnpJZgAAGHiD980tP8FZZnXk2K94rvlxg=="], + + "vite/rolldown/@rolldown/binding-linux-ppc64-gnu": ["@rolldown/binding-linux-ppc64-gnu@1.2.19", "", { "os": "linux", "cpu": "ppc64" }, "sha512-I0xwD57jP/3A7+5UPZin2w8Y7XHEmEM5zqpYZOcQ45MlNW6tUJUziymV3yRr7rL4vwyfEcRsRksC4a7Kc08p5Q=="], + + "vite/rolldown/@rolldown/binding-linux-s390x-gnu": ["@rolldown/binding-linux-s390x-gnu@1.2.19", "", { "os": "linux", "cpu": "s390x" }, "sha512-BrtEHT24SNXj9HiXqy+s/kXiSiQGt6EKCPUlRirAoIioVxKGnbXBUEkbZASAei7iZJB0/Ynm+0JP00Ipx7AnSw=="], + + "vite/rolldown/@rolldown/binding-linux-x64-gnu": ["@rolldown/binding-linux-x64-gnu@1.2.19", "", { "os": "linux", "cpu": "x64" }, "sha512-rm75/9DkHKeU2WnA8w4X94WGYgLlDCFCfkQC+4bguVJmC/jvDRv2B+2wLOYhyE0fVuv7//Ckk39OoOufyCu76Q=="], + + "vite/rolldown/@rolldown/binding-linux-x64-musl": ["@rolldown/binding-linux-x64-musl@1.2.19", "", { "os": "linux", "cpu": "x64" }, "sha512-irh/4+iYFM4GAzpluDErgjz89bj6NDtqqMAG/6O1LG38Ed3NpyebzCpcVNkFW8uhy+/3/BocUvnXDR33CXWe9A=="], + + "vite/rolldown/@rolldown/binding-openharmony-arm64": ["@rolldown/binding-openharmony-arm64@1.2.19", "", { "os": "none", "cpu": "arm64" }, "sha512-+KWTWNoPt+CfSq94CiceWu3yPE+QzkaG+phPyz9G60tmZLwfQkcA4AeksafzvJAw4pvg1mcd5a1TkUqVv0s4JA=="], + + "vite/rolldown/@rolldown/binding-wasm32-wasi": ["@rolldown/binding-wasm32-wasi@1.2.19", "", { "dependencies": { "@emnapi/core": "2.0.0-beta.2", "@emnapi/runtime": "2.0.0-beta.2", "@napi-rs/wasm-runtime": "1.2.6" }, "cpu": "none" }, "sha512-7EH+skOsl5qpWnK0vzamgJFhOv1cwxQpsxm8tI883K9fur5c27p8q87fzEO6BbBPabA2/+s/zR63/pLc137iOg=="], + + "vite/rolldown/@rolldown/binding-win32-arm64-msvc": ["@rolldown/binding-win32-arm64-msvc@1.2.19", "", { "os": "win32", "cpu": "arm64" }, "sha512-3Q1Yg1Q7tEvBWoZf5rFvG/GKZQPgwfru+p4wBajDfJFBs0SHCpL++dfTjW9gyAKd1T7ZpIYvdaUax7Pa/IhFVQ=="], + + "vite/rolldown/@rolldown/binding-win32-x64-msvc": ["@rolldown/binding-win32-x64-msvc@1.2.19", "", { "os": "win32", "cpu": "x64" }, "sha512-y/sqRRc6d7hECzOFc5n3LSeqctmIp9mMjY1Kq4s14uLPd/LZ4z7i1zrW6fMtp2mPeuQIC4e6ULMcwQzMomqQag=="], } } diff --git a/moq b/moq index 644d4899..51611bd8 160000 --- a/moq +++ b/moq @@ -1 +1 @@ -Subproject commit 644d48996e908896ad6f2e9c2bd12439a1d37f7f +Subproject commit 51611bd83858fe78964a444b00d52cf71ea3cb5d diff --git a/quest/m0/README.md b/quest/m0/README.md index 6cab862c..4bde9d6e 100644 --- a/quest/m0/README.md +++ b/quest/m0/README.md @@ -56,7 +56,7 @@ Decided 2026-10-22 with the maintainer (/quest-plan): WASM support on 2026-10-31, its browser-backend quests are deferred with no other consumer, and nothing plans a browser WebTransport session for moq-net. -- **Guests:** guests and phone cameras join a moq-room prefix the studio +- **Guests:** guests and phone cameras join a room prefix the studio owns, through a web join link or QR code. - **Naming:** quests name no streaming platforms; ingest requirements are written as generic constraints. diff --git a/quest/m0/cef-quiet.md b/quest/m0/cef-quiet.md new file mode 100644 index 00000000..b939cf37 --- /dev/null +++ b/quest/m0/cef-quiet.md @@ -0,0 +1,22 @@ +# [S] The browser helper reaches no Google service again + +## Goal + +`the_helper_requests_only_its_pages` (`rs/moq-studio/tests/browser.rs`), run +by `just render-sw`, passes again: a browser source's helper opens no +connection a page did not ask for. + +## Plan + +Found by [moq-dev/studio#163](https://github.com/moq-dev/studio/pull/163) +on 2026-11-14. On `main` (`5a74c18`), with the CEF runtime at +`cef-156.0.15` from the dev shell's `CEF_PATH`, the test fails every run: +the helper sends `CONNECT clients2.google.com:443` twice. The switches in +`rs/moq-scene/src/browser/host.rs` already point the component updater at +`data:` and disable the features that phoned home when the test was written, +so something else in this CEF release reaches `clients2.google.com`. + +Find the feature or service behind the request, such as with +`--log-net-log` or by bisecting the `--disable-features` list, and turn it +off with a switch the way `host.rs` turns off the others. Never loosen the +test's assertion. diff --git a/quest/m0/packaging/macos.md b/quest/m0/packaging/macos.md index 4e339b41..907e4000 100644 --- a/quest/m0/packaging/macos.md +++ b/quest/m0/packaging/macos.md @@ -45,12 +45,7 @@ The certificate (`6WWG279G9M`, G2) expires 2027-12-11, and the profile with it; see [renewal](/quest/m0/signing-renew.md). A Mac camera renders only once AVFoundation asks for NV12 instead of `2vuy`, -which [moq-dev/moq#8251](https://github.com/moq-dev/moq/pull/8251) did on moq's -`main` (`2be959ba9`) after the studio's pin; [pin-main](/quest/m0/pin-main.md) -brings it here. Check by hand on a Mac that a camera shows its picture in +which [moq-dev/moq#8251](https://github.com/moq-dev/moq/pull/8251) did; the +studio's pin includes it. Check by hand on a Mac that a camera shows its picture in program, since the launch check only lists devices and hosted runners have no camera. - -## Required - -- [The studio is caught up to moq's main](/quest/m0/pin-main.md) - brings moq-dev/moq#8251's NV12 camera fix diff --git a/quest/m0/pin-aac-encode.md b/quest/m0/pin-aac-encode.md index 8afca7b5..e433972c 100644 --- a/quest/m0/pin-aac-encode.md +++ b/quest/m0/pin-aac-encode.md @@ -18,7 +18,3 @@ fixing whatever the new API breaks here. merged on moq's `main`, deleting their files, and moq-audio's AAC encoders are there. A quest file that moved, or went away without its work landing, does not count. - -## Required - -- [The studio is caught up to moq's main](/quest/m0/pin-main.md) - moq's breaking changes since moq-dev/moq#8272, so this pin takes only its own diff --git a/quest/m0/pin-audio-filters.md b/quest/m0/pin-audio-filters.md index f21a6d92..e070dc46 100644 --- a/quest/m0/pin-audio-filters.md +++ b/quest/m0/pin-audio-filters.md @@ -16,7 +16,3 @@ fixing whatever the new API breaks here. merged on moq's `main`, deleting its file, and moq-audio's filter chain is there. A quest file that moved, or went away without its work landing, does not count. - -## Required - -- [The studio is caught up to moq's main](/quest/m0/pin-main.md) - moq's breaking changes since moq-dev/moq#8272, so this pin takes only its own diff --git a/quest/m0/pin-audio-tap.md b/quest/m0/pin-audio-tap.md index f48da93d..9bd475cf 100644 --- a/quest/m0/pin-audio-tap.md +++ b/quest/m0/pin-audio-tap.md @@ -17,7 +17,3 @@ fixing whatever the new API breaks here. merged on moq's `main`, deleting its file, and `moq_audio::bus` there offers a tap of a source's samples with bus positions. A quest file that moved, or went away without its work landing, does not count. - -## Required - -- [The studio is caught up to moq's main](/quest/m0/pin-main.md) - moq's breaking changes since moq-dev/moq#8272, so this pin takes only its own diff --git a/quest/m0/pin-bus-stretch.md b/quest/m0/pin-bus-stretch.md deleted file mode 100644 index 2bdc3ec5..00000000 --- a/quest/m0/pin-bus-stretch.md +++ /dev/null @@ -1,38 +0,0 @@ -# [S] A broadcast source's sound glides onto a moved delay - -## Goal - -The `moq` submodule includes moq-audio's stretching `Positioned` channel, from -[The bus stretches positioned audio onto its clock](https://github.com/moq-dev/moq/blob/main/quest/m1/audio-jitter-target/bus-stretch.md), -and a broadcast source's playout (`rs/moq-scene/src/playout.rs`) writes -through it with a stretch bound, so its sound glides onto a moved playout -delay as `moq play`'s does. A step of the jitter target no longer writes -silence into the program's sound or skips it. `README.md`'s broadcast-source -paragraph says how a delay change sounds. - -## Plan - -Decided 2026-11-12 (maintainer, /quest-plan), after -[moq-dev/studio#144](https://github.com/moq-dev/studio/pull/144) kept a -target step's gap or skip (its follow-up): moq-audio's bus stretches, since -audio mixing is moq's (`AGENTS.md`'s Upstream), and this quest pins it. ✅ m0, -beside the other pins (rejected: m2). - -Advance with `just upgrade-moq` in its own PR, fixing whatever the new API -breaks here. Playout's `Writer` (`rs/moq-scene/src/playout.rs`) changes with -it: today it cuts the part of a frame overlapping the last one and lets a -later position leave a gap, so a step down would still skip audio. With a -bound it writes each frame after the last and hands the channel the position -it is due at, for the channel to converge on. Take the bound `moq play` defaults to (2 s, its `--stretch`) -unless a measurement here argues for another, and say which in the PR. - -## Waiting - -- moq-dev/moq: the upstream quest above lands. Check: that quest's PR has - merged on moq's `main`, deleting its file, and `moq_audio::bus::Positioned` - there takes a stretch bound. A quest file that moved, or went away without - its work landing, does not count. - -## Required - -- [The studio is caught up to moq's main](/quest/m0/pin-main.md) - moq's breaking changes since moq-dev/moq#8272, so this pin takes only its own diff --git a/quest/m0/pin-capture-list.md b/quest/m0/pin-capture-list.md index 60ca4005..a5558360 100644 --- a/quest/m0/pin-capture-list.md +++ b/quest/m0/pin-capture-list.md @@ -17,7 +17,3 @@ the new API breaks in `rs/moq-studio/src/devices.rs`. ## Waiting - moq-dev/moq: [the capture listing quest](https://github.com/moq-dev/moq/blob/main/quest/m3/capture-list.md) lands on moq's `main`. Check that quest's PR has merged. - -## Required - -- [The studio is caught up to moq's main](/quest/m0/pin-main.md) - moq's breaking changes since moq-dev/moq#8272, so this pin takes only its own diff --git a/quest/m0/pin-egress-dial.md b/quest/m0/pin-egress-dial.md index c125eb7f..6db17162 100644 --- a/quest/m0/pin-egress-dial.md +++ b/quest/m0/pin-egress-dial.md @@ -4,7 +4,7 @@ The `moq` submodule includes the two moq changes destinations dial through: moq-rtmp's `rtmps://` dial keeps the URL-derived `tcUrl`, from -[RTMPS keeps `tcUrl`](https://github.com/moq-dev/moq/blob/main/quest/m3/rtmp-rtmps-tcurl.md), +[RTMPS keeps `tcUrl`](https://github.com/moq-dev/moq/blob/main/quest/m2/rtmp-rtmps-tcurl.md), and a dial takes a policy its caller supplies, so a host can refuse private and loopback addresses, from [a caller-supplied dial policy](https://github.com/moq-dev/moq/blob/main/quest/m3/webrtc-dial-policy.md). @@ -26,7 +26,3 @@ fixing whatever the new API breaks here. moq-rtmp's TLS dial sends the URL-derived `tcUrl`, and a dial takes the caller's policy. A quest file that moved, or went away without its work landing, does not count. - -## Required - -- [The studio is caught up to moq's main](/quest/m0/pin-main.md) - moq's breaking changes since moq-dev/moq#8272, so this pin takes only its own diff --git a/quest/m0/pin-main.md b/quest/m0/pin-main.md deleted file mode 100644 index ad16fae2..00000000 --- a/quest/m0/pin-main.md +++ /dev/null @@ -1,39 +0,0 @@ -# [L] The studio is caught up to moq's main - -## Goal - -The `moq` submodule is at moq's `main` as of the day this quest starts, and -`just ci` passes on it. Every breaking change between `644d48996` -([moq-dev/moq#8272](https://github.com/moq-dev/moq/pull/8272), where the -studio's pin sits) and that commit is fixed in one -PR, so each later wait-gated pin moves past only its own upstream change. - -## Plan - -Decided 2026-11-09 (maintainer, /quest-plan on the follow-up from -[moq-dev/studio#123](https://github.com/moq-dev/studio/pull/123)): - -- ✅ Pin `main` on the day it starts, with `just upgrade-moq` and no commit - argument (rejected: a commit fixed at planning time; dropping the quest - and letting the first small pin absorb the catch-up). A commit chosen now - goes stale before anyone starts the quest. -- ✅ Every pin whose upstream work lands after pin-sync requires this quest - (rejected: leaving them on pin-sync). Each then stays XS. - -On 2026-11-09, moq's `main` (`103052ed0`) was 117 first-parent commits past -`644d48996`, 27 of them breaking. The ones that reach studio code most: - -- [moq-dev/moq#8220](https://github.com/moq-dev/moq/pull/8220): kio's - `Instant` has no `+` or `-` with a `Duration`. `rs/moq-scene/src/playout.rs` - and `source.rs` use them throughout. -- [moq-dev/moq#8270](https://github.com/moq-dev/moq/pull/8270): moq-audio - codecs return zero or more outputs and flush. -- [moq-dev/moq#8372](https://github.com/moq-dev/moq/pull/8372): moq-video - codecs split submission from receive. -- Renames and surface cuts in moq-net, moq-tokio, moq-mux, and moq-video - (#8247, #8265, #8266, #8298, #8305, #8369, #8370, #8371, #8375, #8392). - `just ci` finds the rest. - -Each change's PR has an Impact section with the migration. If an upstream -change a pin waits for is already on `main` when this starts, this PR also -does that pin's work and deletes the pin quest. diff --git a/quest/m0/pin-portal-token.md b/quest/m0/pin-portal-token.md deleted file mode 100644 index 9df91ac3..00000000 --- a/quest/m0/pin-portal-token.md +++ /dev/null @@ -1,21 +0,0 @@ -# [XS] The persistable portal restore token is pinned - -## Goal - -The `moq` submodule includes moq-video's persistable xdg-desktop-portal -restore token, from [Linux capture parity](https://github.com/moq-dev/moq/blob/main/quest/m3/capture-linux.md). - -## Plan - -Once the wait clears, advance it with `just upgrade-moq` in its own PR, -fixing whatever the new API breaks here. - -## Waiting - -- moq-dev/moq: Linux capture parity lands the persistable token. Check: - moq-video on moq's `main` exposes the persistable restore token (the quest - no longer lists it because it landed, not because it moved). - -## Required - -- [The studio is caught up to moq's main](/quest/m0/pin-main.md) - moq's breaking changes since moq-dev/moq#8272, so this pin takes only its own diff --git a/quest/m0/wayland-sources.md b/quest/m0/wayland-sources.md index bb51fa69..37603ed2 100644 --- a/quest/m0/wayland-sources.md +++ b/quest/m0/wayland-sources.md @@ -11,9 +11,10 @@ sources capture only X11 and XWayland. Decided 2026-10-26 (maintainer): -- **Token:** the portal restore token is persisted, which - [Linux capture parity](https://github.com/moq-dev/moq/blob/main/quest/m3/capture-linux.md) makes possible in - moq-video. This quest consumes it. +- **Token:** the portal restore token is persisted, through moq-video's + `capture::portal::Selection::restore_token` and `with_restore_token` + ([moq-dev/moq#8562](https://github.com/moq-dev/moq/pull/8562)), which the + studio's pin includes. - **Storage:** the token lives in per-machine state (the XDG state directory, keyed by scene collection and source), never in the scene file, so the scene file stays portable and diffable. On another machine, or when the portal @@ -26,10 +27,6 @@ Add portal-picked display and window sources beside the id-selected the Sources and Devices panels and guided setup, and update `README.md`, which says display and window sources are X11-only. -## Required - -- [The persistable portal restore token is pinned](/quest/m0/pin-portal-token.md) - the token this quest stores - ## Related - [Adding a source by picking a picture](/quest/m0/ux/add.md) - the Add page whose Apps and Screens sections open this picker diff --git a/quest/m1/pin-capture-exclude.md b/quest/m1/pin-capture-exclude.md index 1ca63aa3..eefc8b7a 100644 --- a/quest/m1/pin-capture-exclude.md +++ b/quest/m1/pin-capture-exclude.md @@ -15,7 +15,3 @@ Planned 2026-11-09 (maintainer, /quest-plan) for ## Waiting - moq-dev/moq: [the capture exclusion quest](https://github.com/moq-dev/moq/blob/main/quest/m4/capture-exclude.md) lands on moq's `main`. Check that quest's PR has merged. - -## Required - -- [The studio is caught up to moq's main](/quest/m0/pin-main.md) - moq's breaking changes since moq-dev/moq#8272, so this pin takes only its own diff --git a/quest/m1/pin-capture-foreground.md b/quest/m1/pin-capture-foreground.md index fa179f56..a7c470bb 100644 --- a/quest/m1/pin-capture-foreground.md +++ b/quest/m1/pin-capture-foreground.md @@ -14,7 +14,3 @@ Planned 2026-11-09 (maintainer, /quest-plan) for ## Waiting - moq-dev/moq: [the foreground app quest](https://github.com/moq-dev/moq/blob/main/quest/m4/capture-foreground.md) lands on moq's `main`. Check that quest's PR has merged. - -## Required - -- [The studio is caught up to moq's main](/quest/m0/pin-main.md) - moq's breaking changes since moq-dev/moq#8272, so this pin takes only its own diff --git a/quest/m2/compose/hang-layers.md b/quest/m2/compose/hang-layers.md index f3b2b43b..07d431dd 100644 --- a/quest/m2/compose/hang-layers.md +++ b/quest/m2/compose/hang-layers.md @@ -41,4 +41,3 @@ layer layout track and are replanned in moq's tree. - [The studio publishes a composition](/quest/m2/compose/layout.md) - the prototype hang's spec starts from - [Viewer controls](/quest/m2/compose/controls.md) - toggles and priorities the spec carries -- [The studio is caught up to moq's main](/quest/m0/pin-main.md) - moq's breaking changes since moq-dev/moq#8272, so this pin takes only its own diff --git a/quest/m2/pin-browser-audio.md b/quest/m2/pin-browser-audio.md index 692e0527..8b0c34bb 100644 --- a/quest/m2/pin-browser-audio.md +++ b/quest/m2/pin-browser-audio.md @@ -20,7 +20,3 @@ Moved to m2 with the [web studio](/quest/m2/web.md) on 2026-11-09 merged on moq's `main`, deleting its file, and moq-audio's browser backends are there. A quest file that moved, or went away without its work landing, does not count. - -## Required - -- [The studio is caught up to moq's main](/quest/m0/pin-main.md) - moq's breaking changes since moq-dev/moq#8272, so this pin takes only its own diff --git a/quest/m2/pin-browser-video.md b/quest/m2/pin-browser-video.md index aa8607c9..399c207d 100644 --- a/quest/m2/pin-browser-video.md +++ b/quest/m2/pin-browser-video.md @@ -21,7 +21,3 @@ Moved to m2 with the [web studio](/quest/m2/web.md) on 2026-11-09 merged on moq's `main`, deleting its file, and moq-video's browser backends are there. A quest file that moved, or went away without its work landing, does not count. - -## Required - -- [The studio is caught up to moq's main](/quest/m0/pin-main.md) - moq's breaking changes since moq-dev/moq#8272, so this pin takes only its own diff --git a/rs/moq-scene/Cargo.toml b/rs/moq-scene/Cargo.toml index 999c472c..0eea3f54 100644 --- a/rs/moq-scene/Cargo.toml +++ b/rs/moq-scene/Cargo.toml @@ -78,6 +78,8 @@ tracing = { workspace = true } # it builds wherever the studio does with no runtime library to download. tract-onnx = { version = "0.23.10", default-features = false } url = { workspace = true } +# The compositor's device; moq-video's release, so its decoded textures share it. +wgpu = { workspace = true } vello = "0.11" # Decompresses an overlay's WOFF and WOFF2 fonts to check them. Already in the # graph through Blitz's `woff` feature. diff --git a/rs/moq-scene/src/browser/import.rs b/rs/moq-scene/src/browser/import.rs index 0e0f4dcc..bc211fbc 100644 --- a/rs/moq-scene/src/browser/import.rs +++ b/rs/moq-scene/src/browser/import.rs @@ -3,7 +3,6 @@ use std::os::fd::OwnedFd; use super::protocol::Texture; -use crate::wgpu; /// Copy the DMA-BUF `texture` describes, whose plane descriptors are `fds`, /// into a texture of the studio's own on `device`, waiting until the copy is diff --git a/rs/moq-scene/src/browser/layers.rs b/rs/moq-scene/src/browser/layers.rs index 1203cf77..6ffbfaf2 100644 --- a/rs/moq-scene/src/browser/layers.rs +++ b/rs/moq-scene/src/browser/layers.rs @@ -2,8 +2,7 @@ //! apart from it, such as a `