diff --git a/Cargo.lock b/Cargo.lock index 7d30ec2..a250c85 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -466,9 +466,9 @@ checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" [[package]] name = "cfg-expr" -version = "0.15.7" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa50868b64a9a6fda9d593ce778849ea8715cd2a3d2cc17ffdb4a2f2f2f1961d" +checksum = "d0890061c4d3223e7267f3bad2ec40b997d64faac1c2815a4a9d95018e2b9e9c" dependencies = [ "smallvec", "target-lexicon", @@ -1280,9 +1280,9 @@ dependencies = [ [[package]] name = "gio-sys" -version = "0.19.0" +version = "0.20.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcf8e1d9219bb294636753d307b030c1e8a032062cba74f493c431a5c8b81ce4" +checksum = "4f7efc368de04755344f0084104835b6bb71df2c1d41e37d863947392a894779" dependencies = [ "glib-sys", "gobject-sys", @@ -1310,9 +1310,9 @@ checksum = "151665d9be52f9bb40fc7966565d39666f2d1e69233571b71b87791c7e0528b3" [[package]] name = "glib" -version = "0.19.2" +version = "0.20.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab9e86540b5d8402e905ad4ce7d6aa544092131ab564f3102175af176b90a053" +checksum = "adcf1ec6d3650bf9fdbc6cee242d4fcebc6f6bfd9bea5b929b6a8b7344eb85ff" dependencies = [ "bitflags 2.6.0", "futures-channel", @@ -1327,14 +1327,13 @@ dependencies = [ "libc", "memchr", "smallvec", - "thiserror", ] [[package]] name = "glib-macros" -version = "0.19.2" +version = "0.20.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f5897ca27a83e4cdc7b4666850bade0a2e73e17689aabafcc9acddad9d823b8" +checksum = "a6bf88f70cd5720a6197639dcabcb378dd528d0cb68cb1f45e3b358bcb841cd7" dependencies = [ "heck", "proc-macro-crate", @@ -1345,9 +1344,9 @@ dependencies = [ [[package]] name = "glib-sys" -version = "0.19.0" +version = "0.20.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "630f097773d7c7a0bb3258df4e8157b47dc98bbfa0e60ad9ab56174813feced4" +checksum = "5f9eca5d88cfa6a453b00d203287c34a2b7cac3a7831779aa2bb0b3c7233752b" dependencies = [ "libc", "system-deps", @@ -1376,9 +1375,9 @@ dependencies = [ [[package]] name = "gobject-sys" -version = "0.19.0" +version = "0.20.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c85e2b1080b9418dd0c58b498da3a5c826030343e0ef07bde6a955d28de54979" +checksum = "a4c674d2ff8478cf0ec29d2be730ed779fef54415a2fb4b565c52def62696462" dependencies = [ "glib-sys", "libc", @@ -1439,9 +1438,9 @@ dependencies = [ [[package]] name = "gstreamer" -version = "0.22.1" +version = "0.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6948444004e5ddf3d735d9a3e9968948675c6bceb7f4b56e9dc12d2ff4440c1" +checksum = "49ecf3bcfc2ceb82ce02437f53ff2fcaee5e7d45ae697ab64a018408749779b9" dependencies = [ "cfg-if", "futures-channel", @@ -1464,9 +1463,9 @@ dependencies = [ [[package]] name = "gstreamer-app" -version = "0.22.0" +version = "0.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50184e88d3462a796a5924fb329839c102b22f9383c1636323fa4ef5255dea92" +checksum = "54a4ec9f0d2037349c82f589c1cbfe788a62f4941851924bb7c3929a6a790007" dependencies = [ "futures-core", "futures-sink", @@ -1479,9 +1478,9 @@ dependencies = [ [[package]] name = "gstreamer-app-sys" -version = "0.22.0" +version = "0.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6771c0939f286fb261525494a0aad29435b37e802284756bab24afe3bbca7476" +checksum = "08d5cac633c1ab7030c777c8c58c682a0c763bbc4127bccc370dabe39c01a12d" dependencies = [ "glib-sys", "gstreamer-base-sys", @@ -1492,9 +1491,9 @@ dependencies = [ [[package]] name = "gstreamer-base" -version = "0.22.0" +version = "0.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "514c71195b53c7eced4842b66ca9149833e41cf6a1d949e45e2ca4a4fa929850" +checksum = "46ce7330d2995138a77192ea20961422ddee1578e1a47480acb820c43ceb0e2d" dependencies = [ "atomic_refcell", "cfg-if", @@ -1506,9 +1505,9 @@ dependencies = [ [[package]] name = "gstreamer-base-sys" -version = "0.22.0" +version = "0.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "286591e0f85bbda1adf9bab6f21d015acd9ca0a4d4acb61da65e3d0487e23c4e" +checksum = "7796e694c21c215447811c9cff694dce1fc6e02b0bbafb75cd8583b6aefe9e5f" dependencies = [ "glib-sys", "gobject-sys", @@ -1519,9 +1518,9 @@ dependencies = [ [[package]] name = "gstreamer-sys" -version = "0.22.1" +version = "0.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f62af07f6958a82eee1969beac63c1b0dc2d2a4a2594fe62fed147906cdf9664" +checksum = "cb3859929db32f26a35818d0d9ed82f0887c9221ca402ddefaea2bb99833d535" dependencies = [ "glib-sys", "gobject-sys", @@ -1585,9 +1584,9 @@ dependencies = [ [[package]] name = "heck" -version = "0.4.1" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "hermit-abi" @@ -1902,9 +1901,9 @@ dependencies = [ [[package]] name = "itertools" -version = "0.12.1" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" dependencies = [ "either", ] @@ -3370,9 +3369,9 @@ dependencies = [ [[package]] name = "system-deps" -version = "6.2.0" +version = "7.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a2d580ff6a20c55dfb86be5f9c238f67835d0e81cbdea8bf5680e0897320331" +checksum = "66d23aaf9f331227789a99e8de4c91bf46703add012bdfd45fdecdfb2975a005" dependencies = [ "cfg-expr", "heck", @@ -3383,9 +3382,9 @@ dependencies = [ [[package]] name = "target-lexicon" -version = "0.12.13" +version = "0.12.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69758bda2e78f098e4ccb393021a0963bb3442eac05f135c30f61b7370bbafae" +checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" [[package]] name = "tempfile" @@ -3699,9 +3698,9 @@ dependencies = [ [[package]] name = "version-compare" -version = "0.1.1" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "579a42fc0b8e0c63b76519a339be31bed574929511fa53c1a3acae26eb258f29" +checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b" [[package]] name = "version_check" diff --git a/Cargo.toml b/Cargo.toml index bb6d6bb..861ca80 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,15 +16,15 @@ exclude = [ ] [dependencies] -iced = { version = "0.13", features = ["image", "advanced", "wgpu"] } +iced = { version = "0.13", features = ["image", "advanced", "wgpu"] } iced_native = "0.10" iced_wgpu = "0.13" -gstreamer = "0.22" -gstreamer-app = "0.22" # appsink -gstreamer-base = "0.22" # basesrc -glib = "0.19" # gobject traits and error type +gstreamer = "0.23" +gstreamer-app = "0.23" # appsink +gstreamer-base = "0.23" # basesrc +glib = "0.20" # gobject traits and error type log = "0.4" -thiserror = "1" +thiserror = "1" url = "2" # media uri [package.metadata.nix] diff --git a/src/video.rs b/src/video.rs index 220eb02..8c90a83 100644 --- a/src/video.rs +++ b/src/video.rs @@ -171,7 +171,7 @@ impl Video { pub fn new(uri: &url::Url) -> Result { gst::init()?; - let pipeline = format!("playbin uri=\"{}\" video-sink=\"videoconvert ! videoscale ! appsink name=iced_video caps=video/x-raw,format=NV12\"", uri.as_str()); + let pipeline = format!("playbin uri=\"{}\" video-sink=\"videoscale ! videoconvert ! appsink name=iced_video caps=video/x-raw,format=NV12,pixel-aspect-ratio=1/1\"", uri.as_str()); let pipeline = gst::parse::launch(pipeline.as_ref())? .downcast::() .map_err(|_| Error::Cast)?; @@ -213,6 +213,9 @@ impl Video { let s = caps.structure(0).ok_or(Error::Caps)?; let width = s.get::("width").map_err(|_| Error::Caps)?; let height = s.get::("height").map_err(|_| Error::Caps)?; + // resolution should be mod4 + let width = ((width + 4 - 1) / 4) * 4; + let height = ((height + 4 - 1) / 4) * 4; let framerate = s .get::("framerate") .map_err(|_| Error::Caps)?;