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",
|
"gettext-rs",
|
||||||
"gst-plugin-gtk4",
|
"gst-plugin-gtk4",
|
||||||
"gstreamer",
|
"gstreamer",
|
||||||
|
"gstreamer-video",
|
||||||
"gtk4",
|
"gtk4",
|
||||||
"hex",
|
"hex",
|
||||||
"image 0.24.6",
|
"image 0.24.6",
|
||||||
|
|
|
@ -17,6 +17,7 @@ futures-executor = "0.3"
|
||||||
futures-util = "0.3"
|
futures-util = "0.3"
|
||||||
gettext-rs = {version = "0.7", features = ["gettext-system"]}
|
gettext-rs = {version = "0.7", features = ["gettext-system"]}
|
||||||
gst = {package = "gstreamer", version = "0.20"}
|
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"]}
|
gst4gtk = {package = "gst-plugin-gtk4", version = "0.10", features = ["wayland", "x11egl", "x11glx"]}
|
||||||
gtk = {package = "gtk4", version = "0.6", features = ["v4_10"]}
|
gtk = {package = "gtk4", version = "0.6", features = ["v4_10"]}
|
||||||
hex = {version = "0.4.3", features = ["serde"]}
|
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
|
/// pipewiresrc -- tee
|
||||||
/// \
|
/// \
|
||||||
/// queue -- glsinkbin
|
/// queue -- videoflip - glsinkbin
|
||||||
mod imp {
|
mod imp {
|
||||||
use std::cell::RefCell;
|
use std::cell::RefCell;
|
||||||
|
|
||||||
|
@ -148,6 +148,11 @@ impl CameraPaintable {
|
||||||
let queue2 = gst::ElementFactory::make_with_name("queue", None)?;
|
let queue2 = gst::ElementFactory::make_with_name("queue", None)?;
|
||||||
let zbar = gst::ElementFactory::make_with_name("zbar", None)?;
|
let zbar = gst::ElementFactory::make_with_name("zbar", None)?;
|
||||||
let fakesink = gst::ElementFactory::make_with_name("fakesink", 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
|
let sink = if paintable
|
||||||
.property::<Option<gdk::GLContext>>("gl-context")
|
.property::<Option<gdk::GLContext>>("gl-context")
|
||||||
.is_some()
|
.is_some()
|
||||||
|
@ -180,12 +185,13 @@ impl CameraPaintable {
|
||||||
&zbar,
|
&zbar,
|
||||||
&fakesink,
|
&fakesink,
|
||||||
&queue2,
|
&queue2,
|
||||||
|
&videoflip,
|
||||||
&sink,
|
&sink,
|
||||||
])?;
|
])?;
|
||||||
|
|
||||||
gst::Element::link_many(&[pipewire_src, &tee, &queue1, &videoconvert, &zbar, &fakesink])?;
|
gst::Element::link_many(&[pipewire_src, &tee, &queue1, &videoconvert, &zbar, &fakesink])?;
|
||||||
tee.link_pads(None, &queue2, None)?;
|
tee.link_pads(None, &queue2, None)?;
|
||||||
gst::Element::link_many(&[&queue2, &sink])?;
|
gst::Element::link_many(&[&queue2, &videoflip, &sink])?;
|
||||||
|
|
||||||
let bus = pipeline.bus().unwrap();
|
let bus = pipeline.bus().unwrap();
|
||||||
bus.add_watch_local(
|
bus.add_watch_local(
|
||||||
|
|
Loading…
Add table
Reference in a new issue