Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update gstreamer to 0.22 #417

Merged
merged 5 commits into from
Mar 1, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
285 changes: 153 additions & 132 deletions Cargo.lock

Large diffs are not rendered by default.

35 changes: 18 additions & 17 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -13,28 +13,29 @@ members = [
"servo-media",
"servo-media-derive",
"streams",
"webrtc"
"webrtc",
]

[workspace.dependencies]
glib = "0.18"
glib-sys = "0.18"
gst = { package = "gstreamer", version = "0.21" }
gst-app = { package = "gstreamer-app", version = "0.21" }
gst-audio = { package = "gstreamer-audio", version = "0.21" }
gst-base = { package = "gstreamer-base", version = "0.21" }
gst-gl = { package = "gstreamer-gl", version = "0.21" }
gst-player = { package = "gstreamer-player", version = "0.21" }
gst-sdp = { package = "gstreamer-sdp", version = "0.21" }
gst-video = { package = "gstreamer-video", version = "0.21" }
gst-webrtc = { package = "gstreamer-webrtc", version = "0.21", features = ["v1_18"] }
gstreamer-gl-egl = { version = "0.21" }
gstreamer-gl-wayland = { version = "0.21" }
gstreamer-gl-x11 = { version = "0.21" }
gstreamer-sys = "0.21"
glib = "0.19"
glib-sys = "0.19"
gst = { package = "gstreamer", version = "0.22" }
gst-app = { package = "gstreamer-app", version = "0.22" }
gst-audio = { package = "gstreamer-audio", version = "0.22" }
gst-base = { package = "gstreamer-base", version = "0.22" }
gst-gl = { package = "gstreamer-gl", version = "0.22" }
gst-player = { package = "gstreamer-player", version = "0.22" }
gst-sdp = { package = "gstreamer-sdp", version = "0.22" }
gst-video = { package = "gstreamer-video", version = "0.22" }
gst-webrtc = { package = "gstreamer-webrtc", version = "0.22", features = [
"v1_18",
] }
gstreamer-gl-egl = { version = "0.22" }
gstreamer-gl-wayland = { version = "0.22" }
gstreamer-gl-x11 = { version = "0.22" }
gstreamer-sys = "0.22"
ipc-channel = "0.18"

[patch."https://github.com/servo/webrender"]
webrender = { git = "https://github.com/jdm/webrender", branch = "crash-backtrace" }
webrender_api = { git = "https://github.com/jdm/webrender", branch = "crash-backtrace" }

9 changes: 6 additions & 3 deletions backends/gstreamer/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ path = "lib.rs"

[dependencies]
byte-slice-cast = "0.2"
glib = "0.18"
glib-sys = "0.18"
glib = { workspace = true }
glib-sys = { workspace = true }
gst = { workspace = true }
gst-app = { workspace = true }
gst-audio = { workspace = true }
Expand All @@ -37,7 +37,10 @@ servo-media-webrtc = { path = "../../webrtc" }
url = "2.0"

[target.'cfg(any(target_os = "linux", target_os = "dragonfly", target_os = "freebsd", target_os = "netbsd", target_os = "openbsd"))'.dependencies]
servo-media-gstreamer-render-unix = { path = "render-unix", features = ["gl-egl", "gl-x11"] }
servo-media-gstreamer-render-unix = { path = "render-unix", features = [
"gl-egl",
"gl-x11",
] }

[target.'cfg(target_os = "android")'.dependencies]
servo-media-gstreamer-render-android = { path = "render-android" }
2 changes: 1 addition & 1 deletion backends/gstreamer/datachannel.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use glib::{ObjectExt, ToSendValue};
use glib::prelude::*;
use gst_webrtc::{WebRTCDataChannel, WebRTCDataChannelState};
use servo_media_webrtc::thread::InternalEvent;
use servo_media_webrtc::WebRtcController as WebRtcThread;
Expand Down
3 changes: 1 addition & 2 deletions backends/gstreamer/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,12 @@ mod source;
pub mod webrtc;

use device_monitor::GStreamerDeviceMonitor;
use glib::once_cell::sync::Lazy;
use gst::prelude::*;
use ipc_channel::ipc::IpcSender;
use log::warn;
use media_stream::GStreamerMediaStream;
use mime::Mime;
use once_cell::sync::OnceCell;
use once_cell::sync::{Lazy, OnceCell};
use registry_scanner::GSTREAMER_REGISTRY_SCANNER;
use servo_media::{Backend, BackendInit, SupportsMediaType};
use servo_media_audio::context::{AudioContext, AudioContextOptions};
Expand Down
2 changes: 1 addition & 1 deletion backends/gstreamer/media_stream.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use super::BACKEND_BASE_TIME;
use glib::once_cell::sync::Lazy;
use gst;
use gst::prelude::*;
use once_cell::sync::Lazy;
use servo_media_streams::registry::{
get_stream, register_stream, unregister_stream, MediaStreamId,
};
Expand Down
4 changes: 2 additions & 2 deletions backends/gstreamer/media_stream_source.rs
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
use crate::media_stream::{GStreamerMediaStream, RTP_CAPS_OPUS, RTP_CAPS_VP8};
use glib::once_cell::sync::Lazy;
use glib::subclass::prelude::*;
use gst::prelude::*;
use gst::subclass::prelude::*;
use gst_base::UniqueFlowCombiner;
use once_cell::sync::Lazy;
use servo_media_streams::{MediaStream, MediaStreamType};
use std::sync::atomic::{AtomicBool, Ordering};
use std::sync::{Arc, Mutex};
Expand Down Expand Up @@ -317,7 +317,7 @@ pub fn register_servo_media_stream_src() -> Result<(), glib::BoolError> {
gst::Element::register(
None,
"servomediastreamsrc",
gst::Rank::None,
gst::Rank::NONE,
ServoMediaStreamSrc::static_type(),
)
}
12 changes: 6 additions & 6 deletions backends/gstreamer/registry_scanner.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use glib::once_cell::sync::Lazy;
use once_cell::sync::Lazy;
use std::collections::HashSet;
use std::str::FromStr;

Expand Down Expand Up @@ -38,23 +38,23 @@ impl GStreamerRegistryScanner {
fn initialize(&mut self) {
let audio_decoder_factories = gst::ElementFactory::factories_with_type(
gst::ElementFactoryType::DECODER | gst::ElementFactoryType::MEDIA_AUDIO,
gst::Rank::Marginal,
gst::Rank::MARGINAL,
);
let audio_parser_factories = gst::ElementFactory::factories_with_type(
gst::ElementFactoryType::PARSER | gst::ElementFactoryType::MEDIA_AUDIO,
gst::Rank::None,
gst::Rank::NONE,
);
let video_decoder_factories = gst::ElementFactory::factories_with_type(
gst::ElementFactoryType::DECODER | gst::ElementFactoryType::MEDIA_VIDEO,
gst::Rank::Marginal,
gst::Rank::MARGINAL,
);
let video_parser_factories = gst::ElementFactory::factories_with_type(
gst::ElementFactoryType::PARSER | gst::ElementFactoryType::MEDIA_VIDEO,
gst::Rank::Marginal,
gst::Rank::MARGINAL,
);
let demux_factories = gst::ElementFactory::factories_with_type(
gst::ElementFactoryType::DEMUXER,
gst::Rank::Marginal,
gst::Rank::MARGINAL,
);

if has_element_for_media_type(&audio_decoder_factories, "audio/mpeg, mpegversion=(int)4") {
Expand Down
10 changes: 6 additions & 4 deletions backends/gstreamer/render-android/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,14 @@ use std::sync::{Arc, Mutex};

struct GStreamerBuffer {
is_external_oes: bool,
frame: gst_video::VideoFrame<gst_video::video_frame::Readable>,
frame: gst_gl::GLVideoFrame<gst_gl::gl_video_frame::Readable>,
}

impl Buffer for GStreamerBuffer {
fn to_vec(&self) -> Result<VideoFrameData, ()> {
// packed formats are guaranteed to be in a single plane
if self.frame.format() == gst_video::VideoFormat::Rgba {
let tex_id = self.frame.texture_id(0).ok_or_else(|| ())?;
let tex_id = self.frame.texture_id(0).map_err(|_| ())?;
Ok(if self.is_external_oes {
VideoFrameData::OESTexture(tex_id)
} else {
Expand Down Expand Up @@ -146,7 +146,7 @@ impl Render for RenderAndroid {
}

let frame =
gst_video::VideoFrame::from_buffer_readable_gl(buffer, &info).or_else(|_| Err(()))?;
gst_gl::GLVideoFrame::from_buffer_readable(buffer, &info).or_else(|_| Err(()))?;

if self.gst_context.lock().unwrap().is_some() {
if let Some(sync_meta) = frame.buffer().meta::<gst_gl::GLSyncMeta>() {
Expand Down Expand Up @@ -192,7 +192,9 @@ impl Render for RenderAndroid {
.name("servo-media-vsink")
.property("sink", &appsink)
.build()
.map_err(|error| PlayerError::Backend(format!("glupload creation failed: {error:?}")))?;
.map_err(|error| {
PlayerError::Backend(format!("glupload creation failed: {error:?}"))
})?;

pipeline.set_property("video-sink", &vsinkbin);

Expand Down
4 changes: 2 additions & 2 deletions backends/gstreamer/render-unix/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,12 @@ name = "servo_media_gstreamer_render_unix"
path = "lib.rs"

[dependencies]
glib = "0.18"
glib = { workspace = true }
gst = { workspace = true }
gst-gl = { workspace = true }
gstreamer-gl-egl = { workspace = true, optional = true }
gstreamer-gl-x11 = { workspace = true, optional = true }
gstreamer-gl-wayland = { workspace = true, optional = true }
gst-video = { package = "gstreamer-video", version = "0.21" }
gst-video = { workspace = true }
sm-player = { package = "servo-media-player", path = "../../../player" }
sm-gst-render = { package = "servo-media-gstreamer-render", path = "../render" }
11 changes: 6 additions & 5 deletions backends/gstreamer/render-unix/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,14 @@ use std::sync::{Arc, Mutex};

struct GStreamerBuffer {
is_external_oes: bool,
frame: gst_video::VideoFrame<gst_video::video_frame::Readable>,
frame: gst_gl::GLVideoFrame<gst_gl::gl_video_frame::Readable>,
}

impl Buffer for GStreamerBuffer {
fn to_vec(&self) -> Result<VideoFrameData, ()> {
// packed formats are guaranteed to be in a single plane
if self.frame.format() == gst_video::VideoFormat::Rgba {
let tex_id = self.frame.texture_id(0).ok_or(())?;
let tex_id = self.frame.texture_id(0).map_err(|_| ())?;
Ok(if self.is_external_oes {
VideoFrameData::OESTexture(tex_id)
} else {
Expand Down Expand Up @@ -191,8 +191,7 @@ impl Render for RenderUnix {
.is_some();

let info = gst_video::VideoInfo::from_caps(caps).map_err(|_| ())?;
let frame =
gst_video::VideoFrame::from_buffer_readable_gl(buffer, &info).map_err(|_| ())?;
let frame = gst_gl::GLVideoFrame::from_buffer_readable(buffer, &info).map_err(|_| ())?;

VideoFrame::new(
info.width() as i32,
Expand All @@ -218,7 +217,9 @@ impl Render for RenderUnix {
let vsinkbin = gst::ElementFactory::make("glsinkbin")
.name("servo-media-vsink")
.build()
.map_err(|error| PlayerError::Backend(format!("glupload creation failed: {error:?}")))?;
.map_err(|error| {
PlayerError::Backend(format!("glupload creation failed: {error:?}"))
})?;

let caps = gst::Caps::builder("video/x-raw")
.features([gst_gl::CAPS_FEATURE_MEMORY_GL_MEMORY])
Expand Down
6 changes: 3 additions & 3 deletions backends/gstreamer/source.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use glib::once_cell::sync::Lazy;
use glib::subclass::prelude::*;
use gst::prelude::*;
use gst::subclass::prelude::*;
use once_cell::sync::Lazy;
use std::convert::TryFrom;
use std::sync::atomic::{AtomicBool, Ordering};
use std::sync::Mutex;
Expand Down Expand Up @@ -242,7 +242,7 @@ mod imp {
.expect("Could not create appsrc element");

let pad_templ = klass.pad_template("src").unwrap();
let ghost_pad = gst::GhostPad::builder_from_template(&pad_templ).name("src")
let ghost_pad = gst::GhostPad::builder_from_template(&pad_templ)
.query_function(|pad, parent, query| {
ServoSrc::catch_panic_pad_function(
parent,
Expand Down Expand Up @@ -404,5 +404,5 @@ impl ServoSrc {
// under the name "servosrc" for being able to instantiate it via e.g.
// gst::ElementFactory::make().
pub fn register_servo_src() -> Result<(), glib::BoolError> {
gst::Element::register(None, "servosrc", gst::Rank::None, ServoSrc::static_type())
gst::Element::register(None, "servosrc", gst::Rank::NONE, ServoSrc::static_type())
}
Loading