mirror of
https://github.com/weyne85/rustdesk.git
synced 2025-10-29 17:00:05 +00:00
downgrade gstreamer to 0.16
This commit is contained in:
@@ -48,9 +48,9 @@ bindgen = "0.59"
|
||||
[target.'cfg(target_os = "linux")'.dependencies]
|
||||
dbus = { version = "0.9", optional = true }
|
||||
tracing = { version = "0.1", optional = true }
|
||||
gstreamer = { version = "0.19", optional = true }
|
||||
gstreamer-app = { version = "0.19", features = ["v1_16"], optional = true }
|
||||
gstreamer-video = { version = "0.19", optional = true }
|
||||
gstreamer = { version = "0.16", optional = true }
|
||||
gstreamer-app = { version = "0.16", features = ["v1_10"], optional = true }
|
||||
gstreamer-video = { version = "0.16", optional = true }
|
||||
|
||||
[target.'cfg(any(target_os = "windows", target_os = "linux"))'.dependencies]
|
||||
hwcodec = { git = "https://github.com/21pages/hwcodec", optional = true }
|
||||
|
||||
@@ -130,18 +130,18 @@ impl PipeWireRecorder {
|
||||
pub fn new(capturable: PipeWireCapturable) -> Result<Self, Box<dyn Error>> {
|
||||
let pipeline = gst::Pipeline::new(None);
|
||||
|
||||
let src = gst::ElementFactory::make_with_name("pipewiresrc", None)?;
|
||||
src.set_property("fd", &capturable.fd.as_raw_fd());
|
||||
src.set_property("path", &format!("{}", capturable.path));
|
||||
src.set_property("keepalive_time", &1_000.as_raw_fd());
|
||||
let src = gst::ElementFactory::make("pipewiresrc", None)?;
|
||||
src.set_property("fd", &capturable.fd.as_raw_fd())?;
|
||||
src.set_property("path", &format!("{}", capturable.path))?;
|
||||
src.set_property("keepalive_time", &1_000.as_raw_fd())?;
|
||||
|
||||
// For some reason pipewire blocks on destruction of AppSink if this is not set to true,
|
||||
// see: https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/982
|
||||
src.set_property("always-copy", &true);
|
||||
src.set_property("always-copy", &true)?;
|
||||
|
||||
let sink = gst::ElementFactory::make_with_name("appsink", None)?;
|
||||
sink.set_property("drop", &true);
|
||||
sink.set_property("max-buffers", &1u32);
|
||||
let sink = gst::ElementFactory::make("appsink", None)?;
|
||||
sink.set_property("drop", &true)?;
|
||||
sink.set_property("max-buffers", &1u32)?;
|
||||
|
||||
pipeline.add_many(&[&src, &sink])?;
|
||||
src.link(&sink)?;
|
||||
@@ -182,21 +182,25 @@ impl Recorder for PipeWireRecorder {
|
||||
.try_pull_sample(gst::ClockTime::from_mseconds(timeout_ms))
|
||||
{
|
||||
let cap = sample
|
||||
.caps()
|
||||
.get_caps()
|
||||
.ok_or("Failed get caps")?
|
||||
.structure(0)
|
||||
.get_structure(0)
|
||||
.ok_or("Failed to get structure")?;
|
||||
let w: i32 = cap.value("width")?.get()?;
|
||||
let h: i32 = cap.value("height")?.get()?;
|
||||
self.pix_fmt = cap.value("format")?.get()?;
|
||||
let w: i32 = cap.get_value("width")?.get_some()?;
|
||||
let h: i32 = cap.get_value("height")?.get_some()?;
|
||||
let w = w as usize;
|
||||
let h = h as usize;
|
||||
self.pix_fmt = cap
|
||||
.get::<&str>("format")?
|
||||
.ok_or("Failed to get pixel format")?
|
||||
.to_string();
|
||||
|
||||
let buf = sample
|
||||
.buffer_owned()
|
||||
.get_buffer_owned()
|
||||
.ok_or_else(|| GStreamerError("Failed to get owned buffer.".into()))?;
|
||||
let mut crop = buf
|
||||
.meta::<gstreamer_video::VideoCropMeta>()
|
||||
.map(|m| m.rect());
|
||||
.get_meta::<gstreamer_video::VideoCropMeta>()
|
||||
.map(|m| m.get_rect());
|
||||
// only crop if necessary
|
||||
if Some((0, 0, w as u32, h as u32)) == crop {
|
||||
crop = None;
|
||||
@@ -207,7 +211,7 @@ impl Recorder for PipeWireRecorder {
|
||||
if let Err(..) = crate::would_block_if_equal(&mut self.saved_raw_data, buf.as_slice()) {
|
||||
return Ok(PixelProvider::NONE);
|
||||
}
|
||||
let buf_size = buf.size();
|
||||
let buf_size = buf.get_size();
|
||||
// BGRx is 4 bytes per pixel
|
||||
if buf_size != (w * h * 4) {
|
||||
// for some reason the width and height of the caps do not guarantee correct buffer
|
||||
|
||||
Reference in New Issue
Block a user