player: Replace GstPlayer with GstPlay

This commit is contained in:
Elias Projahn 2024-03-11 17:24:21 +01:00
parent 0b49939caf
commit 35716326f2
4 changed files with 231 additions and 91 deletions

259
Cargo.lock generated
View file

@ -147,7 +147,7 @@ dependencies = [
"js-sys", "js-sys",
"num-traits", "num-traits",
"wasm-bindgen", "wasm-bindgen",
"windows-targets", "windows-targets 0.48.5",
] ]
[[package]] [[package]]
@ -288,7 +288,7 @@ version = "0.18.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3f9839ea644ed9c97a34d129ad56d38a25e6756f99f3a88e15cd39c20629caf7" checksum = "3f9839ea644ed9c97a34d129ad56d38a25e6756f99f3a88e15cd39c20629caf7"
dependencies = [ dependencies = [
"gio-sys", "gio-sys 0.18.1",
"glib-sys 0.18.1", "glib-sys 0.18.1",
"gobject-sys 0.18.0", "gobject-sys 0.18.0",
"libc", "libc",
@ -318,7 +318,7 @@ checksum = "dbab43f332a3cf1df9974da690b5bb0e26720ed09a228178ce52175372dcfef0"
dependencies = [ dependencies = [
"cairo-sys-rs", "cairo-sys-rs",
"gdk-pixbuf-sys", "gdk-pixbuf-sys",
"gio-sys", "gio-sys 0.18.1",
"glib-sys 0.18.1", "glib-sys 0.18.1",
"gobject-sys 0.18.0", "gobject-sys 0.18.0",
"libc", "libc",
@ -368,7 +368,7 @@ dependencies = [
"futures-core", "futures-core",
"futures-io", "futures-io",
"futures-util", "futures-util",
"gio-sys", "gio-sys 0.18.1",
"glib 0.18.3", "glib 0.18.3",
"libc", "libc",
"once_cell", "once_cell",
@ -390,6 +390,19 @@ dependencies = [
"winapi", "winapi",
] ]
[[package]]
name = "gio-sys"
version = "0.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bcf8e1d9219bb294636753d307b030c1e8a032062cba74f493c431a5c8b81ce4"
dependencies = [
"glib-sys 0.19.0",
"gobject-sys 0.19.0",
"libc",
"system-deps",
"windows-sys",
]
[[package]] [[package]]
name = "glib" name = "glib"
version = "0.15.12" version = "0.15.12"
@ -422,7 +435,7 @@ dependencies = [
"futures-executor", "futures-executor",
"futures-task", "futures-task",
"futures-util", "futures-util",
"gio-sys", "gio-sys 0.18.1",
"glib-macros 0.18.3", "glib-macros 0.18.3",
"glib-sys 0.18.1", "glib-sys 0.18.1",
"gobject-sys 0.18.0", "gobject-sys 0.18.0",
@ -433,6 +446,28 @@ dependencies = [
"thiserror", "thiserror",
] ]
[[package]]
name = "glib"
version = "0.19.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ab9e86540b5d8402e905ad4ce7d6aa544092131ab564f3102175af176b90a053"
dependencies = [
"bitflags 2.4.1",
"futures-channel",
"futures-core",
"futures-executor",
"futures-task",
"futures-util",
"gio-sys 0.19.0",
"glib-macros 0.19.2",
"glib-sys 0.19.0",
"gobject-sys 0.19.0",
"libc",
"memchr",
"smallvec",
"thiserror",
]
[[package]] [[package]]
name = "glib-macros" name = "glib-macros"
version = "0.15.13" version = "0.15.13"
@ -462,6 +497,19 @@ dependencies = [
"syn 2.0.39", "syn 2.0.39",
] ]
[[package]]
name = "glib-macros"
version = "0.19.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0f5897ca27a83e4cdc7b4666850bade0a2e73e17689aabafcc9acddad9d823b8"
dependencies = [
"heck",
"proc-macro-crate 3.1.0",
"proc-macro2",
"quote",
"syn 2.0.39",
]
[[package]] [[package]]
name = "glib-sys" name = "glib-sys"
version = "0.15.10" version = "0.15.10"
@ -482,6 +530,16 @@ dependencies = [
"system-deps", "system-deps",
] ]
[[package]]
name = "glib-sys"
version = "0.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "630f097773d7c7a0bb3258df4e8157b47dc98bbfa0e60ad9ab56174813feced4"
dependencies = [
"libc",
"system-deps",
]
[[package]] [[package]]
name = "gobject-sys" name = "gobject-sys"
version = "0.15.10" version = "0.15.10"
@ -504,6 +562,17 @@ dependencies = [
"system-deps", "system-deps",
] ]
[[package]]
name = "gobject-sys"
version = "0.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c85e2b1080b9418dd0c58b498da3a5c826030343e0ef07bde6a955d28de54979"
dependencies = [
"glib-sys 0.19.0",
"libc",
"system-deps",
]
[[package]] [[package]]
name = "graphene-rs" name = "graphene-rs"
version = "0.18.1" version = "0.18.1"
@ -560,38 +629,38 @@ dependencies = [
[[package]] [[package]]
name = "gstreamer" name = "gstreamer"
version = "0.21.2" version = "0.22.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ed97f98d186e63e49079b26af1a1b73e70ab7a2f450eb46a136f2bffc2bf12d5" checksum = "48a5e10c539f8b594c50f6cd1bd1cd07785e06d701a077bff397ad211bc92e88"
dependencies = [ dependencies = [
"cfg-if", "cfg-if",
"futures-channel", "futures-channel",
"futures-core", "futures-core",
"futures-util", "futures-util",
"glib 0.18.3", "glib 0.19.2",
"gstreamer-sys", "gstreamer-sys",
"itertools", "itertools",
"libc", "libc",
"muldiv", "muldiv",
"num-integer", "num-integer",
"num-rational", "num-rational",
"once_cell",
"option-operations", "option-operations",
"paste", "paste",
"pin-project-lite", "pin-project-lite",
"pretty-hex",
"smallvec", "smallvec",
"thiserror", "thiserror",
] ]
[[package]] [[package]]
name = "gstreamer-base" name = "gstreamer-base"
version = "0.21.2" version = "0.22.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cb150b6904a49052237fede7cc2e6479df6ced5043d95e6af8134bc141a3167f" checksum = "514c71195b53c7eced4842b66ca9149833e41cf6a1d949e45e2ca4a4fa929850"
dependencies = [ dependencies = [
"atomic_refcell", "atomic_refcell",
"cfg-if", "cfg-if",
"glib 0.18.3", "glib 0.19.2",
"gstreamer", "gstreamer",
"gstreamer-base-sys", "gstreamer-base-sys",
"libc", "libc",
@ -599,38 +668,38 @@ dependencies = [
[[package]] [[package]]
name = "gstreamer-base-sys" name = "gstreamer-base-sys"
version = "0.21.1" version = "0.22.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f4ca701f9078fe115b29b24c80910b577f9cb5b039182f050dbadf5933594b64" checksum = "286591e0f85bbda1adf9bab6f21d015acd9ca0a4d4acb61da65e3d0487e23c4e"
dependencies = [ dependencies = [
"glib-sys 0.18.1", "glib-sys 0.19.0",
"gobject-sys 0.18.0", "gobject-sys 0.19.0",
"gstreamer-sys", "gstreamer-sys",
"libc", "libc",
"system-deps", "system-deps",
] ]
[[package]] [[package]]
name = "gstreamer-player" name = "gstreamer-play"
version = "0.21.2" version = "0.22.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "276900527b2f8323c6ed97ab3ed42854bb169a993fb8cef946fb43d1e9097a66" checksum = "04cd4315d97f8f38a6a6fdaad27d51cc67fd132785816091ad9985e197d2c052"
dependencies = [ dependencies = [
"glib 0.18.3", "glib 0.19.2",
"gstreamer", "gstreamer",
"gstreamer-player-sys", "gstreamer-play-sys",
"gstreamer-video", "gstreamer-video",
"libc", "libc",
] ]
[[package]] [[package]]
name = "gstreamer-player-sys" name = "gstreamer-play-sys"
version = "0.21.0" version = "0.22.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f5ef4d00b43d0aa94e9a518e6ef4a4c504b4b855304a0a5f4ed1493d5e5ca66c" checksum = "19def7b12d3a53c520ad661b8f4501ae04158627e4a9fc49cc30c4ea04522cbf"
dependencies = [ dependencies = [
"glib-sys 0.18.1", "glib-sys 0.19.0",
"gobject-sys 0.18.0", "gobject-sys 0.19.0",
"gstreamer-sys", "gstreamer-sys",
"gstreamer-video-sys", "gstreamer-video-sys",
"libc", "libc",
@ -639,40 +708,41 @@ dependencies = [
[[package]] [[package]]
name = "gstreamer-sys" name = "gstreamer-sys"
version = "0.21.2" version = "0.22.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "564cda782b3e6eed1b81cb4798a06794db56440fb05b422505be689f34ce3bc4" checksum = "d5ddf526b3bf90ea627224c804f00b8bcb0452e3b447978b4d5092f8e8ff5918"
dependencies = [ dependencies = [
"glib-sys 0.18.1", "glib-sys 0.19.0",
"gobject-sys 0.18.0", "gobject-sys 0.19.0",
"libc", "libc",
"system-deps", "system-deps",
] ]
[[package]] [[package]]
name = "gstreamer-video" name = "gstreamer-video"
version = "0.21.2" version = "0.22.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e85b2a4d1d3b7a98ae03806c3ed5c2db89d6b37a5f138780b48de015d68715e5" checksum = "5ab3f4045ddb92bf2b469f5db8825d4f5eb46e4beff661fc97f50bb4e2b2c626"
dependencies = [ dependencies = [
"cfg-if", "cfg-if",
"futures-channel", "futures-channel",
"glib 0.18.3", "glib 0.19.2",
"gstreamer", "gstreamer",
"gstreamer-base", "gstreamer-base",
"gstreamer-video-sys", "gstreamer-video-sys",
"libc", "libc",
"once_cell",
"thiserror", "thiserror",
] ]
[[package]] [[package]]
name = "gstreamer-video-sys" name = "gstreamer-video-sys"
version = "0.21.2" version = "0.22.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0302318d98e6b054501e485b6bb4ee20225823218f4a8660c182f115a33b16ee" checksum = "c1ea7996ba44fbbf563aeeda96e24259efc9f06b407854d837ee58e260d7ba78"
dependencies = [ dependencies = [
"glib-sys 0.18.1", "glib-sys 0.19.0",
"gobject-sys 0.18.0", "gobject-sys 0.19.0",
"gstreamer-base-sys", "gstreamer-base-sys",
"gstreamer-sys", "gstreamer-sys",
"libc", "libc",
@ -723,7 +793,7 @@ dependencies = [
"cairo-sys-rs", "cairo-sys-rs",
"gdk-pixbuf-sys", "gdk-pixbuf-sys",
"gdk4-sys", "gdk4-sys",
"gio-sys", "gio-sys 0.18.1",
"glib-sys 0.18.1", "glib-sys 0.18.1",
"gobject-sys 0.18.0", "gobject-sys 0.18.0",
"graphene-sys", "graphene-sys",
@ -793,9 +863,9 @@ dependencies = [
[[package]] [[package]]
name = "itertools" name = "itertools"
version = "0.11.0" version = "0.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569"
dependencies = [ dependencies = [
"either", "either",
] ]
@ -838,7 +908,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5e10aaa38de1d53374f90deeb4535209adc40cc5dba37f9704724169bceec69a" checksum = "5e10aaa38de1d53374f90deeb4535209adc40cc5dba37f9704724169bceec69a"
dependencies = [ dependencies = [
"gdk4-sys", "gdk4-sys",
"gio-sys", "gio-sys 0.18.1",
"glib-sys 0.18.1", "glib-sys 0.18.1",
"gobject-sys 0.18.0", "gobject-sys 0.18.0",
"gtk4-sys", "gtk4-sys",
@ -903,9 +973,9 @@ dependencies = [
[[package]] [[package]]
name = "memchr" name = "memchr"
version = "2.6.4" version = "2.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149"
[[package]] [[package]]
name = "memoffset" name = "memoffset"
@ -939,7 +1009,7 @@ dependencies = [
"chrono", "chrono",
"fragile", "fragile",
"gettext-rs", "gettext-rs",
"gstreamer-player", "gstreamer-play",
"gtk4", "gtk4",
"libadwaita", "libadwaita",
"log", "log",
@ -1097,12 +1167,6 @@ version = "0.2.17"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
[[package]]
name = "pretty-hex"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c6fa0831dd7cc608c38a5e323422a0077678fa5744aa2be4ad91c4ece8eec8d5"
[[package]] [[package]]
name = "proc-macro-crate" name = "proc-macro-crate"
version = "1.3.1" version = "1.3.1"
@ -1122,6 +1186,15 @@ dependencies = [
"toml_edit 0.20.7", "toml_edit 0.20.7",
] ]
[[package]]
name = "proc-macro-crate"
version = "3.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284"
dependencies = [
"toml_edit 0.21.0",
]
[[package]] [[package]]
name = "proc-macro-error" name = "proc-macro-error"
version = "1.0.4" version = "1.0.4"
@ -1301,9 +1374,9 @@ dependencies = [
[[package]] [[package]]
name = "smallvec" name = "smallvec"
version = "1.11.2" version = "1.13.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" checksum = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7"
[[package]] [[package]]
name = "syn" name = "syn"
@ -1600,7 +1673,16 @@ version = "0.51.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64" checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64"
dependencies = [ dependencies = [
"windows-targets", "windows-targets 0.48.5",
]
[[package]]
name = "windows-sys"
version = "0.52.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
dependencies = [
"windows-targets 0.52.4",
] ]
[[package]] [[package]]
@ -1609,13 +1691,28 @@ version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
dependencies = [ dependencies = [
"windows_aarch64_gnullvm", "windows_aarch64_gnullvm 0.48.5",
"windows_aarch64_msvc", "windows_aarch64_msvc 0.48.5",
"windows_i686_gnu", "windows_i686_gnu 0.48.5",
"windows_i686_msvc", "windows_i686_msvc 0.48.5",
"windows_x86_64_gnu", "windows_x86_64_gnu 0.48.5",
"windows_x86_64_gnullvm", "windows_x86_64_gnullvm 0.48.5",
"windows_x86_64_msvc", "windows_x86_64_msvc 0.48.5",
]
[[package]]
name = "windows-targets"
version = "0.52.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7dd37b7e5ab9018759f893a1952c9420d060016fc19a472b4bb20d1bdd694d1b"
dependencies = [
"windows_aarch64_gnullvm 0.52.4",
"windows_aarch64_msvc 0.52.4",
"windows_i686_gnu 0.52.4",
"windows_i686_msvc 0.52.4",
"windows_x86_64_gnu 0.52.4",
"windows_x86_64_gnullvm 0.52.4",
"windows_x86_64_msvc 0.52.4",
] ]
[[package]] [[package]]
@ -1624,42 +1721,84 @@ version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
[[package]]
name = "windows_aarch64_gnullvm"
version = "0.52.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bcf46cf4c365c6f2d1cc93ce535f2c8b244591df96ceee75d8e83deb70a9cac9"
[[package]] [[package]]
name = "windows_aarch64_msvc" name = "windows_aarch64_msvc"
version = "0.48.5" version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
[[package]]
name = "windows_aarch64_msvc"
version = "0.52.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "da9f259dd3bcf6990b55bffd094c4f7235817ba4ceebde8e6d11cd0c5633b675"
[[package]] [[package]]
name = "windows_i686_gnu" name = "windows_i686_gnu"
version = "0.48.5" version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
[[package]]
name = "windows_i686_gnu"
version = "0.52.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b474d8268f99e0995f25b9f095bc7434632601028cf86590aea5c8a5cb7801d3"
[[package]] [[package]]
name = "windows_i686_msvc" name = "windows_i686_msvc"
version = "0.48.5" version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
[[package]]
name = "windows_i686_msvc"
version = "0.52.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1515e9a29e5bed743cb4415a9ecf5dfca648ce85ee42e15873c3cd8610ff8e02"
[[package]] [[package]]
name = "windows_x86_64_gnu" name = "windows_x86_64_gnu"
version = "0.48.5" version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
[[package]]
name = "windows_x86_64_gnu"
version = "0.52.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5eee091590e89cc02ad514ffe3ead9eb6b660aedca2183455434b93546371a03"
[[package]] [[package]]
name = "windows_x86_64_gnullvm" name = "windows_x86_64_gnullvm"
version = "0.48.5" version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
[[package]]
name = "windows_x86_64_gnullvm"
version = "0.52.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "77ca79f2451b49fa9e2af39f0747fe999fcda4f5e241b2898624dca97a1f2177"
[[package]] [[package]]
name = "windows_x86_64_msvc" name = "windows_x86_64_msvc"
version = "0.48.5" version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
[[package]]
name = "windows_x86_64_msvc"
version = "0.52.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "32b752e52a2da0ddfbdbcc6fceadfeede4c939ed16d13e648833a61dfb611ed8"
[[package]] [[package]]
name = "winnow" name = "winnow"
version = "0.5.19" version = "0.5.19"

View file

@ -8,7 +8,7 @@ adw = { package = "libadwaita", version = "0.5", features = ["v1_4"] }
chrono = "0.4" chrono = "0.4"
fragile = "2" fragile = "2"
gettext-rs = { version = "0.7", features = ["gettext-system"] } gettext-rs = { version = "0.7", features = ["gettext-system"] }
gstreamer-player = "0.21" gstreamer-play = "0.22"
gtk = { package = "gtk4", version = "0.7", features = ["v4_12", "blueprint"] } gtk = { package = "gtk4", version = "0.7", features = ["v4_12", "blueprint"] }
log = "0.4" log = "0.4"
mpris-player = "0.6" mpris-player = "0.6"

View file

@ -19,7 +19,7 @@ use self::{application::MusicusApplication, window::MusicusWindow};
use config::{GETTEXT_PACKAGE, LOCALEDIR, PKGDATADIR}; use config::{GETTEXT_PACKAGE, LOCALEDIR, PKGDATADIR};
use gettextrs::{bind_textdomain_codeset, bindtextdomain, textdomain}; use gettextrs::{bind_textdomain_codeset, bindtextdomain, textdomain};
use gstreamer_player::gst; use gstreamer_play::gst;
use gtk::{gio, glib, prelude::*}; use gtk::{gio, glib, prelude::*};
fn main() -> glib::ExitCode { fn main() -> glib::ExitCode {

View file

@ -1,6 +1,6 @@
use crate::playlist_item::PlaylistItem; use crate::playlist_item::PlaylistItem;
use fragile::Fragile; use fragile::Fragile;
use gstreamer_player::gst; use gstreamer_play::gst;
use gtk::{ use gtk::{
gio, gio,
glib::{self, clone, subclass::Signal, Properties}, glib::{self, clone, subclass::Signal, Properties},
@ -34,9 +34,9 @@ mod imp {
pub duration_ms: Cell<u64>, pub duration_ms: Cell<u64>,
#[property(get, set)] #[property(get, set)]
pub position_ms: Cell<u64>, pub position_ms: Cell<u64>,
#[property(get, construct_only)]
pub player: OnceCell<gstreamer_player::Player>,
pub play: OnceCell<gstreamer_play::Play>,
pub play_signal_adapter: OnceCell<gstreamer_play::PlaySignalAdapter>,
pub mpris: OnceCell<Arc<MprisPlayer>>, pub mpris: OnceCell<Arc<MprisPlayer>>,
} }
@ -62,10 +62,10 @@ mod imp {
let uri = glib::filename_to_uri(item.path(), None) let uri = glib::filename_to_uri(item.path(), None)
.expect("track path should be parsable as an URI"); .expect("track path should be parsable as an URI");
let player = self.player.get().unwrap(); let play = self.play.get().unwrap();
player.set_uri(Some(&uri)); play.set_uri(Some(&uri));
if self.playing.get() { if self.playing.get() {
player.play(); play.play();
} }
self.current_index.set(index); self.current_index.set(index);
@ -92,6 +92,8 @@ mod imp {
fn constructed(&self) { fn constructed(&self) {
self.parent_constructed(); self.parent_constructed();
let play = gstreamer_play::Play::new(None::<gstreamer_play::PlayVideoRenderer>);
let mpris = MprisPlayer::new( let mpris = MprisPlayer::new(
"de.johrpan.musicus".to_string(), "de.johrpan.musicus".to_string(),
"Musicus".to_string(), "Musicus".to_string(),
@ -116,20 +118,20 @@ mod imp {
self.mpris.set(mpris).expect("mpris should not be set"); self.mpris.set(mpris).expect("mpris should not be set");
let player = self.player.get().unwrap(); let mut config = play.config();
let mut config = player.config();
config.set_position_update_interval(250); config.set_position_update_interval(250);
player.set_config(config).unwrap(); play.set_config(config).unwrap();
player.set_video_track_enabled(false); play.set_video_track_enabled(false);
let play_signal_adapter = gstreamer_play::PlaySignalAdapter::new(&play);
let obj = Fragile::new(self.obj().to_owned()); let obj = Fragile::new(self.obj().to_owned());
player.connect_end_of_stream(move |_| { play_signal_adapter.connect_end_of_stream(move |_| {
obj.get().next(); obj.get().next();
}); });
let obj = Fragile::new(self.obj().to_owned()); let obj = Fragile::new(self.obj().to_owned());
player.connect_position_updated(move |_, position| { play_signal_adapter.connect_position_updated(move |_, position| {
if let Some(position) = position { if let Some(position) = position {
let obj = obj.get(); let obj = obj.get();
obj.imp().position_ms.set(position.mseconds()); obj.imp().position_ms.set(position.mseconds());
@ -138,7 +140,7 @@ mod imp {
}); });
let obj = Fragile::new(self.obj().to_owned()); let obj = Fragile::new(self.obj().to_owned());
player.connect_duration_changed(move |_, duration| { play_signal_adapter.connect_duration_changed(move |_, duration| {
if let Some(duration) = duration { if let Some(duration) = duration {
let obj = obj.get(); let obj = obj.get();
let imp = obj.imp(); let imp = obj.imp();
@ -150,6 +152,9 @@ mod imp {
obj.notify_duration_ms(); obj.notify_duration_ms();
} }
}); });
self.play.set(play).unwrap();
self.play_signal_adapter.set(play_signal_adapter).unwrap();
} }
} }
} }
@ -160,13 +165,6 @@ glib::wrapper! {
impl MusicusPlayer { impl MusicusPlayer {
pub fn new() -> Self { pub fn new() -> Self {
let player = gstreamer_player::Player::new(
None::<gstreamer_player::PlayerVideoRenderer>,
Some(gstreamer_player::PlayerGMainContextSignalDispatcher::new(
None,
)),
);
glib::Object::builder() glib::Object::builder()
.property("active", false) .property("active", false)
.property("playing", false) .property("playing", false)
@ -174,7 +172,6 @@ impl MusicusPlayer {
.property("current-index", 0u32) .property("current-index", 0u32)
.property("position-ms", 0u64) .property("position-ms", 0u64)
.property("duration-ms", 60_000u64) .property("duration-ms", 60_000u64)
.property("player", player)
.build() .build()
} }
@ -209,27 +206,31 @@ impl MusicusPlayer {
} }
pub fn play(&self) { pub fn play(&self) {
self.player().play(); let imp = self.imp();
imp.play.get().unwrap().play();
self.set_playing(true); self.set_playing(true);
self.imp() imp.mpris
.mpris
.get() .get()
.unwrap() .unwrap()
.set_playback_status(PlaybackStatus::Playing); .set_playback_status(PlaybackStatus::Playing);
} }
pub fn pause(&self) { pub fn pause(&self) {
self.player().pause(); let imp = self.imp();
imp.play.get().unwrap().pause();
self.set_playing(false); self.set_playing(false);
self.imp() imp.mpris
.mpris
.get() .get()
.unwrap() .unwrap()
.set_playback_status(PlaybackStatus::Paused); .set_playback_status(PlaybackStatus::Paused);
} }
pub fn seek_to(&self, time_ms: u64) { pub fn seek_to(&self, time_ms: u64) {
self.player().seek(gst::ClockTime::from_mseconds(time_ms)); let imp = self.imp();
imp.play
.get()
.unwrap()
.seek(gst::ClockTime::from_mseconds(time_ms));
} }
pub fn current_item(&self) -> Option<PlaylistItem> { pub fn current_item(&self) -> Option<PlaylistItem> {