diff --git a/Cargo.lock b/Cargo.lock index 952e64e..a54e6cb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -88,9 +88,9 @@ dependencies = [ [[package]] name = "aligned" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "377e4c0ba83e4431b10df45c1d4666f178ea9c552cac93e60c3a88bf32785923" +checksum = "ee4508988c62edf04abd8d92897fca0c2995d907ce1dfeaf369dac3716a40685" dependencies = [ "as-slice", ] @@ -219,7 +219,7 @@ dependencies = [ "thiserror 2.0.17", "tokio", "tokio-test", - "toml 0.9.8", + "toml 0.9.10+spec-1.1.0", "tracing", "url", "uuid", @@ -248,7 +248,7 @@ checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -374,9 +374,9 @@ dependencies = [ [[package]] name = "async-compression" -version = "0.4.33" +version = "0.4.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93c1f86859c1af3d514fa19e8323147ff10ea98684e6c7b307912509f50e67b2" +checksum = "98ec5f6c2f8bc326c994cb9e241cc257ddaba9afa8555a43cffbb5dd86efaa37" dependencies = [ "compression-codecs", "compression-core", @@ -438,16 +438,16 @@ dependencies = [ "futures-lite 2.6.1", "parking", "polling", - "rustix 1.1.2", + "rustix 1.1.3", "slab", "windows-sys 0.61.2", ] [[package]] name = "async-lock" -version = "3.4.1" +version = "3.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fd03604047cee9b6ce9de9f70c6cd540a0520c813cbd49bae61f33ab80ed1dc" +checksum = "290f7f2596bd5b78a9fec8088ccd89180d7f9f55b94b0576823bbbdc72ee8311" dependencies = [ "event-listener 5.4.1", "event-listener-strategy", @@ -480,7 +480,7 @@ dependencies = [ "cfg-if", "event-listener 5.4.1", "futures-lite 2.6.1", - "rustix 1.1.2", + "rustix 1.1.3", ] [[package]] @@ -491,7 +491,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -506,7 +506,7 @@ dependencies = [ "cfg-if", "futures-core", "futures-io", - "rustix 1.1.2", + "rustix 1.1.3", "signal-hook-registry", "slab", "windows-sys 0.61.2", @@ -558,7 +558,7 @@ checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -575,7 +575,7 @@ checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -705,7 +705,7 @@ dependencies = [ "regex", "rustc-hash 2.1.1", "shlex", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -805,7 +805,7 @@ checksum = "27142319e2f4c264581067eaccb9f80acccdde60d8b4bf57cc50cd3152f109ca" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -945,9 +945,9 @@ checksum = "f4ad8f11f288f48ca24471bbd51ac257aaeaaa07adae295591266b792902ae64" [[package]] name = "bumpalo" -version = "3.19.0" +version = "3.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" +checksum = "5dd9dc738b7a8311c7ade152424974d8115f2cdad61e8dab8dac9f2362298510" [[package]] name = "bytemuck" @@ -966,7 +966,7 @@ checksum = "f9abbd1bc6865053c427f7198e6af43bfdedc55ab791faed4fbd361d789575ff" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -1009,7 +1009,7 @@ checksum = "cb9f6e1368bd4621d2c86baa7e37de77a938adf5221e5dd3d6133340101b309e" dependencies = [ "bitflags 2.10.0", "polling", - "rustix 1.1.2", + "rustix 1.1.3", "slab", "tracing", ] @@ -1033,7 +1033,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "138efcf0940a02ebf0cc8d1eff41a1682a46b431630f4c52450d6265876021fa" dependencies = [ "calloop 0.14.3", - "rustix 1.1.2", + "rustix 1.1.3", "wayland-backend", "wayland-client", ] @@ -1060,16 +1060,16 @@ dependencies = [ "quote", "serde", "serde_json", - "syn 2.0.110", + "syn 2.0.111", "tempfile", "toml 0.8.23", ] [[package]] name = "cc" -version = "1.2.47" +version = "1.2.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd405d82c84ff7f35739f175f67d8b9fb7687a0e84ccdc78bd3568839827cf07" +checksum = "7a0aeaff4ff1a90589618835a598e545176939b97874f7abc7851caa0618f203" dependencies = [ "find-msvc-tools", "jobserver", @@ -1103,9 +1103,9 @@ dependencies = [ [[package]] name = "cfg-expr" -version = "0.20.4" +version = "0.20.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9acd0bdbbf4b2612d09f52ba61da432140cb10930354079d0d53fafc12968726" +checksum = "21be0e1ce6cdb2ee7fff840f922fb04ead349e5cfb1e750b769132d44ce04720" dependencies = [ "smallvec", "target-lexicon", @@ -1216,9 +1216,9 @@ dependencies = [ [[package]] name = "clap_complete" -version = "4.5.61" +version = "4.5.62" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39615915e2ece2550c0149addac32fb5bd312c657f43845bb9088cb9c8a7c992" +checksum = "004eef6b14ce34759aa7de4aea3217e368f463f46a3ed3764ca4b5a4404003b4" dependencies = [ "clap", ] @@ -1232,7 +1232,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -1272,11 +1272,11 @@ dependencies = [ [[package]] name = "clipboard_x11" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4274ea815e013e0f9f04a2633423e14194e408a0576c943ce3d14ca56c50031c" +checksum = "bd63e33452ffdafd39924c4f05a5dd1e94db646c779c6bd59148a3d95fff5ad4" dependencies = [ - "thiserror 1.0.69", + "thiserror 2.0.17", "x11rb", ] @@ -1395,9 +1395,9 @@ dependencies = [ [[package]] name = "compression-codecs" -version = "0.4.32" +version = "0.4.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "680dc087785c5230f8e8843e2e57ac7c1c90488b6a91b88caa265410568f441b" +checksum = "b0f7ac3e5b97fdce45e8922fb05cae2c37f7bbd63d30dd94821dacfd8f3f2bf2" dependencies = [ "compression-core", "deflate64", @@ -1407,9 +1407,9 @@ dependencies = [ [[package]] name = "compression-core" -version = "0.4.30" +version = "0.4.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a9b614a5787ef0c8802a55766480563cb3a93b435898c422ed2a359cf811582" +checksum = "75984efb6ed102a0d42db99afb6c1948f0380d1d91808d5529916e6c08b49d8d" [[package]] name = "concurrent-queue" @@ -1745,7 +1745,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -1824,7 +1824,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -1917,7 +1917,7 @@ dependencies = [ "cc", "memchr", "rustc_version", - "toml 0.9.8", + "toml 0.9.10+spec-1.1.0", "vswhom", "winreg", ] @@ -1933,9 +1933,9 @@ dependencies = [ [[package]] name = "endi" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3d8a32ae18130a3c84dd492d4215c3d913c3b07c6b63c2eb3eb7ff1101ab7bf" +checksum = "66b7e2430c6dff6a955451e2cfc438f09cea1965a9d6f87f7e3b90decc014099" [[package]] name = "enumflags2" @@ -1955,7 +1955,7 @@ checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -1975,7 +1975,7 @@ checksum = "44f23cf4b44bfce11a86ace86f8a73ffdec849c9fd00a386a53d278bd9e81fb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -2114,7 +2114,7 @@ checksum = "a0aca10fb742cb43f9e7bb8467c91aa9bcb8e3ffbc6a6f7389bb93ffc920577d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -2151,9 +2151,9 @@ dependencies = [ [[package]] name = "find-msvc-tools" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a3076410a55c90011c298b04d0cfa770b00fa04e1e3c97d3f6c9de105a03844" +checksum = "645cbb3a84e60b7531617d5ae4e57f7e27308f6445f5abf653209ea76dec8dff" [[package]] name = "flate2" @@ -2286,7 +2286,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -2422,7 +2422,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -2471,7 +2471,7 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bd49230192a3797a9a4d6abe9b3eed6f7fa4c8a8a4947977c6f80025f92cbd8" dependencies = [ - "rustix 1.1.2", + "rustix 1.1.3", "windows-link 0.2.1", ] @@ -2504,9 +2504,9 @@ dependencies = [ [[package]] name = "gif" -version = "0.14.0" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f954a9e9159ec994f73a30a12b96a702dde78f5547bcb561174597924f7d4162" +checksum = "f5df2ba84018d80c213569363bdcd0c64e6933c67fe4c1d60ecf822971a3c35e" dependencies = [ "color_quant", "weezl", @@ -2518,27 +2518,14 @@ version = "0.32.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7" -[[package]] -name = "gio-sys" -version = "0.20.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "521e93a7e56fc89e84aea9a52cfc9436816a4b363b030260b699950ff1336c83" -dependencies = [ - "glib-sys 0.20.10", - "gobject-sys 0.20.10", - "libc", - "system-deps", - "windows-sys 0.59.0", -] - [[package]] name = "gio-sys" version = "0.21.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0071fe88dba8e40086c8ff9bbb62622999f49628344b1d1bf490a48a29d80f22" dependencies = [ - "glib-sys 0.21.5", - "gobject-sys 0.21.5", + "glib-sys", + "gobject-sys", "libc", "system-deps", "windows-sys 0.61.2", @@ -2561,27 +2548,6 @@ version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "151665d9be52f9bb40fc7966565d39666f2d1e69233571b71b87791c7e0528b3" -[[package]] -name = "glib" -version = "0.20.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffc4b6e352d4716d84d7dde562dd9aee2a7d48beb872dd9ece7f2d1515b2d683" -dependencies = [ - "bitflags 2.10.0", - "futures-channel", - "futures-core", - "futures-executor", - "futures-task", - "futures-util", - "gio-sys 0.20.10", - "glib-macros 0.20.12", - "glib-sys 0.20.10", - "gobject-sys 0.20.10", - "libc", - "memchr", - "smallvec", -] - [[package]] name = "glib" version = "0.21.5" @@ -2594,28 +2560,15 @@ dependencies = [ "futures-executor", "futures-task", "futures-util", - "gio-sys 0.21.5", - "glib-macros 0.21.5", - "glib-sys 0.21.5", - "gobject-sys 0.21.5", + "gio-sys", + "glib-macros", + "glib-sys", + "gobject-sys", "libc", "memchr", "smallvec", ] -[[package]] -name = "glib-macros" -version = "0.20.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8084af62f09475a3f529b1629c10c429d7600ee1398ae12dd3bf175d74e7145" -dependencies = [ - "heck 0.5.0", - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 2.0.110", -] - [[package]] name = "glib-macros" version = "0.21.5" @@ -2626,17 +2579,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.110", -] - -[[package]] -name = "glib-sys" -version = "0.20.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ab79e1ed126803a8fb827e3de0e2ff95191912b8db65cee467edb56fc4cc215" -dependencies = [ - "libc", - "system-deps", + "syn 2.0.111", ] [[package]] @@ -2701,24 +2644,13 @@ dependencies = [ "gl_generator", ] -[[package]] -name = "gobject-sys" -version = "0.20.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec9aca94bb73989e3cfdbf8f2e0f1f6da04db4d291c431f444838925c4c63eda" -dependencies = [ - "glib-sys 0.20.10", - "libc", - "system-deps", -] - [[package]] name = "gobject-sys" version = "0.21.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2dca35da0d19a18f4575f3cb99fe1c9e029a2941af5662f326f738a21edaf294" dependencies = [ - "glib-sys 0.21.5", + "glib-sys", "libc", "system-deps", ] @@ -2885,7 +2817,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -2906,7 +2838,7 @@ checksum = "644de174341a87b3478bd65b66bca38af868bcf2b2e865700523734f83cfc664" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -3036,7 +2968,7 @@ checksum = "2c28f65ef47fb97e21e82fd4dd75ccc2506eda010c846dc8054015ea234f1a22" dependencies = [ "gpui_perf", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -3053,43 +2985,18 @@ dependencies = [ "error-stack", "futures", "futures-lite 2.6.1", - "glib 0.21.5", - "glib-sys 0.21.5", - "gstreamer 0.24.4", - "gstreamer-app 0.24.4", - "gstreamer-base 0.24.4", - "gstreamer-video 0.24.4", + "glib", + "glib-sys", + "gstreamer", + "gstreamer-app", + "gstreamer-base", + "gstreamer-video", "smol", "thiserror 2.0.17", "tracing", "tracing-subscriber", ] -[[package]] -name = "gstreamer" -version = "0.23.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8757a87f3706560037a01a9f06a59fcc7bdb0864744dcf73546606e60c4316e1" -dependencies = [ - "cfg-if", - "futures-channel", - "futures-core", - "futures-util", - "glib 0.20.12", - "gstreamer-sys 0.23.6", - "itertools 0.14.0", - "libc", - "muldiv", - "num-integer", - "num-rational", - "once_cell", - "option-operations 0.5.0", - "paste", - "pin-project-lite", - "smallvec", - "thiserror 2.0.17", -] - [[package]] name = "gstreamer" version = "0.24.4" @@ -3100,36 +3007,21 @@ dependencies = [ "futures-channel", "futures-core", "futures-util", - "glib 0.21.5", - "gstreamer-sys 0.24.4", + "glib", + "gstreamer-sys", "itertools 0.14.0", "kstring", "libc", "muldiv", "num-integer", "num-rational", - "option-operations 0.6.1", - "pastey 0.2.0", + "option-operations", + "pastey 0.2.1", "pin-project-lite", "smallvec", "thiserror 2.0.17", ] -[[package]] -name = "gstreamer-app" -version = "0.23.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e9a883eb21aebcf1289158225c05f7aea5da6ecf71fa7f0ff1ce4d25baf004e" -dependencies = [ - "futures-core", - "futures-sink", - "glib 0.20.12", - "gstreamer 0.23.7", - "gstreamer-app-sys 0.23.5", - "gstreamer-base 0.23.6", - "libc", -] - [[package]] name = "gstreamer-app" version = "0.24.4" @@ -3138,53 +3030,26 @@ checksum = "895753fb0f976693f321e6b9d68f746ef9095f1a5b8277c11d85d807a949fbfc" dependencies = [ "futures-core", "futures-sink", - "glib 0.21.5", - "gstreamer 0.24.4", - "gstreamer-app-sys 0.24.4", - "gstreamer-base 0.24.4", + "glib", + "gstreamer", + "gstreamer-app-sys", + "gstreamer-base", "libc", ] -[[package]] -name = "gstreamer-app-sys" -version = "0.23.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94f7ef838306fe51852d503a14dc79ac42de005a59008a05098de3ecdaf05455" -dependencies = [ - "glib-sys 0.20.10", - "gstreamer-base-sys 0.23.6", - "gstreamer-sys 0.23.6", - "libc", - "system-deps", -] - [[package]] name = "gstreamer-app-sys" version = "0.24.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f7719cee28afda1a48ab1ee93769628bd0653d3c5be1923bce9a8a4550fcc980" dependencies = [ - "glib-sys 0.21.5", - "gstreamer-base-sys 0.24.4", - "gstreamer-sys 0.24.4", + "glib-sys", + "gstreamer-base-sys", + "gstreamer-sys", "libc", "system-deps", ] -[[package]] -name = "gstreamer-base" -version = "0.23.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f19a74fd04ffdcb847dd322640f2cf520897129d00a7bcb92fd62a63f3e27404" -dependencies = [ - "atomic_refcell", - "cfg-if", - "glib 0.20.12", - "gstreamer 0.23.7", - "gstreamer-base-sys 0.23.6", - "libc", -] - [[package]] name = "gstreamer-base" version = "0.24.4" @@ -3193,46 +3058,21 @@ checksum = "4dd15c7e37d306573766834a5cbdd8ee711265f217b060f40a9a8eda45298488" dependencies = [ "atomic_refcell", "cfg-if", - "glib 0.21.5", - "gstreamer 0.24.4", - "gstreamer-base-sys 0.24.4", + "glib", + "gstreamer", + "gstreamer-base-sys", "libc", ] -[[package]] -name = "gstreamer-base-sys" -version = "0.23.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f2fb0037b6d3c5b51f60dea11e667910f33be222308ca5a101450018a09840" -dependencies = [ - "glib-sys 0.20.10", - "gobject-sys 0.20.10", - "gstreamer-sys 0.23.6", - "libc", - "system-deps", -] - [[package]] name = "gstreamer-base-sys" version = "0.24.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "27a2eda2c61e13c11883bf19b290d07ea6b53d04fd8bfeb7af64b6006c6c9ee6" dependencies = [ - "glib-sys 0.21.5", - "gobject-sys 0.21.5", - "gstreamer-sys 0.24.4", - "libc", - "system-deps", -] - -[[package]] -name = "gstreamer-sys" -version = "0.23.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "feea73b4d92dbf9c24a203c9cd0bcc740d584f6b5960d5faf359febf288919b2" -dependencies = [ - "glib-sys 0.20.10", - "gobject-sys 0.20.10", + "glib-sys", + "gobject-sys", + "gstreamer-sys", "libc", "system-deps", ] @@ -3244,29 +3084,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5d88630697e757c319e7bcec7b13919ba80492532dd3238481c1c4eee05d4904" dependencies = [ "cfg-if", - "glib-sys 0.21.5", - "gobject-sys 0.21.5", + "glib-sys", + "gobject-sys", "libc", "system-deps", ] -[[package]] -name = "gstreamer-video" -version = "0.23.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1318b599d77ca4f7702ecbdeac1672d6304cb16b7e5752fabb3ee8260449a666" -dependencies = [ - "cfg-if", - "futures-channel", - "glib 0.20.12", - "gstreamer 0.23.7", - "gstreamer-base 0.23.6", - "gstreamer-video-sys 0.23.6", - "libc", - "once_cell", - "thiserror 2.0.17", -] - [[package]] name = "gstreamer-video" version = "0.24.4" @@ -3275,38 +3098,24 @@ checksum = "33987f6a6a99750a07b0341d6288bac89b9b301be4672a209935203d4608d547" dependencies = [ "cfg-if", "futures-channel", - "glib 0.21.5", - "gstreamer 0.24.4", - "gstreamer-base 0.24.4", - "gstreamer-video-sys 0.24.4", + "glib", + "gstreamer", + "gstreamer-base", + "gstreamer-video-sys", "libc", "thiserror 2.0.17", ] -[[package]] -name = "gstreamer-video-sys" -version = "0.23.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a70f0947f12d253b9de9bc3fd92f981e4d025336c18389c7f08cdf388a99f5c" -dependencies = [ - "glib-sys 0.20.10", - "gobject-sys 0.20.10", - "gstreamer-base-sys 0.23.6", - "gstreamer-sys 0.23.6", - "libc", - "system-deps", -] - [[package]] name = "gstreamer-video-sys" version = "0.24.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a00c28faad96cd40a7b7592433051199691b131b08f622ed5d51c54e049792d3" dependencies = [ - "glib-sys 0.21.5", - "gobject-sys 0.21.5", - "gstreamer-base-sys 0.24.4", - "gstreamer-sys 0.24.4", + "glib-sys", + "gobject-sys", + "gstreamer-base-sys", + "gstreamer-sys", "libc", "system-deps", ] @@ -3388,10 +3197,10 @@ name = "hdr-gstreamer-wgpu" version = "0.1.0" dependencies = [ "anyhow", - "gstreamer 0.24.4", - "gstreamer-app 0.24.4", - "gstreamer-base 0.24.4", - "gstreamer-video 0.24.4", + "gstreamer", + "gstreamer-app", + "gstreamer-base", + "gstreamer-video", "pollster 0.4.0", "tracing", "tracing-subscriber", @@ -3475,12 +3284,11 @@ dependencies = [ [[package]] name = "http" -version = "1.3.1" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" +checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" dependencies = [ "bytes", - "fnv", "itoa", ] @@ -3570,9 +3378,9 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.18" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52e9a2a24dc5c6821e71a7030e1e14b7b632acac55c40e9d2e082c621261bb56" +checksum = "727805d60e7938b76b826a6ef209eb70eaa1812794f9424d4a4e2d740662df5f" dependencies = [ "base64", "bytes", @@ -3602,7 +3410,7 @@ dependencies = [ "iced_core", "iced_debug 0.14.0 (git+https://github.com/uttarayan21/iced?branch=0.14)", "iced_devtools", - "iced_futures 0.14.0 (git+https://github.com/uttarayan21/iced?branch=0.14)", + "iced_futures", "iced_renderer", "iced_runtime 0.14.0 (git+https://github.com/uttarayan21/iced?branch=0.14)", "iced_widget", @@ -3616,10 +3424,11 @@ name = "iced-video" version = "0.1.0" dependencies = [ "error-stack", + "futures-lite 2.6.1", "gst", "iced", "iced_core", - "iced_futures 0.14.0 (registry+https://github.com/rust-lang/crates.io-index)", + "iced_futures", "iced_renderer", "iced_wgpu", "thiserror 2.0.17", @@ -3667,7 +3476,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "25035ab0215a620e53f4103e36fc4e59a1fb2817e4bfc38a30ad27b4202ea0be" dependencies = [ "iced_core", - "iced_futures 0.14.0 (registry+https://github.com/rust-lang/crates.io-index)", + "iced_futures", "log", ] @@ -3678,7 +3487,7 @@ source = "git+https://github.com/uttarayan21/iced?branch=0.14#5846d52983d7e2eecc dependencies = [ "iced_beacon", "iced_core", - "iced_futures 0.14.0 (git+https://github.com/uttarayan21/iced?branch=0.14)", + "iced_futures", "log", ] @@ -3693,20 +3502,6 @@ dependencies = [ "log", ] -[[package]] -name = "iced_futures" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c0c85ccad42dfbec7293c36c018af0ea0dbcc52d137a4a9a0b0f6822a3fdf0a" -dependencies = [ - "futures", - "iced_core", - "log", - "rustc-hash 2.1.1", - "wasm-bindgen-futures", - "wasmtimer", -] - [[package]] name = "iced_futures" version = "0.14.0" @@ -3732,7 +3527,7 @@ dependencies = [ "cosmic-text 0.15.0", "half", "iced_core", - "iced_futures 0.14.0 (registry+https://github.com/rust-lang/crates.io-index)", + "iced_futures", "log", "raw-window-handle", "rustc-hash 2.1.1", @@ -3750,7 +3545,7 @@ dependencies = [ "cosmic-text 0.15.0", "half", "iced_core", - "iced_futures 0.14.0 (git+https://github.com/uttarayan21/iced?branch=0.14)", + "iced_futures", "image", "kamadak-exif", "log", @@ -3800,7 +3595,7 @@ checksum = "d1889b819ce4c06674183242e336c8d49465665441396914dc07cc86f44fa8d4" dependencies = [ "bytes", "iced_core", - "iced_futures 0.14.0 (registry+https://github.com/rust-lang/crates.io-index)", + "iced_futures", "raw-window-handle", "thiserror 2.0.17", ] @@ -3812,7 +3607,7 @@ source = "git+https://github.com/uttarayan21/iced?branch=0.14#5846d52983d7e2eecc dependencies = [ "bytes", "iced_core", - "iced_futures 0.14.0 (git+https://github.com/uttarayan21/iced?branch=0.14)", + "iced_futures", "raw-window-handle", "sipper", "thiserror 2.0.17", @@ -3834,24 +3629,6 @@ dependencies = [ "tiny-skia", ] -[[package]] -name = "iced_video_player" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b836dad1567026b92b5f3eba21e3e9bea47b6b66392303bb07d91e82bb7401a" -dependencies = [ - "glib 0.20.12", - "gstreamer 0.23.7", - "gstreamer-app 0.23.5", - "gstreamer-base 0.23.6", - "gstreamer-video 0.23.6", - "iced", - "iced_wgpu", - "log", - "thiserror 1.0.69", - "url", -] - [[package]] name = "iced_wgpu" version = "0.14.0" @@ -3969,9 +3746,9 @@ checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" [[package]] name = "icu_properties" -version = "2.1.1" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e93fcd3157766c0c8da2f8cff6ce651a31f0810eaa1c51ec363ef790bbb5fb99" +checksum = "020bfc02fe870ec3a66d93e677ccca0562506e5872c650f893269e08615d74ec" dependencies = [ "icu_collections", "icu_locale_core", @@ -3983,9 +3760,9 @@ dependencies = [ [[package]] name = "icu_properties_data" -version = "2.1.1" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02845b3647bb045f1100ecd6480ff52f34c35f82d9880e029d329c21d1054899" +checksum = "616c294cf8d725c6afcd8f55abc17c56464ef6211f9ed59cccffe534129c77af" [[package]] name = "icu_provider" @@ -4044,7 +3821,7 @@ dependencies = [ "rgb", "tiff", "zune-core 0.5.0", - "zune-jpeg 0.5.5", + "zune-jpeg 0.5.8", ] [[package]] @@ -4117,7 +3894,7 @@ checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -4224,9 +4001,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.15" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" +checksum = "7ee5b5339afb4c41626dde77b7a611bd4f2c202b897852b4bcf5d03eddc61010" [[package]] name = "jello" @@ -4241,7 +4018,7 @@ dependencies = [ "error-stack", "thiserror 2.0.17", "tokio", - "toml 0.9.8", + "toml 0.9.10+spec-1.1.0", "tracing", "tracing-subscriber", "ui-gpui", @@ -4258,9 +4035,9 @@ dependencies = [ [[package]] name = "jiff" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49cce2b81f2098e7e3efc35bc2e0a6b7abec9d34128283d7a26fa8f32a6dbb35" +checksum = "a87d9b8105c23642f50cbbae03d1f75d8422c5cb98ce7ee9271f7ff7505be6b8" dependencies = [ "jiff-static", "jiff-tzdb-platform", @@ -4273,20 +4050,20 @@ dependencies = [ [[package]] name = "jiff-static" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "980af8b43c3ad5d8d349ace167ec8170839f753a42d233ba19e08afe1850fa69" +checksum = "b787bebb543f8969132630c51fd0afab173a86c6abae56ff3b9e5e3e3f9f6e58" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] name = "jiff-tzdb" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1283705eb0a21404d2bfd6eef2a7593d240bc42a0bdb39db0ad6fa2ec026524" +checksum = "68971ebff725b9e2ca27a601c5eb38a4c5d64422c4cbab0c535f248087eda5c2" [[package]] name = "jiff-tzdb-platform" @@ -4331,9 +4108,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.82" +version = "0.3.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b011eec8cc36da2aab2d5cff675ec18454fad408585853910a202391cf9f8e65" +checksum = "464a3709c7f55f1f721e5389aa6ea4e3bc6aba669353300af094b29ffbdde1d8" dependencies = [ "once_cell", "wasm-bindgen", @@ -4436,9 +4213,9 @@ checksum = "7a79a3332a6609480d7d0c9eab957bca6b455b91bb84e66d19f5ff66294b85b8" [[package]] name = "libc" -version = "0.2.177" +version = "0.2.178" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" +checksum = "37c93d8daa9d8a012fd8ab92f088405fb202ea0b6ab73ee2482ae66af4f42091" [[package]] name = "libfuzzer-sys" @@ -4468,13 +4245,13 @@ checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" [[package]] name = "libredox" -version = "0.1.10" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" +checksum = "df15f6eac291ed1cf25865b1ee60399f57e7c227e7f51bdbd4c5270396a9ed50" dependencies = [ "bitflags 2.10.0", "libc", - "redox_syscall 0.5.18", + "redox_syscall 0.6.0", ] [[package]] @@ -4527,11 +4304,11 @@ dependencies = [ [[package]] name = "log" -version = "0.4.28" +version = "0.4.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" +checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" dependencies = [ - "serde", + "serde_core", "value-bag", ] @@ -4746,9 +4523,9 @@ checksum = "e53debba6bda7a793e5f99b8dacf19e626084f525f7829104ba9898f367d85ff" [[package]] name = "mio" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69d83b0086dc8ecf3ce9ae2874b2d1290252e2a30720bea58a5c6639b0092873" +checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc" dependencies = [ "libc", "wasi", @@ -4757,9 +4534,9 @@ dependencies = [ [[package]] name = "moxcms" -version = "0.7.9" +version = "0.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fbdd3d7436f8b5e892b8b7ea114271ff0fa00bc5acae845d53b07d498616ef6" +checksum = "ac9557c559cd6fc9867e122e20d2cbefc9ca29d80d027a8e39310920ed2f0a97" dependencies = [ "num-traits", "pxfm", @@ -4773,9 +4550,9 @@ checksum = "956787520e75e9bd233246045d19f42fb73242759cc57fba9611d940ae96d4b0" [[package]] name = "mundy" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1507867e7cc8ae71ec01ef4a7a4b9f4b1a827324b414a0232b04e19324ec92d" +checksum = "523813c9e194ec43693805214eb112551f99382115b67f38600d724a692e7e8b" dependencies = [ "android-build", "async-io", @@ -5038,7 +4815,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -5111,7 +4888,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -5598,7 +5375,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -5625,22 +5402,13 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" -[[package]] -name = "option-operations" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c26d27bb1aeab65138e4bf7666045169d1717febcc9ff870166be8348b223d0" -dependencies = [ - "paste", -] - [[package]] name = "option-operations" version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aca39cf52b03268400c16eeb9b56382ea3c3353409309b63f5c8f0b1faf42754" dependencies = [ - "pastey 0.2.0", + "pastey 0.2.1", ] [[package]] @@ -5723,9 +5491,9 @@ checksum = "35fb2e5f958ec131621fdd531e9fc186ed768cbe395337403ae56c17a74c68ec" [[package]] name = "pastey" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57d6c094ee800037dff99e02cab0eaf3142826586742a270ab3d7a62656bd27a" +checksum = "b867cad97c0791bbd3aaa6472142568c6c9e8f71937e98379f584cfb0cf35bec" [[package]] name = "pathdiff" @@ -5801,7 +5569,7 @@ checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -5869,7 +5637,7 @@ dependencies = [ "concurrent-queue", "hermit-abi", "pin-project-lite", - "rustix 1.1.2", + "rustix 1.1.3", "windows-sys 0.61.2", ] @@ -5887,9 +5655,9 @@ checksum = "2f3a9f18d041e6d0e102a0a46750538147e5e8992d3b4873aaafee2520b00ce3" [[package]] name = "portable-atomic" -version = "1.11.1" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" +checksum = "f59e70c4aef1e55797c2e8fd94a4f2a973fc972cfde0e0b05f683667b0cd39dd" [[package]] name = "portable-atomic-util" @@ -5954,7 +5722,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -5963,7 +5731,7 @@ version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" dependencies = [ - "toml_edit 0.23.7", + "toml_edit 0.23.10+spec-1.0.0", ] [[package]] @@ -6009,7 +5777,7 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -6037,7 +5805,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "52717f9a02b6965224f95ca2a81e2e0c5c43baacd28ca057577988930b6c3d5b" dependencies = [ "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -6052,9 +5820,9 @@ dependencies = [ [[package]] name = "pxfm" -version = "0.1.25" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3cbdf373972bf78df4d3b518d07003938e2c7d1fb5891e55f9cb6df57009d84" +checksum = "7186d3822593aa4393561d186d1393b3923e9d6163d3fbfd6e825e3e6cf3e6a8" dependencies = [ "num-traits", ] @@ -6232,9 +6000,9 @@ checksum = "d20581732dd76fa913c7dff1a2412b714afe3573e94d41c34719de73337cc8ab" [[package]] name = "rangemap" -version = "1.7.0" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acbbbbea733ec66275512d0b9694f34102e7d5406fdbe2ad8d21b28dce92887c" +checksum = "973443cf09a9c8656b574a866ab68dfa19f0867d0340648c7d2f6a71b8a8ea68" [[package]] name = "rav1e" @@ -6372,6 +6140,15 @@ dependencies = [ "bitflags 2.10.0", ] +[[package]] +name = "redox_syscall" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec96166dafa0886eb81fe1c0a388bece180fbef2135f97c1e2cf8302e74b43b5" +dependencies = [ + "bitflags 2.10.0", +] + [[package]] name = "redox_users" version = "0.4.6" @@ -6400,7 +6177,7 @@ checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -6440,9 +6217,9 @@ checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832" [[package]] name = "reqwest" -version = "0.12.24" +version = "0.12.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d0946410b9f7b082a427e4ef5c8ff541a88b357bc6c637c40db3a68ac70a36f" +checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147" dependencies = [ "base64", "bytes", @@ -6541,7 +6318,7 @@ dependencies = [ "proc-macro2", "quote", "rust-embed-utils", - "syn 2.0.110", + "syn 2.0.111", "walkdir", ] @@ -6598,9 +6375,9 @@ dependencies = [ [[package]] name = "rustix" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" +checksum = "146c9e247ccc180c1f61615433868c99f3de3ae256a30a43b49f67c2d9171f34" dependencies = [ "bitflags 2.10.0", "errno", @@ -6646,9 +6423,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.13.0" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94182ad936a0c91c324cd46c6511b9510ed16af436d7b5bab34beab0afd55f7a" +checksum = "21e6f2ab2928ca4291b86736a8bd920a277a399bba1589409d72154ff87c1282" dependencies = [ "web-time", "zeroize", @@ -6708,9 +6485,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.20" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" +checksum = "62049b2877bf12821e8f9ad256ee38fdc31db7387ec2d3b3f403024de2034aea" [[package]] name = "same-file" @@ -6732,9 +6509,9 @@ dependencies = [ [[package]] name = "schemars" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9558e172d4e8533736ba97870c4b2cd63f84b382a3d6eb063da41b91cce17289" +checksum = "54e910108742c57a770f492731f99be216a52fadd361b06c8fb59d74ccc267d2" dependencies = [ "dyn-clone", "indexmap", @@ -6746,14 +6523,14 @@ dependencies = [ [[package]] name = "schemars_derive" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "301858a4023d78debd2353c7426dc486001bddc91ae31a76fb1f55132f7e2633" +checksum = "4908ad288c5035a8eb12cfdf0d49270def0a268ee162b75eeee0f85d155a7c45" dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -6876,7 +6653,7 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -6887,30 +6664,30 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] name = "serde_fmt" -version = "1.0.3" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1d4ddca14104cd60529e8c7f7ba71a2c8acd8f7f5cfcdc2faf97eeb7c3010a4" +checksum = "6e497af288b3b95d067a23a4f749f2861121ffcb2f6d8379310dcda040c345ed" dependencies = [ - "serde", + "serde_core", ] [[package]] name = "serde_json" -version = "1.0.145" +version = "1.0.147" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" +checksum = "6af14725505314343e673e9ecb7cd7e8a36aa9791eb936235a3567cc31447ae4" dependencies = [ "indexmap", "itoa", "memchr", - "ryu", "serde", "serde_core", + "zmij", ] [[package]] @@ -6934,7 +6711,7 @@ checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -6948,9 +6725,9 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e24345aa0fe688594e73770a5f6d1b216508b4f93484c0026d521acd30134392" +checksum = "f8bbf91e5a4d6315eee45e704372590b30e260ee83af6639d64557f51b067776" dependencies = [ "serde_core", ] @@ -7001,18 +6778,19 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "signal-hook-registry" -version = "1.4.6" +version = "1.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b" +checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" dependencies = [ + "errno", "libc", ] [[package]] name = "simd-adler32" -version = "0.3.7" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" +checksum = "e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2" [[package]] name = "simd_helpers" @@ -7072,9 +6850,9 @@ checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" [[package]] name = "slotmap" -version = "1.0.7" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a" +checksum = "bdd58c3c93c3d278ca835519292445cb4b0d4dc59ccfdf7ceadaab3f8aeb4038" dependencies = [ "version_check", ] @@ -7123,7 +6901,7 @@ dependencies = [ "libc", "log", "memmap2", - "rustix 1.1.2", + "rustix 1.1.3", "thiserror 2.0.17", "wayland-backend", "wayland-client", @@ -7186,32 +6964,32 @@ dependencies = [ [[package]] name = "softbuffer" -version = "0.4.6" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18051cdd562e792cad055119e0cdb2cfc137e44e3987532e0f9659a77931bb08" +checksum = "aac18da81ebbf05109ab275b157c22a653bb3c12cf884450179942f81bcbf6c3" dependencies = [ "as-raw-xcb-connection", "bytemuck", - "cfg_aliases", - "core-graphics 0.24.0", "fastrand 2.3.0", - "foreign-types 0.5.0", "js-sys", - "log", "memmap2", - "objc2 0.5.2", - "objc2-foundation 0.2.2", - "objc2-quartz-core 0.2.2", + "ndk", + "objc2 0.6.3", + "objc2-core-foundation", + "objc2-core-graphics", + "objc2-foundation 0.3.2", + "objc2-quartz-core 0.3.2", "raw-window-handle", "redox_syscall 0.5.18", - "rustix 0.38.44", + "rustix 1.1.3", "tiny-xlib", + "tracing", "wasm-bindgen", "wayland-backend", "wayland-client", "wayland-sys", "web-sys", - "windows-sys 0.59.0", + "windows-sys 0.61.2", "x11rb", ] @@ -7270,7 +7048,7 @@ checksum = "172175341049678163e979d9107ca3508046d4d2a7c6682bee46ac541b17db69" dependencies = [ "proc-macro-error2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -7289,7 +7067,7 @@ dependencies = [ "quote", "serde", "sha2", - "syn 2.0.110", + "syn 2.0.111", "thiserror 1.0.69", ] @@ -7355,7 +7133,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -7367,7 +7145,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -7494,9 +7272,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.110" +version = "2.0.111" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a99801b5bd34ede4cf3fc688c5919368fea4e4814a4664359503e6015b280aea" +checksum = "390cc9a294ab71bdb1aa2e99d13be9c753cd2d7bd6560c77118597410c4d2e87" dependencies = [ "proc-macro2", "quote", @@ -7520,7 +7298,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -7562,7 +7340,7 @@ dependencies = [ "cfg-expr", "heck 0.5.0", "pkg-config", - "toml 0.9.8", + "toml 0.9.10+spec-1.1.0", "version-compare", ] @@ -7598,14 +7376,14 @@ checksum = "df7f62577c25e07834649fc3b39fafdc597c0a3527dc1c60129201ccfcbaa50c" [[package]] name = "tempfile" -version = "3.23.0" +version = "3.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" +checksum = "655da9c7eb6305c55742045d5a8d2037996d61d8de95806335c7c86ce0f82e9c" dependencies = [ "fastrand 2.3.0", "getrandom 0.3.4", "once_cell", - "rustix 1.1.2", + "rustix 1.1.3", "windows-sys 0.61.2", ] @@ -7655,7 +7433,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -7666,7 +7444,7 @@ checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -7810,7 +7588,7 @@ checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -7896,14 +7674,14 @@ dependencies = [ [[package]] name = "toml" -version = "0.9.8" +version = "0.9.10+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0dc8b1fb61449e27716ec0e1bdf0f6b8f3e8f6b05391e8497b8b6d7804ea6d8" +checksum = "0825052159284a1a8b4d6c0c86cbc801f2da5afd2b225fa548c72f2e74002f48" dependencies = [ "indexmap", "serde_core", - "serde_spanned 1.0.3", - "toml_datetime 0.7.3", + "serde_spanned 1.0.4", + "toml_datetime 0.7.5+spec-1.1.0", "toml_parser", "toml_writer", "winnow", @@ -7920,9 +7698,9 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.7.3" +version = "0.7.5+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2cdb639ebbc97961c51720f858597f7f24c4fc295327923af55b74c3c724533" +checksum = "92e1cfed4a3038bc5a127e35a2d360f145e1f4b971b551a2ba5fd7aedf7e1347" dependencies = [ "serde_core", ] @@ -7943,21 +7721,21 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.23.7" +version = "0.23.10+spec-1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6485ef6d0d9b5d0ec17244ff7eb05310113c3f316f2d14200d4de56b3cb98f8d" +checksum = "84c8b9f757e028cee9fa244aea147aab2a9ec09d5325a9b01e0a49730c2b5269" dependencies = [ "indexmap", - "toml_datetime 0.7.3", + "toml_datetime 0.7.5+spec-1.1.0", "toml_parser", "winnow", ] [[package]] name = "toml_parser" -version = "1.0.4" +version = "1.0.6+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0cbe268d35bdb4bb5a56a2de88d0ad0eb70af5384a99d648cd4b3d04039800e" +checksum = "a3198b4b0a8e11f09dd03e133c0280504d0801269e9afa46362ffde1cbeebf44" dependencies = [ "winnow", ] @@ -7970,9 +7748,9 @@ checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" [[package]] name = "toml_writer" -version = "1.0.4" +version = "1.0.6+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df8b2b54733674ad286d16267dcfc7a71ed5c776e4ac7aa3c3e2561f7c637bf2" +checksum = "ab16f14aed21ee8bfd8ec22513f7287cd4a91aa92e44edfe2c17ddd004e92607" [[package]] name = "tower" @@ -7991,9 +7769,9 @@ dependencies = [ [[package]] name = "tower-http" -version = "0.6.6" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" +checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8" dependencies = [ "bitflags 2.10.0", "bytes", @@ -8021,9 +7799,9 @@ checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" -version = "0.1.43" +version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d15d90a0b5c19378952d479dc858407149d7bb45a14de0142f6c534b16fc647" +checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" dependencies = [ "log", "pin-project-lite", @@ -8039,14 +7817,14 @@ checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] name = "tracing-core" -version = "0.1.35" +version = "0.1.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a04e24fab5c89c6a36eb8558c9656f30d81de51dfa4d3b45f26b21d61fa0a6c" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" dependencies = [ "once_cell", "valuable", @@ -8119,7 +7897,7 @@ dependencies = [ "quote", "serde", "serde_json", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -8163,12 +7941,12 @@ dependencies = [ "bytes", "gpui_util", "iced", - "iced_video_player", + "iced-video", "iced_wgpu", "iced_winit 0.14.0 (registry+https://github.com/rust-lang/crates.io-index)", "reqwest", "tap", - "toml 0.9.8", + "toml 0.9.10+spec-1.1.0", "tracing", "url", "uuid", @@ -8230,9 +8008,9 @@ checksum = "7df058c713841ad818f1dc5d3fd88063241cc61f49f5fbea4b951e8cf5a8d71d" [[package]] name = "unicode-script" -version = "0.5.7" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb421b350c9aff471779e262955939f565ec18b86c15364e6bdf0d662ca7c1f" +checksum = "383ad40bb927465ec0ce7720e033cb4ca06912855fc35db31b5755d0de75b1ee" [[package]] name = "unicode-segmentation" @@ -8323,13 +8101,13 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.18.1" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" +checksum = "e2e054861b4bd027cd373e18e8d8d8e6548085000e41290d95ce0c373a654b4a" dependencies = [ "getrandom 0.3.4", "js-sys", - "serde", + "serde_core", "sha1_smol", "wasm-bindgen", ] @@ -8467,9 +8245,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.105" +version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da95793dfc411fbbd93f5be7715b0578ec61fe87cb1a42b12eb625caa5c5ea60" +checksum = "0d759f433fa64a2d763d1340820e46e111a7a5ab75f993d1852d70b03dbb80fd" dependencies = [ "cfg-if", "once_cell", @@ -8480,9 +8258,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.55" +version = "0.4.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "551f88106c6d5e7ccc7cd9a16f312dd3b5d36ea8b4954304657d5dfba115d4a0" +checksum = "836d9622d604feee9e5de25ac10e3ea5f2d65b41eac0d9ce72eb5deae707ce7c" dependencies = [ "cfg-if", "js-sys", @@ -8493,9 +8271,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.105" +version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04264334509e04a7bf8690f2384ef5265f05143a4bff3889ab7a3269adab59c2" +checksum = "48cb0d2638f8baedbc542ed444afc0644a29166f1595371af4fecf8ce1e7eeb3" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -8503,22 +8281,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.105" +version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "420bc339d9f322e562942d52e115d57e950d12d88983a14c79b86859ee6c7ebc" +checksum = "cefb59d5cd5f92d9dcf80e4683949f15ca4b511f4ac0a6e14d4e1ac60c6ecd40" dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.105" +version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76f218a38c84bcb33c25ec7059b07847d465ce0e0a76b995e134a45adcb6af76" +checksum = "cbc538057e648b67f72a982e708d485b2efa771e1ac05fec311f9f63e5800db4" dependencies = [ "unicode-ident", ] @@ -8558,7 +8336,7 @@ checksum = "673a33c33048a5ade91a6b139580fa174e19fb0d23f396dca9fa15f2e1e49b35" dependencies = [ "cc", "downcast-rs", - "rustix 1.1.2", + "rustix 1.1.3", "scoped-tls", "smallvec", "wayland-sys", @@ -8571,7 +8349,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c66a47e840dc20793f2264eb4b3e4ecb4b75d91c0dd4af04b456128e0bdd449d" dependencies = [ "bitflags 2.10.0", - "rustix 1.1.2", + "rustix 1.1.3", "wayland-backend", "wayland-scanner", ] @@ -8593,7 +8371,7 @@ version = "0.31.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "447ccc440a881271b19e9989f75726d60faa09b95b0200a9b7eb5cc47c3eeb29" dependencies = [ - "rustix 1.1.2", + "rustix 1.1.3", "wayland-client", "xcursor", ] @@ -8712,9 +8490,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.82" +version = "0.3.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a1f95c0d03a47f4ae1f7a64643a6bb97465d9b740f0fa8f90ea33915c99a9a1" +checksum = "9b32828d774c412041098d182a8b38b16ea816958e07cf40eec2bc080ae137ac" dependencies = [ "js-sys", "wasm-bindgen", @@ -8932,16 +8710,16 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "window_clipboard" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5793d0b08c9e6a1240fe9ab2bd8db277487bf92436fd1a6321861a90a1b0cb7e" +checksum = "d5654226305eaf2dde8853fb482861d28e5dcecbbd40cb88e8393d94bb80d733" dependencies = [ "clipboard-win", "clipboard_macos", "clipboard_wayland", "clipboard_x11", "raw-window-handle", - "thiserror 1.0.69", + "thiserror 2.0.17", ] [[package]] @@ -9066,7 +8844,7 @@ checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -9077,7 +8855,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -9088,7 +8866,7 @@ checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -9099,7 +8877,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -9600,9 +9378,9 @@ dependencies = [ [[package]] name = "winnow" -version = "0.7.13" +version = "0.7.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf" +checksum = "5a5364e9d77fcdeeaa6062ced926ee3381faa2ee02d3eb83a5c27a8825540829" dependencies = [ "memchr", ] @@ -9675,7 +9453,7 @@ dependencies = [ "libc", "libloading", "once_cell", - "rustix 1.1.2", + "rustix 1.1.3", "x11rb-protocol", ] @@ -9785,7 +9563,7 @@ checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", "synstructure", ] @@ -9832,7 +9610,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", "zbus_names", "zvariant", "zvariant_utils", @@ -9947,22 +9725,22 @@ checksum = "6df3dc4292935e51816d896edcd52aa30bc297907c26167fec31e2b0c6a32524" [[package]] name = "zerocopy" -version = "0.8.28" +version = "0.8.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43fa6694ed34d6e57407afbccdeecfa268c470a7d2a5b0cf49ce9fcc345afb90" +checksum = "fd74ec98b9250adb3ca554bdde269adf631549f51d8a8f8f0a10b50f1cb298c3" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.28" +version = "0.8.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c640b22cd9817fae95be82f0d2f90b11f7605f6c319d16705c459b27ac2cbc26" +checksum = "d8a8d209fdf45cf5138cbb5a506f6b52522a25afccc534d1475dad8e31105c6a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -9982,7 +9760,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", "synstructure", ] @@ -10003,7 +9781,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -10036,9 +9814,15 @@ checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] +[[package]] +name = "zmij" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0095ecd462946aa3927d9297b63ef82fb9a5316d7a37d134eeb36e58228615a" + [[package]] name = "zune-core" version = "0.4.12" @@ -10071,9 +9855,9 @@ dependencies = [ [[package]] name = "zune-jpeg" -version = "0.5.5" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc6fb7703e32e9a07fb3f757360338b3a567a5054f21b5f52a666752e333d58e" +checksum = "e35aee689668bf9bd6f6f3a6c60bb29ba1244b3b43adfd50edd554a371da37d5" dependencies = [ "zune-core 0.5.0", ] @@ -10102,7 +9886,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", "zvariant_utils", ] @@ -10115,6 +9899,6 @@ dependencies = [ "proc-macro2", "quote", "serde", - "syn 2.0.110", + "syn 2.0.111", "winnow", ] diff --git a/Cargo.toml b/Cargo.toml index 73c9b03..73eb071 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,14 +13,15 @@ members = [ ] [workspace.dependencies] iced = { version = "0.14.0" } -iced_video_player = "0.6" gst = { version = "0.1.0", path = "gst" } iced_wgpu = { version = "0.14.0" } +iced-video = { version = "0.1.0", path = "crates/iced-video" } [patch.crates-io] iced_wgpu = { git = "https://github.com/uttarayan21/iced", branch = "0.14" } iced_core = { git = "https://github.com/uttarayan21/iced", branch = "0.14" } iced_renderer = { git = "https://github.com/uttarayan21/iced", branch = "0.14" } +iced_futures = { git = "https://github.com/uttarayan21/iced", branch = "0.14" } iced = { git = "https://github.com/uttarayan21/iced", branch = "0.14" } [package] diff --git a/crates/iced-video/Cargo.toml b/crates/iced-video/Cargo.toml index 826782a..2e37a32 100644 --- a/crates/iced-video/Cargo.toml +++ b/crates/iced-video/Cargo.toml @@ -5,6 +5,7 @@ edition = "2024" [dependencies] error-stack = "0.6.0" +futures-lite = "2.6.1" gst.workspace = true iced_core = "0.14.0" iced_futures = "0.14.0" diff --git a/crates/iced-video/examples/minimal.rs b/crates/iced-video/examples/minimal.rs index e300342..561d32b 100644 --- a/crates/iced-video/examples/minimal.rs +++ b/crates/iced-video/examples/minimal.rs @@ -11,87 +11,151 @@ pub fn main() -> iced::Result { .with(tracing_subscriber::EnvFilter::from_default_env()) .init(); iced::application(State::new, update, view) - .subscription(keyboard_event) + .subscription(|state| match &state.video { + Some(video) => video.subscription_with(state, keyboard_event), + None => keyboard_event(state), + }) .run() } -fn keyboard_event(state: &State) -> iced::Subscription { +fn keyboard_event(_state: &State) -> iced::Subscription { use iced::keyboard::{Key, key::Named}; iced::keyboard::listen().map(move |event| match event { iced::keyboard::Event::KeyPressed { key, .. } => { let key = key.as_ref(); match key { Key::Named(Named::Escape) | Key::Character("q") => Message::Quit, + Key::Character("f") => Message::Fullscreen, Key::Named(Named::Space) => Message::Toggle, - _ => Message::Load, + _ => Message::Noop, } - // if key == &space { - // // Toggle play/pause - // let is_playing = state - // .video - // .source() - // .is_playing() - // .expect("Failed to get playing state"); - // if is_playing { - // Message::Pause - // } else { - // Message::Play - // } - // } } - _ => Message::Load, + _ => Message::Noop, }) } #[derive(Debug, Clone)] pub struct State { - video: VideoHandle, + video: Option>, + fullscreen: bool, } impl State { - pub fn new() -> Self { - let video = VideoHandle::new("https://jellyfin.tsuba.darksailor.dev/Items/6010382cf25273e624d305907010d773/Download?api_key=036c140222464878862231ef66a2bc9c") - .expect("Failed to create video handle"); - Self { video } + pub fn new() -> (Self, iced::Task) { + ( + Self { + video: None, + fullscreen: false, + }, + iced::Task::done(Message::Load), + ) } } -#[derive(Debug, Clone, Copy)] +#[derive(Debug, Clone)] pub enum Message { Play, Pause, Toggle, + Noop, Load, + Fullscreen, + OnLoad(VideoHandle), + OnError(String), + NewFrame, + Eos, Quit, } pub fn update(state: &mut State, message: Message) -> iced::Task { match message { - Message::Load => { - // does stuff + Message::NewFrame => { iced::Task::none() } + Message::Eos => { + iced::Task::done(Message::Pause) + } + Message::Load => { + iced::Task::perform( + VideoHandle::load( + "https://jellyfin.tsuba.darksailor.dev/Items/6010382cf25273e624d305907010d773/Download?api_key=036c140222464878862231ef66a2bc9c", + ), + |result| match result { + Ok(video) => Message::OnLoad(video), + Err(err) => Message::OnError(format!("Error loading video: {:?}", err)), + }, + ).chain(iced::Task::done(Message::Play)) + } + Message::OnError(err) => { + eprintln!("Error: {}", err); + iced::Task::none() + } + Message::OnLoad(video) => { + state.video = Some(video.on_new_frame(Message::NewFrame).on_end_of_stream(Message::Eos)); + iced::Task::none() + } + Message::Fullscreen => { + state.fullscreen = !state.fullscreen; + let fullscreen = state.fullscreen; + let mode = if fullscreen { + iced::window::Mode::Fullscreen + } else { + iced::window::Mode::Windowed + }; + iced::window::oldest().and_then(move |id| iced::window::set_mode::(id, mode)) + } Message::Play => { - state.video.source().play().expect("Failed to play video"); + state + .video + .as_ref() + .unwrap() + .source() + .play() + .expect("Failed to play video"); iced::Task::none() } Message::Pause => { - state.video.source().pause().expect("Failed to pause video"); + state + .video + .as_ref() + .unwrap() + .source() + .pause() + .expect("Failed to pause video"); iced::Task::none() } Message::Toggle => { - state.video.source().toggle().expect("Failed to stop video"); + state + .video + .as_ref() + .unwrap() + .source() + .toggle() + .expect("Failed to stop video"); iced::Task::none() } Message::Quit => { - state.video.source().stop().expect("Failed to stop video"); + state + .video + .as_ref() + .unwrap() + .source() + .stop() + .expect("Failed to stop video"); std::process::exit(0); } + Message::Noop => iced::Task::none(), } } pub fn view<'a>(state: &'a State) -> iced::Element<'a, Message> { - let video_widget = Video::new(&state.video) + if let None = &state.video { + return iced::widget::Column::new() + .push(iced::widget::Text::new("Press any key to load video")) + .align_x(iced::Alignment::Center) + .into(); + } + let video_widget = Video::new(&state.video.as_ref().unwrap()) .width(iced::Length::Fill) .height(iced::Length::Fill) .content_fit(iced::ContentFit::Contain); diff --git a/crates/iced-video/justfile b/crates/iced-video/justfile new file mode 100644 index 0000000..68398f2 --- /dev/null +++ b/crates/iced-video/justfile @@ -0,0 +1,8 @@ +info: + RUST_LOG=info,wgpu_core=warn,wgpu_hal=warn cargo run --release --example minimal + # GST_DEBUG=5 RUST_LOG="" cargo run --release --example minimal +flame: + cargo flamegraph run --release --example minimal +heaptrack: + cargo build --release --example minimal + RUST_LOG="info,wgpu_hal=info" heaptrack $CARGO_TARGET_DIR/release/examples/minimal diff --git a/crates/iced-video/src/lib.rs b/crates/iced-video/src/lib.rs index 153b1ca..bef9091 100644 --- a/crates/iced-video/src/lib.rs +++ b/crates/iced-video/src/lib.rs @@ -1,13 +1,10 @@ pub mod id; pub mod primitive; pub mod source; -use iced_core as iced; -use iced_renderer::Renderer as RendererWithFallback; -use iced_wgpu::primitive::Renderer as PrimitiveRenderer; +pub mod widget; +pub use widget::Video; use error_stack::{Report, ResultExt}; -use iced::Length; -use std::marker::PhantomData; use gst::plugins::app::AppSink; use gst::plugins::playback::Playbin3; @@ -23,16 +20,16 @@ use std::sync::{Arc, Mutex, atomic::AtomicBool}; /// This is the video handle that is used to control the video playback. /// This should be keps in the application state. #[derive(Debug, Clone)] -pub struct VideoHandle { +pub struct VideoHandle { id: id::Id, - source: source::VideoSource, - is_metadata_loaded: Arc, - is_playing: Arc, - is_eos: Arc, + pub source: source::VideoSource, frame_ready: Arc, + on_new_frame: Option>, + on_end_of_stream: Option>, + on_about_to_finish: Option>, } -impl VideoHandle { +impl VideoHandle { pub fn id(&self) -> &id::Id { &self.id } @@ -47,206 +44,75 @@ impl VideoHandle { Ok(Self { id: id::Id::unique(), source: source, - is_metadata_loaded: Arc::new(AtomicBool::new(false)), - is_playing: Arc::new(AtomicBool::new(false)), - is_eos: Arc::new(AtomicBool::new(false)), + on_new_frame: None, + on_end_of_stream: None, + on_about_to_finish: None, frame_ready, }) } -} -/// This is the Video widget that displays a video. -/// This should be used in the view function. -pub struct Video<'a, Message, Theme = iced::Theme, Renderer = iced_wgpu::Renderer> -where - Renderer: PrimitiveRenderer, -{ - id: id::Id, - handle: &'a VideoHandle, - content_fit: iced::ContentFit, - width: iced::Length, - height: iced::Length, - on_end_of_stream: Option, - on_new_frame: Option, - looping: bool, - // on_subtitle_text: Option) -> Message + 'a>>, - // on_error: Option Message + 'a>>, - // theme: Theme, - __marker: PhantomData<(Renderer, Theme)>, -} - -impl<'a, Message, Theme, Renderer> Video<'a, Message, Theme, Renderer> -where - Renderer: PrimitiveRenderer, -{ - pub fn new(handle: &'a VideoHandle) -> Self { - Self { - id: handle.id.clone(), - handle: &handle, - content_fit: iced::ContentFit::Contain, - width: Length::Shrink, - height: Length::Shrink, - on_end_of_stream: None, - on_new_frame: None, - looping: false, - // theme: Theme::default(), - __marker: PhantomData, - } - } -} - -impl<'a, Message, Theme, Renderer> Video<'a, Message, Theme, Renderer> -where - Renderer: PrimitiveRenderer, -{ - pub fn width(mut self, width: Length) -> Self { - self.width = width; - self + pub async fn wait(self) -> Result { + self.source.wait().await?; + Ok(self) } - pub fn height(mut self, height: Length) -> Self { - self.height = height; - self + pub fn subscription(&self) -> iced_futures::subscription::Subscription { + let sub = widget::VideoSubscription { + id: self.id.clone(), + on_end_of_stream: self.on_end_of_stream.clone(), + on_new_frame: self.on_new_frame.clone(), + on_about_to_finish: self.on_about_to_finish.clone(), + bus: self.source.bus.clone(), + }; + iced_futures::subscription::from_recipe(sub) } - pub fn content_fit(mut self, fit: iced::ContentFit) -> Self { - self.content_fit = fit; - self - } - - pub fn on_end_of_stream(mut self, message: Message) -> Self { - self.on_end_of_stream = Some(message); - self - } - - pub fn on_new_frame(mut self, message: Message) -> Self { - self.on_new_frame = Some(message); - self - } - - pub fn looping(mut self, looping: bool) -> Self { - self.looping = looping; - self - } -} - -impl iced::Widget - for Video<'_, Message, Theme, Renderer> -where - Message: Clone, - Renderer: PrimitiveRenderer, -{ - fn size(&self) -> iced::Size { - iced::Size { - width: self.width, - height: self.height, - } - } - - // The video player should take max space by default - fn layout( - &mut self, - _tree: &mut iced::widget::Tree, - _renderer: &Renderer, - limits: &iced::layout::Limits, - ) -> iced::layout::Node { - iced::layout::Node::new(limits.max()) - } - - fn draw( + pub fn subscription_with( &self, - tree: &iced::widget::Tree, - renderer: &mut Renderer, - theme: &Theme, - style: &iced::renderer::Style, - layout: iced::Layout<'_>, - cursor: iced::mouse::Cursor, - viewport: &iced::Rectangle, - ) { - if let Ok((width, height)) = self.handle.source.size() { - let video_size = iced::Size { - width: width as f32, - height: height as f32, - }; - let bounds = layout.bounds(); - let adjusted_fit = self.content_fit.fit(video_size, bounds.size()); - let scale = iced::Vector::new( - adjusted_fit.width / video_size.width, - adjusted_fit.height / video_size.height, - ); - let final_size = video_size * scale; - let position = match self.content_fit { - iced::ContentFit::None => iced::Point::new( - bounds.x + (video_size.width - adjusted_fit.width) / 2.0, - bounds.y + (video_size.height - adjusted_fit.height) / 2.0, - ), - _ => iced::Point::new( - bounds.center_x() - final_size.width / 2.0, - bounds.center_y() - final_size.height / 2.0, - ), - }; + state: &State, + f: impl FnOnce(&State) -> iced_futures::subscription::Subscription + 'static, + ) -> iced_futures::subscription::Subscription + where + State: Send + Sync + 'static, + { + let sub = self.subscription(); + iced_futures::subscription::Subscription::batch([sub, f(state)]) + } - let drawing_bounds = iced::Rectangle::new(position, final_size); - - let render = |renderer: &mut Renderer| { - renderer.draw_primitive( - drawing_bounds, - primitive::VideoFrame { - id: self.id.clone(), - size: iced_wgpu::wgpu::Extent3d { - width: width as u32, - height: height as u32, - depth_or_array_layers: 1, - }, - ready: Arc::clone(&self.handle.frame_ready), - frame: Arc::clone(&self.handle.source.frame), - }, - ); - }; - - if adjusted_fit.width > bounds.width || adjusted_fit.height > bounds.height { - renderer.with_layer(bounds, render); - } else { - render(renderer); - } + pub fn on_new_frame(self, message: Message) -> Self { + Self { + on_new_frame: Some(Box::new(message)), + ..self } } - fn update( - &mut self, - _tree: &mut iced_core::widget::Tree, - event: &iced::Event, - _layout: iced_core::Layout<'_>, - _cursor: iced_core::mouse::Cursor, - _renderer: &Renderer, - _clipboard: &mut dyn iced_core::Clipboard, - shell: &mut iced_core::Shell<'_, Message>, - _viewport: &iced::Rectangle, - ) { - if let iced::Event::Window(iced::window::Event::RedrawRequested(_)) = event { - if self - .handle - .frame_ready - .load(std::sync::atomic::Ordering::SeqCst) - { - shell.request_redraw(); - } else { - shell.request_redraw_at(iced::window::RedrawRequest::At( - iced_core::time::Instant::now() + core::time::Duration::from_millis(32), - )); - } + pub fn on_end_of_stream(self, message: Message) -> Self { + Self { + on_end_of_stream: Some(Box::new(message)), + ..self } } -} -impl<'a, Message, Theme, Renderer> From> - for iced::Element<'a, Message, Theme, Renderer> -where - Message: 'a + Clone, - Theme: 'a, - Renderer: 'a + iced_wgpu::primitive::Renderer, -{ - fn from(video: Video<'a, Message, Theme, Renderer>) -> Self { - Self::new(video) + pub fn on_about_to_finish(self, message: Message) -> Self { + Self { + on_about_to_finish: Some(Box::new(message)), + ..self + } + } + + pub fn play(&self) { + self.source.play(); + } + pub fn pause(&self) { + self.source.pause(); + } + pub fn stop(&self) { + self.source.stop(); + } + + /// Creates a new video handle and waits for the metadata to be loaded. + pub async fn load(url: impl AsRef) -> Result { + let handle = Self::new(url)?; + handle.wait().await } } diff --git a/crates/iced-video/src/primitive.rs b/crates/iced-video/src/primitive.rs index b1bfd7b..70d01da 100644 --- a/crates/iced-video/src/primitive.rs +++ b/crates/iced-video/src/primitive.rs @@ -105,7 +105,22 @@ impl iced_wgpu::Primitive for VideoFrame { let data = buffer .map_readable() .expect("BUG: Failed to map gst::Buffer readable"); - queue.write_buffer(&video.buffer, 0, &data); + // queue.write_buffer(&video.buffer, 0, &data); + queue.write_texture( + wgpu::TexelCopyTextureInfo { + texture: &video.texture, + mip_level: 0, + origin: wgpu::Origin3d::ZERO, + aspect: wgpu::TextureAspect::All, + }, + &data, + wgpu::TexelCopyBufferLayout { + offset: 0, + bytes_per_row: Some(4 * self.size.width), + rows_per_image: Some(self.size.height), + }, + self.size, + ); drop(data); video .ready @@ -118,29 +133,29 @@ impl iced_wgpu::Primitive for VideoFrame { pipeline: &Self::Pipeline, encoder: &mut wgpu::CommandEncoder, target: &wgpu::TextureView, - _clip_bounds: &iced_wgpu::core::Rectangle, + bounds: &iced_wgpu::core::Rectangle, ) { let Some(video) = pipeline.videos.get(&self.id) else { return; }; - encoder.copy_buffer_to_texture( - wgpu::TexelCopyBufferInfo { - buffer: &video.buffer, - layout: wgpu::TexelCopyBufferLayout { - offset: 0, - bytes_per_row: Some(4 * self.size.width), - rows_per_image: Some(self.size.height), - }, - }, - wgpu::TexelCopyTextureInfo { - texture: &video.texture, - mip_level: 0, - origin: wgpu::Origin3d::ZERO, - aspect: wgpu::TextureAspect::All, - }, - self.size, - ); + // encoder.copy_buffer_to_texture( + // wgpu::TexelCopyBufferInfo { + // buffer: &video.buffer, + // layout: wgpu::TexelCopyBufferLayout { + // offset: 0, + // bytes_per_row: Some(4 * self.size.width), + // rows_per_image: Some(self.size.height), + // }, + // }, + // wgpu::TexelCopyTextureInfo { + // texture: &video.texture, + // mip_level: 0, + // origin: wgpu::Origin3d::ZERO, + // aspect: wgpu::TextureAspect::All, + // }, + // self.size, + // ); let mut render_pass = encoder.begin_render_pass(&wgpu::RenderPassDescriptor { label: Some("iced-video-render-pass"), color_attachments: &[Some(wgpu::RenderPassColorAttachment { @@ -159,6 +174,12 @@ impl iced_wgpu::Primitive for VideoFrame { render_pass.set_pipeline(&pipeline.pipeline); render_pass.set_bind_group(0, &video.bind_group, &[]); + render_pass.set_scissor_rect( + bounds.x as _, + bounds.y as _, + bounds.width as _, + bounds.height as _, + ); render_pass.draw(0..3, 0..1); // self.ready // .store(false, std::sync::atomic::Ordering::Relaxed); diff --git a/crates/iced-video/src/source.rs b/crates/iced-video/src/source.rs index c9e69e0..598a8bb 100644 --- a/crates/iced-video/src/source.rs +++ b/crates/iced-video/src/source.rs @@ -18,6 +18,7 @@ pub struct VideoSource { pub(crate) bus: Bus, pub(crate) ready: Arc, pub(crate) frame: Arc>, + pub(crate) size: std::sync::OnceLock<(i32, i32)>, } impl VideoSource { @@ -79,15 +80,17 @@ impl VideoSource { bus, ready, frame, + size: std::sync::OnceLock::new(), }) } - pub async fn wait(self) -> Result<()> { + pub async fn wait(&self) -> Result<()> { self.playbin .wait_for_states(&[gst::State::Paused, gst::State::Playing]) .await .change_context(Error) - .attach("Failed to wait for video initialisation") + .attach("Failed to wait for video initialisation")?; + Ok(()) } pub fn is_playing(&self) -> Result { @@ -126,14 +129,20 @@ impl VideoSource { } pub fn size(&self) -> Result<(i32, i32)> { + if let Some(size) = self.size.get() { + return Ok(*size); + } let caps = self .appsink .sink("sink") .current_caps() .change_context(Error)?; - caps.width() + let out = caps + .width() .and_then(|width| caps.height().map(|height| (width, height))) .ok_or(Error) - .attach("Failed to get width, height") + .attach("Failed to get width, height")?; + self.size.set(out); + Ok(out) } } diff --git a/crates/iced-video/src/widget.rs b/crates/iced-video/src/widget.rs new file mode 100644 index 0000000..c91630c --- /dev/null +++ b/crates/iced-video/src/widget.rs @@ -0,0 +1,253 @@ +use super::*; +use iced::Length; +use iced_core as iced; +use iced_wgpu::primitive::Renderer as PrimitiveRenderer; +use std::marker::PhantomData; +/// This is the Video widget that displays a video. +/// This should be used in the view function. +pub struct Video<'a, Message, Theme = iced::Theme, Renderer = iced_wgpu::Renderer> +where + Renderer: PrimitiveRenderer, +{ + id: id::Id, + handle: &'a VideoHandle, + content_fit: iced::ContentFit, + width: iced::Length, + height: iced::Length, + looping: bool, + __marker: PhantomData<(Renderer, Theme)>, +} + +impl<'a, Message, Theme, Renderer> Video<'a, Message, Theme, Renderer> +where + Renderer: PrimitiveRenderer, + Message: Clone, +{ + pub fn new(handle: &'a VideoHandle) -> Self { + Self { + id: handle.id.clone(), + handle: &handle, + content_fit: iced::ContentFit::Contain, + width: Length::Shrink, + height: Length::Shrink, + looping: false, + __marker: PhantomData, + } + } +} + +impl<'a, Message, Theme, Renderer> Video<'a, Message, Theme, Renderer> +where + Renderer: PrimitiveRenderer, +{ + pub fn width(mut self, width: Length) -> Self { + self.width = width; + self + } + + pub fn height(mut self, height: Length) -> Self { + self.height = height; + self + } + + pub fn content_fit(mut self, fit: iced::ContentFit) -> Self { + self.content_fit = fit; + self + } + + // pub fn on_end_of_stream(mut self, message: Message) -> Self { + // self.on_end_of_stream = Some(message); + // self + // } + // + // pub fn on_new_frame(mut self, message: Message) -> Self { + // self.on_new_frame = Some(message); + // self + // } + + pub fn looping(mut self, looping: bool) -> Self { + self.looping = looping; + self + } +} + +impl iced::Widget + for Video<'_, Message, Theme, Renderer> +where + Message: Clone, + Renderer: PrimitiveRenderer, +{ + fn size(&self) -> iced::Size { + iced::Size { + width: self.width, + height: self.height, + } + } + + // The video player should take max space by default + fn layout( + &mut self, + _tree: &mut iced::widget::Tree, + _renderer: &Renderer, + limits: &iced::layout::Limits, + ) -> iced::layout::Node { + iced::layout::Node::new(limits.max()) + } + + fn draw( + &self, + tree: &iced::widget::Tree, + renderer: &mut Renderer, + theme: &Theme, + style: &iced::renderer::Style, + layout: iced::Layout<'_>, + cursor: iced::mouse::Cursor, + viewport: &iced::Rectangle, + ) { + if let Ok((width, height)) = self.handle.source.size() { + let video_size = iced::Size { + width: width as f32, + height: height as f32, + }; + let bounds = layout.bounds(); + let adjusted_fit = self.content_fit.fit(video_size, bounds.size()); + let scale = iced::Vector::new( + adjusted_fit.width / video_size.width, + adjusted_fit.height / video_size.height, + ); + let final_size = video_size * scale; + let position = match self.content_fit { + iced::ContentFit::None => iced::Point::new( + bounds.x + (video_size.width - adjusted_fit.width) / 2.0, + bounds.y + (video_size.height - adjusted_fit.height) / 2.0, + ), + _ => iced::Point::new( + bounds.center_x() - final_size.width / 2.0, + bounds.center_y() - final_size.height / 2.0, + ), + }; + + let drawing_bounds = iced::Rectangle::new(position, final_size); + + let render = |renderer: &mut Renderer| { + renderer.draw_primitive( + drawing_bounds, + primitive::VideoFrame { + id: self.id.clone(), + size: iced_wgpu::wgpu::Extent3d { + width: width as u32, + height: height as u32, + depth_or_array_layers: 1, + }, + ready: Arc::clone(&self.handle.frame_ready), + frame: Arc::clone(&self.handle.source.frame), + }, + ); + }; + + if adjusted_fit.width > bounds.width || adjusted_fit.height > bounds.height { + renderer.with_layer(bounds, render); + } else { + render(renderer); + } + } + } + + fn update( + &mut self, + _tree: &mut iced_core::widget::Tree, + event: &iced::Event, + _layout: iced_core::Layout<'_>, + _cursor: iced_core::mouse::Cursor, + _renderer: &Renderer, + _clipboard: &mut dyn iced_core::Clipboard, + shell: &mut iced_core::Shell<'_, Message>, + _viewport: &iced::Rectangle, + ) { + if let iced::Event::Window(iced::window::Event::RedrawRequested(when)) = event { + if self + .handle + .frame_ready + .load(std::sync::atomic::Ordering::SeqCst) + { + shell.request_redraw(); + } else { + shell.request_redraw_at(iced::window::RedrawRequest::At( + iced_core::time::Instant::now() + core::time::Duration::from_millis(16) + - when.elapsed(), + )); + } + } + } +} + +impl<'a, Message, Theme, Renderer> From> + for iced::Element<'a, Message, Theme, Renderer> +where + Message: 'a + Clone, + Theme: 'a, + Renderer: 'a + iced_wgpu::primitive::Renderer, +{ + fn from(video: Video<'a, Message, Theme, Renderer>) -> Self { + Self::new(video) + } +} + +#[derive(Debug, Clone)] +pub struct VideoSubscription { + pub(crate) id: id::Id, + pub(crate) on_end_of_stream: Option>, + pub(crate) on_new_frame: Option>, + pub(crate) on_about_to_finish: Option>, + // on_subtitle_text: Option) -> Message>>, + // on_error: Option Message>>, + pub(crate) bus: gst::Bus, +} + +impl VideoSubscription where Message: Clone {} + +impl iced_futures::subscription::Recipe for VideoSubscription +where + Message: Clone + Send + Sync + 'static, +{ + type Output = Message; + fn hash(&self, state: &mut iced_futures::subscription::Hasher) { + use std::hash::Hash; + + self.id.hash(state); + } + + fn stream( + self: Box, + _input: core::pin::Pin< + Box + Send>, + >, + ) -> core::pin::Pin + Send>> { + // use iced_futures::futures::StreamExt; + use futures_lite::stream::StreamExt; + Box::pin( + self.bus + .filtered_stream(&[gst::MessageType::Eos, gst::MessageType::Element]) + .filter_map({ + let eos = self.on_end_of_stream.clone(); + let frame = self.on_new_frame.clone(); + move |message: gst::Message| match message.view() { + gst::MessageView::Eos(_) => eos.clone().map(|m| *m), + gst::MessageView::Element(element_msg) => { + let structure = element_msg.structure(); + if let Some(structure) = structure { + if structure.name() == "GstVideoFrameReady" { + frame.clone().map(|m| *m) + } else { + None + } + } else { + None + } + } + _ => None, + } + }), + ) + } +} diff --git a/examples/hdr-gstreamer-wgpu/Cargo.toml b/examples/hdr-gstreamer-wgpu/Cargo.toml index 639204d..a317703 100644 --- a/examples/hdr-gstreamer-wgpu/Cargo.toml +++ b/examples/hdr-gstreamer-wgpu/Cargo.toml @@ -5,7 +5,7 @@ edition = "2024" [dependencies] # gst = { workspace = true } -wgpu = "*" +wgpu = "27" gstreamer = { version = "0.24.4", features = ["v1_26"] } gstreamer-app = { version = "0.24.4", features = ["v1_26"] } gstreamer-base = { version = "0.24.4", features = ["v1_26"] } diff --git a/ui-iced/Cargo.toml b/ui-iced/Cargo.toml index aafeb80..08a9cb9 100644 --- a/ui-iced/Cargo.toml +++ b/ui-iced/Cargo.toml @@ -19,7 +19,7 @@ iced = { workspace = true, default-features = true, features = [ ] } -iced_video_player = { workspace = true } +iced-video = { workspace = true } iced_wgpu = "0.14.0" iced_winit = "0.14.0" reqwest = "0.12.24" diff --git a/ui-iced/src/lib.rs b/ui-iced/src/lib.rs index ebb8a44..c0acaca 100644 --- a/ui-iced/src/lib.rs +++ b/ui-iced/src/lib.rs @@ -2,7 +2,7 @@ mod settings; mod video; mod shared_string; -use iced_video_player::{Video, VideoPlayer}; +use iced_video::{Video, VideoHandle}; use shared_string::SharedString; use std::sync::Arc; @@ -140,7 +140,7 @@ struct State { screen: Screen, settings: settings::SettingsState, is_authenticated: bool, - video: Option>, + video: Option>, } impl State { diff --git a/ui-iced/src/video.rs b/ui-iced/src/video.rs index 82e26b6..8374c4a 100644 --- a/ui-iced/src/video.rs +++ b/ui-iced/src/video.rs @@ -3,6 +3,7 @@ use super::*; pub enum VideoMessage { EndOfStream, Open(url::Url), + Loaded(VideoHandle), Pause, Play, Seek(f64), @@ -17,34 +18,24 @@ pub fn update(state: &mut State, message: VideoMessage) -> Task { Task::none() } VideoMessage::Open(url) => { - match Video::new(&url) - .inspect_err(|err| { - tracing::error!("Failed to play video at {}: {:?}", url, err); - }) - .inspect(|video| { - tracing::error!("Framerate is {}", video.framerate()); - }) - .map(Arc::new) - { - Ok(video) => { - state.video = Some(video); - Task::none() - } - Err(err) => Task::done(Message::Error(format!( - "Error opening video at {}: {:?}", - url, err - ))), - } + Task::perform(VideoHandle::load(url.clone()), move |result| match result { + Ok(video) => Message::Video(VideoMessage::Loaded(video)), + Err(err) => Message::Error(format!("Error opening video at {}: {:?}", url, err)), + }) + } + VideoMessage::Loaded(video) => { + state.video = Some(Arc::new(video)); + Task::done(VideoMessage::Play).map(Message::Video) } VideoMessage::Pause => { - if let Some(video) = state.video.as_mut().and_then(Arc::get_mut) { - video.set_paused(true); + if let Some(ref video) = state.video { + video.pause(); } Task::none() } VideoMessage::Play => { - if let Some(video) = state.video.as_mut().and_then(Arc::get_mut) { - video.set_paused(false); + if let Some(ref video) = state.video { + video.play(); } Task::none() } @@ -55,24 +46,25 @@ pub fn update(state: &mut State, message: VideoMessage) -> Task { Task::none() } VideoMessage::Stop => { + state.video.as_ref().map(|video| { + video.stop(); + }); state.video = None; Task::none() } VideoMessage::Test => { let url = url::Url::parse( - // "file:///home/servius/Projects/jello/crates/iced_video_player/.media/test.mp4", "https://gstreamer.freedesktop.org/data/media/sintel_trailer-480p.webm", - // "https://www.youtube.com/watch?v=QbUUaXGA3C4", ) .expect("Impossible: Failed to parse hardcoded URL"); - Task::done(Message::Video(VideoMessage::Open(url))) + Task::done(VideoMessage::Open(url)).map(Message::Video) } } } -pub fn player(video: &Video) -> Element<'_, Message> { +pub fn player(video: &VideoHandle) -> Element<'_, Message> { container( - VideoPlayer::new(video) + Video::new(video) .width(Length::Fill) .height(Length::Fill) .content_fit(iced::ContentFit::Contain)