mirror of
https://gitlab.gnome.org/World/Authenticator.git
synced 2025-03-04 00:34:40 +01:00
camera: Auto flip the video stream
We could make this better by using glvideoflip but that is someone else's task
This commit is contained in:
parent
ff0fd34c4b
commit
3a3b9cc8f3
3 changed files with 10 additions and 2 deletions
1
Cargo.lock
generated
1
Cargo.lock
generated
|
@ -159,6 +159,7 @@ dependencies = [
|
|||
"gettext-rs",
|
||||
"gst-plugin-gtk4",
|
||||
"gstreamer",
|
||||
"gstreamer-video",
|
||||
"gtk4",
|
||||
"hex",
|
||||
"image 0.24.6",
|
||||
|
|
|
@ -17,6 +17,7 @@ futures-executor = "0.3"
|
|||
futures-util = "0.3"
|
||||
gettext-rs = {version = "0.7", features = ["gettext-system"]}
|
||||
gst = {package = "gstreamer", version = "0.20"}
|
||||
gst_video = { package = "gstreamer-video", version = "0.20"}
|
||||
gst4gtk = {package = "gst-plugin-gtk4", version = "0.10", features = ["wayland", "x11egl", "x11glx"]}
|
||||
gtk = {package = "gtk4", version = "0.6", features = ["v4_10"]}
|
||||
hex = {version = "0.4.3", features = ["serde"]}
|
||||
|
|
|
@ -19,7 +19,7 @@ static PIPELINE_NAME: Lazy<glib::GString> = Lazy::new(|| glib::GString::from("ca
|
|||
/// /
|
||||
/// pipewiresrc -- tee
|
||||
/// \
|
||||
/// queue -- glsinkbin
|
||||
/// queue -- videoflip - glsinkbin
|
||||
mod imp {
|
||||
use std::cell::RefCell;
|
||||
|
||||
|
@ -148,6 +148,11 @@ impl CameraPaintable {
|
|||
let queue2 = gst::ElementFactory::make_with_name("queue", None)?;
|
||||
let zbar = gst::ElementFactory::make_with_name("zbar", None)?;
|
||||
let fakesink = gst::ElementFactory::make_with_name("fakesink", None)?;
|
||||
|
||||
let videoflip = gst::ElementFactory::make("videoflip")
|
||||
.property("video-direction", gst_video::VideoOrientationMethod::Auto)
|
||||
.build()?;
|
||||
|
||||
let sink = if paintable
|
||||
.property::<Option<gdk::GLContext>>("gl-context")
|
||||
.is_some()
|
||||
|
@ -180,12 +185,13 @@ impl CameraPaintable {
|
|||
&zbar,
|
||||
&fakesink,
|
||||
&queue2,
|
||||
&videoflip,
|
||||
&sink,
|
||||
])?;
|
||||
|
||||
gst::Element::link_many(&[pipewire_src, &tee, &queue1, &videoconvert, &zbar, &fakesink])?;
|
||||
tee.link_pads(None, &queue2, None)?;
|
||||
gst::Element::link_many(&[&queue2, &sink])?;
|
||||
gst::Element::link_many(&[&queue2, &videoflip, &sink])?;
|
||||
|
||||
let bus = pipeline.bus().unwrap();
|
||||
bus.add_watch_local(
|
||||
|
|
Loading…
Add table
Reference in a new issue