diff --git a/Cargo.lock b/Cargo.lock index 3535e94..bd40820 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -26,9 +26,9 @@ checksum = "15af2628f6890fe2609a3b91bef4c83450512802e59489f9c1cb1fa5df064a61" [[package]] name = "array-init" -version = "1.0.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a51c983d65b6691893a791e55aa8bda43bbd9b11f947e5a9581710362277cc95" +checksum = "6945cc5422176fc5e602e590c2878d2c2acd9a4fe20a4baa7c28022521698ec6" [[package]] name = "atty" @@ -97,6 +97,15 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df8670b8c7b9dae1793364eafadf7239c40d669904660c5960d74cfd80b46a53" +[[package]] +name = "cfg-expr" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30aa9e2ffbb838c6b451db14f3cd8e63ed622bf859f9956bc93845a10fafc26a" +dependencies = [ + "smallvec", +] + [[package]] name = "cfg-if" version = "1.0.0" @@ -275,32 +284,31 @@ dependencies = [ [[package]] name = "glib" -version = "0.10.3" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c685013b7515e668f1b57a165b009d4d28cb139a8a989bbd699c10dad29d0c5" +checksum = "f0028bbfd270d0778540294abca11141d59cb474da4c1f61ca1e11f579c49247" dependencies = [ "bitflags", "futures-channel", "futures-core", "futures-executor", "futures-task", - "futures-util", "glib-macros", "glib-sys", "gobject-sys", "libc", "once_cell", + "smallvec", ] [[package]] name = "glib-macros" -version = "0.10.1" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41486a26d1366a8032b160b59065a59fb528530a46a49f627e7048fb8c064039" +checksum = "9eb7bdf41972a6f6dab5d72c23d22789f400059a43ba0d72b4bb2f8664d946a9" dependencies = [ "anyhow", "heck", - "itertools", "proc-macro-crate", "proc-macro-error", "proc-macro2", @@ -310,9 +318,9 @@ dependencies = [ [[package]] name = "glib-sys" -version = "0.10.1" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7e9b997a66e9a23d073f2b1abb4dbfc3925e0b8952f67efd8d9b6e168e4cdc1" +checksum = "1c1d60554a212445e2a858e42a0e48cece1bd57b311a19a9468f70376cf554ae" dependencies = [ "libc", "system-deps", @@ -320,9 +328,9 @@ dependencies = [ [[package]] name = "globset" -version = "0.4.7" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0fc1b9fa0e64ffb1aa5b95daa0f0f167734fd528b7c02eabc581d9d843649b1" +checksum = "10463d9ff00a2a068db14231982f5132edebad0d7660cd956a1c30292dbcbfbd" dependencies = [ "aho-corasick", "bstr", @@ -333,9 +341,9 @@ dependencies = [ [[package]] name = "gobject-sys" -version = "0.10.0" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "952133b60c318a62bf82ee75b93acc7e84028a093e06b9e27981c2b6fe68218c" +checksum = "aa92cae29759dae34ab5921d73fff5ad54b3d794ab842c117e36cafc7994c3f5" dependencies = [ "glib-sys", "libc", @@ -344,9 +352,9 @@ dependencies = [ [[package]] name = "gstreamer" -version = "0.16.7" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ff5d0f7ff308ae37e6eb47b6ded17785bdea06e438a708cd09e0288c1862f33" +checksum = "a2163b09b359d8b651d627d9c83dcce5550929ad678b8ce7ec750787affa93ec" dependencies = [ "bitflags", "cfg-if", @@ -354,11 +362,10 @@ dependencies = [ "futures-core", "futures-util", "glib", - "glib-sys", - "gobject-sys", "gstreamer-sys", "libc", "muldiv", + "num-integer", "num-rational", "once_cell", "paste", @@ -368,29 +375,26 @@ dependencies = [ [[package]] name = "gstreamer-audio" -version = "0.16.7" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2e5de1fdcb26caebd09c99573e4929d76e5e20b7d44aab52587af61c89e6fd2" +checksum = "ba5d560479c5fe704ea9eecdf394cfd514b6628e0c0a4207bb5c1230370d116b" dependencies = [ "array-init", "bitflags", + "cfg-if", "glib", - "glib-sys", - "gobject-sys", "gstreamer", "gstreamer-audio-sys", "gstreamer-base", - "gstreamer-base-sys", - "gstreamer-sys", "libc", "once_cell", ] [[package]] name = "gstreamer-audio-sys" -version = "0.9.1" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b614d5e478ad2ff6f5699757d03f11f2868ea43164c651c60449bd0e3c6b7d75" +checksum = "d066ddfd05f63836f35ac4a5830d5bb2f7f3d6c33c870e9b15c667d20f65d7f6" dependencies = [ "glib-sys", "gobject-sys", @@ -402,25 +406,23 @@ dependencies = [ [[package]] name = "gstreamer-base" -version = "0.16.5" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bafd01c56f59cb10f4b5a10f97bb4bdf8c2b2784ae5b04da7e2d400cf6e6afcf" +checksum = "5cf50118e1933d9e9e043036f2306d0b9660182ea61a75f266cd9fb3607b7a19" dependencies = [ "bitflags", + "cfg-if", "glib", - "glib-sys", - "gobject-sys", "gstreamer", "gstreamer-base-sys", - "gstreamer-sys", "libc", ] [[package]] name = "gstreamer-base-sys" -version = "0.9.1" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4b7b6dc2d6e160a1ae28612f602bd500b3fa474ce90bf6bb2f08072682beef5" +checksum = "28169a7b58edb93ad8ac766f0fa12dcd36a2af4257a97ee10194c7103baf3e27" dependencies = [ "glib-sys", "gobject-sys", @@ -431,9 +433,9 @@ dependencies = [ [[package]] name = "gstreamer-sys" -version = "0.9.1" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc1f154082d01af5718c5f8a8eb4f565a4ea5586ad8833a8fc2c2aa6844b601d" +checksum = "8188ba998999a4a16005c3984812807ff882a87f5f3457c3d5bbbfcbdf631ebd" dependencies = [ "glib-sys", "gobject-sys", @@ -452,9 +454,9 @@ dependencies = [ [[package]] name = "hermit-abi" -version = "0.1.18" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "322f4de77956e22ed0e5032c359a0f1273f1f7f0d79bfa3b8ffbc730d7fbcc5c" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" dependencies = [ "libc", ] @@ -470,9 +472,9 @@ dependencies = [ [[package]] name = "itertools" -version = "0.9.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "284f18f85651fe11e8a991b2adb42cb078325c996ed026d994719efcfca1d54b" +checksum = "69ddb889f9d0d08a67338271fa9b62996bc788c7796a5c18cf057420aaed5eaf" dependencies = [ "either", ] @@ -543,9 +545,9 @@ dependencies = [ [[package]] name = "muldiv" -version = "0.2.1" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0419348c027fa7be448d2ae7ea0e4e04c2334c31dc4e74ab29f00a2a7ca69204" +checksum = "b5136edda114182728ccdedb9f5eda882781f35fa6e80cc360af12a8932507f3" [[package]] name = "ntapi" @@ -568,9 +570,9 @@ dependencies = [ [[package]] name = "num-rational" -version = "0.3.2" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12ac428b1cb17fce6f731001d307d351ec70a6d202fc2e60f7d4c5e42d8f4f07" +checksum = "d41702bd167c2df5520b384281bc111a4b5efcf7fbc4c9c222c815b07e0a6a6a" dependencies = [ "autocfg", "num-integer", @@ -635,9 +637,9 @@ checksum = "acbf547ad0c65e31259204bd90935776d1c693cec2f4ff7abb7a1bbbd40dfe58" [[package]] name = "pin-project-lite" -version = "0.2.6" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc0e1f259c92177c30a4c9d177246edd0a3568b25756a977d0632cf8fa37e905" +checksum = "8d31d11c69a6b52a174b42bdc0c30e5e11670f90788b2c471c31c1d17d449443" [[package]] name = "pin-utils" @@ -659,10 +661,11 @@ checksum = "bc5c99d529f0d30937f6f4b8a86d988047327bb88d04d2c4afc356de74722131" [[package]] name = "proc-macro-crate" -version = "0.1.5" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785" +checksum = "41fdbd1df62156fbc5945f4762632564d7d038153091c3fcf1067f6aef7cff92" dependencies = [ + "thiserror", "toml", ] @@ -833,15 +836,15 @@ checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" [[package]] name = "strum" -version = "0.18.0" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57bd81eb48f4c437cadc685403cad539345bf703d78e63707418431cecd4522b" +checksum = "aaf86bbcfd1fa9670b7a129f64fc0c9fcbbfe4f1bc4210e9e98fe71ffc12cde2" [[package]] name = "strum_macros" -version = "0.18.0" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87c85aa3f8ea653bfd3ddf25f7ee357ee4d204731f6aa9ad04002306f6e2774c" +checksum = "d06aaeeee809dbc59eb4556183dd927df67db1540de5be8d3ec0b6636358a5ec" dependencies = [ "heck", "proc-macro2", @@ -862,11 +865,14 @@ dependencies = [ [[package]] name = "system-deps" -version = "1.3.2" +version = "3.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f3ecc17269a19353b3558b313bba738b25d82993e30d62a18406a24aba4649b" +checksum = "7ab7dbd121ce66af2176147a48c7e01aaf1f001837a18a7cf4317858606bbdf8" dependencies = [ + "anyhow", + "cfg-expr", "heck", + "itertools", "pkg-config", "strum", "strum_macros", @@ -886,18 +892,18 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.25" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa6f76457f59514c7eeb4e59d891395fab0b2fd1d40723ae737d64153392e9c6" +checksum = "93119e4feac1cbe6c798c34d3a53ea0026b0b1de6a120deef895137c0529bfe2" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.25" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a36768c0fbf1bb15eca10defa29526bda730a2376c2ab4393ccfa16fb1a318d" +checksum = "060d69a0afe7796bf42e9e2ff91f5ee691fb15c53d38b4b62a9a53eb23164745" dependencies = [ "proc-macro2", "quote", @@ -906,9 +912,9 @@ dependencies = [ [[package]] name = "tokio" -version = "1.7.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c79ba603c337335df6ba6dd6afc38c38a7d5e1b0c871678439ea973cd62a118e" +checksum = "570c2eb13b3ab38208130eccd41be92520388791207fde783bda7c1e8ace28d4" dependencies = [ "autocfg", "bytes", @@ -952,9 +958,9 @@ dependencies = [ [[package]] name = "unicode-segmentation" -version = "1.7.1" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb0d2e7be6ae3a5fa87eed5fb451aff96f2573d2694942e40543ae0bbe19c796" +checksum = "8895849a949e7845e06bd6dc1aa51731a103c42707010a5b591c0038fb73385b" [[package]] name = "unicode-width" @@ -976,9 +982,9 @@ checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" [[package]] name = "version-compare" -version = "0.0.10" +version = "0.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d63556a25bae6ea31b52e640d7c41d1ab27faba4ccb600013837a3d0b3994ca1" +checksum = "1c18c859eead79d8b95d09e4678566e8d70105c4e7b251f707a03df32442661b" [[package]] name = "version_check" diff --git a/Cargo.toml b/Cargo.toml index e5479d0..0ff5f9b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -21,10 +21,10 @@ include = [ ] [dependencies] -gstreamer-audio = { version = "0.16", features = ["v1_10"] } -gstreamer = { version = "0.16", features = ["v1_10"] } -gstreamer-base = { version = "0.16", features = ["v1_10"] } -glib = "0.10" +gstreamer-audio = { version = "0.17", features = ["v1_10"] } +gstreamer = { version = "0.17", features = ["v1_10"] } +gstreamer-base = { version = "0.17", features = ["v1_10"] } +glib = "0.14" futures = "0.3" num_cpus = "1" walkdir = "2" diff --git a/flake.lock b/flake.lock index 348ccb6..170201d 100644 --- a/flake.lock +++ b/flake.lock @@ -32,11 +32,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1624009501, - "narHash": "sha256-nOI6rHNV1W1vr9ergIQ5P/q4lV3nxRZPTZBBMVxnmqg=", + "lastModified": 1625503609, + "narHash": "sha256-g5uv+BoL+GnT4nnCziiXNuKp0UMWtjNdss5AY/GZBzY=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "0f7a074b9e6bcb744cd7b0985eaadd5ec304f4eb", + "rev": "a00a31df2fe83ccf0a9fb6ab6934ff4e71dc0b37", "type": "github" }, "original": { diff --git a/src/main.rs b/src/main.rs index 485d5ae..d2fd97f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,8 +4,8 @@ mod ui; use crate::config::{Config, Transcode}; use anyhow::{Context, Error, Result}; use futures::{pin_mut, prelude::*}; -use glib::{subclass::prelude::*, GBoxed, GString}; -use gstreamer::{gst_element_error, prelude::*, Element}; +use glib::{GBoxed, GString}; +use gstreamer::{element_error, prelude::*, Element}; use gstreamer_base::prelude::*; use std::{ borrow::Cow, @@ -350,9 +350,9 @@ async fn transcode_gstreamer( } }; - let is_audio = src_pad.get_current_caps().and_then(|caps| { - caps.get_structure(0).map(|s| { - let name = s.get_name(); + let is_audio = src_pad.current_caps().and_then(|caps| { + caps.structure(0).map(|s| { + let name = s.name(); name.starts_with("audio/") }) }); @@ -360,7 +360,7 @@ async fn transcode_gstreamer( None => { return Err(Error::msg(format!( "Failed to get media type from pad {}", - src_pad.get_name() + src_pad.name() ))); } Some(false) => { @@ -452,7 +452,7 @@ async fn transcode_gstreamer( let sink_pad = dest_elems .get(0) .unwrap() - .get_static_pad("sink") + .static_pad("sink") .expect("1. dest element has no sinkpad"); src_pad.link(&sink_pad)?; @@ -464,7 +464,7 @@ async fn transcode_gstreamer( .field("error", &GBoxErrorWrapper::new(err)) .build(); - gst_element_error!( + element_error!( decodebin, gstreamer::LibraryError::Failed, ("Failed to insert sink"), @@ -473,9 +473,7 @@ async fn transcode_gstreamer( } }); - let bus = pipeline - .get_bus() - .context("Could not get bus for pipeline")?; + let bus = pipeline.bus().context("Could not get bus for pipeline")?; pipeline .set_state(gstreamer::State::Playing) @@ -499,28 +497,28 @@ async fn transcode_gstreamer( let pipe_stop_res = pipeline.set_state(gstreamer::State::Null); let err: Error = err - .get_details() + .details() .and_then(|details| { - if details.get_name() != "error-details" { + if details.name() != "error-details" { return None; } let err = details .get::<&GBoxErrorWrapper>("error") .unwrap() - .map(|err| err.clone().into()) - .expect("error-details message without actual error"); + .clone() + .into(); Some(err) }) .unwrap_or_else(|| { GErrorMessage { src: msg - .get_src() - .map(|s| String::from(s.get_path_string())) + .src() + .map(|s| String::from(s.path_string())) .unwrap_or_else(|| String::from("None")), - error: err.get_error().to_string(), - debug: err.get_debug(), - source: err.get_error(), + error: err.error().to_string(), + debug: err.debug(), + source: err.error(), } .into() }); @@ -560,7 +558,7 @@ async fn transcode_gstreamer( let dur = decodebin .query_duration::() - .and_then(|time| time.nanoseconds()); + .map(|time| time.nseconds()); let ratio = dur.and_then(|dur| { if dur == 0 { @@ -569,7 +567,7 @@ async fn transcode_gstreamer( let pos = decodebin .query_position::() - .and_then(|time| time.nanoseconds()); + .map(|time| time.nseconds()); pos.map(|pos| { let ratio = pos as f64 / dur as f64;