gstreamer-rtsp-server: Update manual code to 2018 edition

This commit is contained in:
Sebastian Dröge 2020-11-22 12:45:51 +02:00
parent 1e9d3e717c
commit 1099955249
18 changed files with 511 additions and 623 deletions

View file

@ -11,39 +11,33 @@ homepage = "https://gstreamer.freedesktop.org"
documentation = "https://gstreamer.pages.freedesktop.org/gstreamer-rs/gstreamer_rtsp_server/" documentation = "https://gstreamer.pages.freedesktop.org/gstreamer-rs/gstreamer_rtsp_server/"
keywords = ["gstreamer", "multimedia", "audio", "video", "gnome"] keywords = ["gstreamer", "multimedia", "audio", "video", "gnome"]
build = "build.rs" build = "build.rs"
edition = "2018"
[dependencies] [dependencies]
bitflags = "1.0" bitflags = "1.0"
libc = "0.2" libc = "0.2"
once_cell = "1.0" once_cell = "1.0"
glib-sys = { git = "https://github.com/gtk-rs/gtk-rs" } ffi = { package = "gstreamer-rtsp-server-sys", path = "../gstreamer-rtsp-server/sys", features = ["v1_8"] }
gio-sys = { git = "https://github.com/gtk-rs/gtk-rs" }
gobject-sys = { git = "https://github.com/gtk-rs/gtk-rs" }
gstreamer-sys = { path = "../gstreamer/sys", features = ["v1_8"] }
gstreamer-sdp-sys = { path = "../gstreamer-sdp/sys", features = ["v1_8"] }
gstreamer-rtsp-sys = { path = "../gstreamer-rtsp/sys", features = ["v1_8"] }
gstreamer-rtsp-server-sys = { path = "../gstreamer-rtsp-server/sys", features = ["v1_8"] }
gstreamer-net-sys = { path = "../gstreamer-net/sys", features = ["v1_8"] }
glib = { git = "https://github.com/gtk-rs/gtk-rs" } glib = { git = "https://github.com/gtk-rs/gtk-rs" }
gio = { git = "https://github.com/gtk-rs/gtk-rs" } gio = { git = "https://github.com/gtk-rs/gtk-rs" }
gstreamer = { path = "../gstreamer" } gst = { package = "gstreamer", path = "../gstreamer" }
gstreamer-sdp = { path = "../gstreamer-sdp" } gst-sdp = { package = "gstreamer-sdp", path = "../gstreamer-sdp" }
gstreamer-rtsp = { path = "../gstreamer-rtsp" } gst-rtsp = { package = "gstreamer-rtsp", path = "../gstreamer-rtsp" }
gstreamer-net = { path = "../gstreamer-net" } gst-net = { package = "gstreamer-net", path = "../gstreamer-net" }
[build-dependencies] [build-dependencies]
gstreamer-rs-lgpl-docs = { path = "../docs", optional = true } gstreamer-rs-lgpl-docs = { path = "../docs", optional = true }
[features] [features]
default = [] default = []
v1_10 = ["gstreamer/v1_10", "gstreamer-sdp/v1_10", "gstreamer-rtsp/v1_10", "gstreamer-net/v1_10", "gstreamer-rtsp-server-sys/v1_10"] v1_10 = ["gst/v1_10", "gst-sdp/v1_10", "gst-rtsp/v1_10", "gst-net/v1_10", "ffi/v1_10"]
v1_12 = ["gstreamer/v1_12", "gstreamer-sdp/v1_12", "gstreamer-rtsp/v1_12", "gstreamer-net/v1_12", "gstreamer-rtsp-server-sys/v1_12", "v1_10"] v1_12 = ["gst/v1_12", "gst-sdp/v1_12", "gst-rtsp/v1_12", "gst-net/v1_12", "ffi/v1_12", "v1_10"]
v1_14 = ["gstreamer/v1_14", "gstreamer-sdp/v1_14", "gstreamer-rtsp/v1_14", "gstreamer-net/v1_14", "gstreamer-rtsp-server-sys/v1_14", "v1_12"] v1_14 = ["gst/v1_14", "gst-sdp/v1_14", "gst-rtsp/v1_14", "gst-net/v1_14", "ffi/v1_14", "v1_12"]
v1_16 = ["gstreamer/v1_16", "gstreamer-sdp/v1_16", "gstreamer-rtsp/v1_16", "gstreamer-net/v1_16", "gstreamer-rtsp-server-sys/v1_16", "v1_14"] v1_16 = ["gst/v1_16", "gst-sdp/v1_16", "gst-rtsp/v1_16", "gst-net/v1_16", "ffi/v1_16", "v1_14"]
v1_18 = ["gstreamer/v1_18", "gstreamer-sdp/v1_18", "gstreamer-rtsp/v1_18", "gstreamer-net/v1_18", "gstreamer-rtsp-server-sys/v1_18", "v1_16"] v1_18 = ["gst/v1_18", "gst-sdp/v1_18", "gst-rtsp/v1_18", "gst-net/v1_18", "ffi/v1_18", "v1_16"]
embed-lgpl-docs = ["gstreamer-rs-lgpl-docs"] embed-lgpl-docs = ["gstreamer-rs-lgpl-docs"]
purge-lgpl-docs = ["gstreamer-rs-lgpl-docs"] purge-lgpl-docs = ["gstreamer-rs-lgpl-docs"]
dox = ["v1_18", "gstreamer-rtsp-server-sys/dox", "glib/dox", "gio/dox", "gstreamer/dox", "gstreamer-sdp/dox", "gstreamer-rtsp/dox", "gstreamer-net/dox"] dox = ["v1_18", "ffi/dox", "glib/dox", "gio/dox", "gst/dox", "gst-sdp/dox", "gst-rtsp/dox", "gst-net/dox"]
[package.metadata.docs.rs] [package.metadata.docs.rs]
features = ["dox", "embed-lgpl-docs"] features = ["dox", "embed-lgpl-docs"]

View file

@ -8,32 +8,11 @@
#![cfg_attr(feature = "dox", feature(doc_cfg))] #![cfg_attr(feature = "dox", feature(doc_cfg))]
#[macro_use] pub use ffi;
extern crate bitflags;
extern crate libc;
extern crate once_cell;
extern crate gio;
extern crate gio_sys as gio_sys;
use std::ffi::CStr;
#[macro_use]
extern crate glib;
extern crate glib_sys;
extern crate gobject_sys;
#[macro_use]
extern crate gstreamer as gst;
extern crate gstreamer_net as gst_net;
extern crate gstreamer_net_sys as gst_net_sys;
extern crate gstreamer_rtsp as gst_rtsp;
extern crate gstreamer_rtsp_server_sys as gst_rtsp_server_sys;
extern crate gstreamer_rtsp_sys as gst_rtsp_sys;
extern crate gstreamer_sdp as gst_sdp;
extern crate gstreamer_sdp_sys as gst_sdp_sys;
extern crate gstreamer_sys as gst_sys;
macro_rules! assert_initialized_main_thread { macro_rules! assert_initialized_main_thread {
() => { () => {
if unsafe { ::gst_sys::gst_is_initialized() } != ::glib_sys::GTRUE { if unsafe { gst::ffi::gst_is_initialized() } != glib::ffi::GTRUE {
panic!("GStreamer has not been initialized. Call `gst::init` first."); panic!("GStreamer has not been initialized. Call `gst::init` first.");
} }
}; };
@ -49,7 +28,7 @@ macro_rules! skip_assert_initialized {
#[allow(clippy::type_complexity)] #[allow(clippy::type_complexity)]
#[allow(clippy::let_and_return)] #[allow(clippy::let_and_return)]
mod auto; mod auto;
pub use auto::*; pub use crate::auto::*;
mod rtsp_address_pool; mod rtsp_address_pool;
mod rtsp_auth; mod rtsp_auth;
@ -66,74 +45,76 @@ mod rtsp_token;
pub mod subclass; pub mod subclass;
pub use rtsp_address_pool::RTSPAddressPoolExtManual; pub use crate::rtsp_address_pool::RTSPAddressPoolExtManual;
pub use rtsp_auth::RTSPAuthExtManual; pub use crate::rtsp_auth::RTSPAuthExtManual;
pub use rtsp_client::RTSPClientExtManual; pub use crate::rtsp_client::RTSPClientExtManual;
pub use rtsp_media::RTSPMediaExtManual; pub use crate::rtsp_media::RTSPMediaExtManual;
pub use rtsp_media_factory::RTSPMediaFactoryExtManual; pub use crate::rtsp_media_factory::RTSPMediaFactoryExtManual;
pub use rtsp_server::RTSPServerExtManual; pub use crate::rtsp_server::RTSPServerExtManual;
pub use rtsp_session_pool::RTSPSessionPoolExtManual; pub use crate::rtsp_session_pool::RTSPSessionPoolExtManual;
pub use rtsp_stream::RTSPStreamExtManual; pub use crate::rtsp_stream::RTSPStreamExtManual;
pub use rtsp_stream_transport::RTSPStreamTransportExtManual; pub use crate::rtsp_stream_transport::RTSPStreamTransportExtManual;
pub use rtsp_thread::*; pub use crate::rtsp_thread::*;
pub use rtsp_context::*; pub use crate::rtsp_context::*;
pub use rtsp_token::*; pub use crate::rtsp_token::*;
use once_cell::sync::Lazy; use once_cell::sync::Lazy;
use std::ffi::CStr;
pub static RTSP_ADDRESS_POOL_ANY_IPV4: Lazy<&'static str> = Lazy::new(|| unsafe { pub static RTSP_ADDRESS_POOL_ANY_IPV4: Lazy<&'static str> = Lazy::new(|| unsafe {
CStr::from_ptr(gst_rtsp_server_sys::GST_RTSP_ADDRESS_POOL_ANY_IPV4) CStr::from_ptr(ffi::GST_RTSP_ADDRESS_POOL_ANY_IPV4)
.to_str() .to_str()
.unwrap() .unwrap()
}); });
pub static RTSP_ADDRESS_POOL_ANY_IPV6: Lazy<&'static str> = Lazy::new(|| unsafe { pub static RTSP_ADDRESS_POOL_ANY_IPV6: Lazy<&'static str> = Lazy::new(|| unsafe {
CStr::from_ptr(gst_rtsp_server_sys::GST_RTSP_ADDRESS_POOL_ANY_IPV6) CStr::from_ptr(ffi::GST_RTSP_ADDRESS_POOL_ANY_IPV6)
.to_str() .to_str()
.unwrap() .unwrap()
}); });
pub static RTSP_AUTH_CHECK_CONNECT: Lazy<&'static str> = Lazy::new(|| unsafe { pub static RTSP_AUTH_CHECK_CONNECT: Lazy<&'static str> = Lazy::new(|| unsafe {
CStr::from_ptr(gst_rtsp_server_sys::GST_RTSP_AUTH_CHECK_CONNECT) CStr::from_ptr(ffi::GST_RTSP_AUTH_CHECK_CONNECT)
.to_str() .to_str()
.unwrap() .unwrap()
}); });
pub static RTSP_AUTH_CHECK_MEDIA_FACTORY_ACCESS: Lazy<&'static str> = Lazy::new(|| unsafe { pub static RTSP_AUTH_CHECK_MEDIA_FACTORY_ACCESS: Lazy<&'static str> = Lazy::new(|| unsafe {
CStr::from_ptr(gst_rtsp_server_sys::GST_RTSP_AUTH_CHECK_MEDIA_FACTORY_ACCESS) CStr::from_ptr(ffi::GST_RTSP_AUTH_CHECK_MEDIA_FACTORY_ACCESS)
.to_str() .to_str()
.unwrap() .unwrap()
}); });
pub static RTSP_AUTH_CHECK_MEDIA_FACTORY_CONSTRUCT: Lazy<&'static str> = Lazy::new(|| unsafe { pub static RTSP_AUTH_CHECK_MEDIA_FACTORY_CONSTRUCT: Lazy<&'static str> = Lazy::new(|| unsafe {
CStr::from_ptr(gst_rtsp_server_sys::GST_RTSP_AUTH_CHECK_MEDIA_FACTORY_CONSTRUCT) CStr::from_ptr(ffi::GST_RTSP_AUTH_CHECK_MEDIA_FACTORY_CONSTRUCT)
.to_str() .to_str()
.unwrap() .unwrap()
}); });
pub static RTSP_AUTH_CHECK_TRANSPORT_CLIENT_SETTINGS: Lazy<&'static str> = Lazy::new(|| unsafe { pub static RTSP_AUTH_CHECK_TRANSPORT_CLIENT_SETTINGS: Lazy<&'static str> = Lazy::new(|| unsafe {
CStr::from_ptr(gst_rtsp_server_sys::GST_RTSP_AUTH_CHECK_TRANSPORT_CLIENT_SETTINGS) CStr::from_ptr(ffi::GST_RTSP_AUTH_CHECK_TRANSPORT_CLIENT_SETTINGS)
.to_str() .to_str()
.unwrap() .unwrap()
}); });
pub static RTSP_AUTH_CHECK_URL: Lazy<&'static str> = Lazy::new(|| unsafe { pub static RTSP_AUTH_CHECK_URL: Lazy<&'static str> = Lazy::new(|| unsafe {
CStr::from_ptr(gst_rtsp_server_sys::GST_RTSP_AUTH_CHECK_URL) CStr::from_ptr(ffi::GST_RTSP_AUTH_CHECK_URL)
.to_str() .to_str()
.unwrap() .unwrap()
}); });
pub static RTSP_PERM_MEDIA_FACTORY_ACCESS: Lazy<&'static str> = Lazy::new(|| unsafe { pub static RTSP_PERM_MEDIA_FACTORY_ACCESS: Lazy<&'static str> = Lazy::new(|| unsafe {
CStr::from_ptr(gst_rtsp_server_sys::GST_RTSP_PERM_MEDIA_FACTORY_ACCESS) CStr::from_ptr(ffi::GST_RTSP_PERM_MEDIA_FACTORY_ACCESS)
.to_str() .to_str()
.unwrap() .unwrap()
}); });
pub static RTSP_PERM_MEDIA_FACTORY_CONSTRUCT: Lazy<&'static str> = Lazy::new(|| unsafe { pub static RTSP_PERM_MEDIA_FACTORY_CONSTRUCT: Lazy<&'static str> = Lazy::new(|| unsafe {
CStr::from_ptr(gst_rtsp_server_sys::GST_RTSP_PERM_MEDIA_FACTORY_CONSTRUCT) CStr::from_ptr(ffi::GST_RTSP_PERM_MEDIA_FACTORY_CONSTRUCT)
.to_str() .to_str()
.unwrap() .unwrap()
}); });
pub static RTSP_TOKEN_MEDIA_FACTORY_ROLE: Lazy<&'static str> = Lazy::new(|| unsafe { pub static RTSP_TOKEN_MEDIA_FACTORY_ROLE: Lazy<&'static str> = Lazy::new(|| unsafe {
CStr::from_ptr(gst_rtsp_server_sys::GST_RTSP_TOKEN_MEDIA_FACTORY_ROLE) CStr::from_ptr(ffi::GST_RTSP_TOKEN_MEDIA_FACTORY_ROLE)
.to_str() .to_str()
.unwrap() .unwrap()
}); });
pub static RTSP_TOKEN_TRANSPORT_CLIENT_SETTINGS: Lazy<&'static str> = Lazy::new(|| unsafe { pub static RTSP_TOKEN_TRANSPORT_CLIENT_SETTINGS: Lazy<&'static str> = Lazy::new(|| unsafe {
CStr::from_ptr(gst_rtsp_server_sys::GST_RTSP_TOKEN_TRANSPORT_CLIENT_SETTINGS) CStr::from_ptr(ffi::GST_RTSP_TOKEN_TRANSPORT_CLIENT_SETTINGS)
.to_str() .to_str()
.unwrap() .unwrap()
}); });
@ -144,15 +125,15 @@ pub mod prelude {
pub use glib::prelude::*; pub use glib::prelude::*;
pub use gst::prelude::*; pub use gst::prelude::*;
pub use auto::traits::*; pub use crate::auto::traits::*;
pub use rtsp_address_pool::RTSPAddressPoolExtManual; pub use crate::rtsp_address_pool::RTSPAddressPoolExtManual;
pub use rtsp_auth::RTSPAuthExtManual; pub use crate::rtsp_auth::RTSPAuthExtManual;
pub use rtsp_client::RTSPClientExtManual; pub use crate::rtsp_client::RTSPClientExtManual;
pub use rtsp_media::RTSPMediaExtManual; pub use crate::rtsp_media::RTSPMediaExtManual;
pub use rtsp_media_factory::RTSPMediaFactoryExtManual; pub use crate::rtsp_media_factory::RTSPMediaFactoryExtManual;
pub use rtsp_server::RTSPServerExtManual; pub use crate::rtsp_server::RTSPServerExtManual;
pub use rtsp_session_pool::RTSPSessionPoolExtManual; pub use crate::rtsp_session_pool::RTSPSessionPoolExtManual;
pub use rtsp_stream::RTSPStreamExtManual; pub use crate::rtsp_stream::RTSPStreamExtManual;
pub use rtsp_stream_transport::RTSPStreamTransportExtManual; pub use crate::rtsp_stream_transport::RTSPStreamTransportExtManual;
} }

View file

@ -1,10 +1,9 @@
use crate::RTSPAddress;
use crate::RTSPAddressPool;
use crate::RTSPAddressPoolResult;
use glib::object::IsA; use glib::object::IsA;
use glib::translate::*; use glib::translate::*;
use gst_rtsp_server_sys;
use std::ptr; use std::ptr;
use RTSPAddress;
use RTSPAddressPool;
use RTSPAddressPoolResult;
pub trait RTSPAddressPoolExtManual: 'static { pub trait RTSPAddressPoolExtManual: 'static {
fn reserve_address( fn reserve_address(
@ -26,7 +25,7 @@ impl<O: IsA<RTSPAddressPool>> RTSPAddressPoolExtManual for O {
) -> Result<RTSPAddress, RTSPAddressPoolResult> { ) -> Result<RTSPAddress, RTSPAddressPoolResult> {
unsafe { unsafe {
let mut address = ptr::null_mut(); let mut address = ptr::null_mut();
let ret = from_glib(gst_rtsp_server_sys::gst_rtsp_address_pool_reserve_address( let ret = from_glib(ffi::gst_rtsp_address_pool_reserve_address(
self.as_ref().to_glib_none().0, self.as_ref().to_glib_none().0,
ip_address.to_glib_none().0, ip_address.to_glib_none().0,
port, port,

View file

@ -3,13 +3,12 @@ use glib::object::IsA;
use glib::signal::connect_raw; use glib::signal::connect_raw;
use glib::signal::SignalHandlerId; use glib::signal::SignalHandlerId;
use glib::translate::*; use glib::translate::*;
use gst_rtsp_server_sys;
use std::boxed::Box as Box_; use std::boxed::Box as Box_;
use std::mem::transmute; use std::mem::transmute;
use RTSPAuth; use crate::RTSPAuth;
use RTSPToken; use crate::RTSPToken;
pub trait RTSPAuthExtManual: 'static { pub trait RTSPAuthExtManual: 'static {
fn set_default_token(&self, token: Option<&mut RTSPToken>); fn set_default_token(&self, token: Option<&mut RTSPToken>);
@ -33,7 +32,7 @@ pub trait RTSPAuthExtManual: 'static {
impl<O: IsA<RTSPAuth>> RTSPAuthExtManual for O { impl<O: IsA<RTSPAuth>> RTSPAuthExtManual for O {
fn set_default_token(&self, mut token: Option<&mut RTSPToken>) { fn set_default_token(&self, mut token: Option<&mut RTSPToken>) {
unsafe { unsafe {
gst_rtsp_server_sys::gst_rtsp_auth_set_default_token( ffi::gst_rtsp_auth_set_default_token(
self.as_ref().to_glib_none().0, self.as_ref().to_glib_none().0,
token.to_glib_none_mut().0, token.to_glib_none_mut().0,
); );
@ -80,12 +79,12 @@ unsafe extern "C" fn accept_certificate_trampoline<
+ Sync + Sync
+ 'static, + 'static,
>( >(
this: *mut gst_rtsp_server_sys::GstRTSPAuth, this: *mut ffi::GstRTSPAuth,
connection: *mut gio_sys::GTlsConnection, connection: *mut gio::ffi::GTlsConnection,
peer_cert: *mut gio_sys::GTlsCertificate, peer_cert: *mut gio::ffi::GTlsCertificate,
errors: gio_sys::GTlsCertificateFlags, errors: gio::ffi::GTlsCertificateFlags,
f: glib_sys::gpointer, f: glib::ffi::gpointer,
) -> glib_sys::gboolean ) -> glib::ffi::gboolean
where where
P: IsA<RTSPAuth>, P: IsA<RTSPAuth>,
{ {

View file

@ -1,9 +1,7 @@
use glib; use crate::RTSPClient;
use glib::object::IsA; use glib::object::IsA;
use glib::source::SourceId; use glib::source::SourceId;
use glib::translate::*; use glib::translate::*;
use gst_rtsp_server_sys;
use RTSPClient;
pub trait RTSPClientExtManual: 'static { pub trait RTSPClientExtManual: 'static {
fn attach(&self, context: Option<&glib::MainContext>) -> SourceId; fn attach(&self, context: Option<&glib::MainContext>) -> SourceId;
@ -12,7 +10,7 @@ pub trait RTSPClientExtManual: 'static {
impl<O: IsA<RTSPClient>> RTSPClientExtManual for O { impl<O: IsA<RTSPClient>> RTSPClientExtManual for O {
fn attach(&self, context: Option<&glib::MainContext>) -> SourceId { fn attach(&self, context: Option<&glib::MainContext>) -> SourceId {
unsafe { unsafe {
from_glib(gst_rtsp_server_sys::gst_rtsp_client_attach( from_glib(ffi::gst_rtsp_client_attach(
self.as_ref().to_glib_none().0, self.as_ref().to_glib_none().0,
context.to_glib_none().0, context.to_glib_none().0,
)) ))

View file

@ -7,16 +7,15 @@
// except according to those terms. // except according to those terms.
use glib::translate::*; use glib::translate::*;
use gst_rtsp_server_sys;
use std::ptr; use std::ptr;
#[derive(Debug, PartialEq, Eq)] #[derive(Debug, PartialEq, Eq)]
pub struct RTSPContext(ptr::NonNull<gst_rtsp_server_sys::GstRTSPContext>); pub struct RTSPContext(ptr::NonNull<ffi::GstRTSPContext>);
impl RTSPContext { impl RTSPContext {
pub fn with_current_context<F: FnOnce(&RTSPContext) -> T, T>(func: F) -> Option<T> { pub fn with_current_context<F: FnOnce(&RTSPContext) -> T, T>(func: F) -> Option<T> {
unsafe { unsafe {
let ptr = gst_rtsp_server_sys::gst_rtsp_context_get_current(); let ptr = ffi::gst_rtsp_context_get_current();
if ptr.is_null() { if ptr.is_null() {
return None; return None;
} }
@ -30,23 +29,23 @@ impl RTSPContext {
} }
#[doc(hidden)] #[doc(hidden)]
impl FromGlibPtrBorrow<*mut gst_rtsp_server_sys::GstRTSPContext> for RTSPContext { impl FromGlibPtrBorrow<*mut ffi::GstRTSPContext> for RTSPContext {
#[inline] #[inline]
unsafe fn from_glib_borrow(ptr: *mut gst_rtsp_server_sys::GstRTSPContext) -> Borrowed<Self> { unsafe fn from_glib_borrow(ptr: *mut ffi::GstRTSPContext) -> Borrowed<Self> {
assert!(!ptr.is_null()); assert!(!ptr.is_null());
Borrowed::new(RTSPContext(ptr::NonNull::new_unchecked(ptr))) Borrowed::new(RTSPContext(ptr::NonNull::new_unchecked(ptr)))
} }
} }
#[doc(hidden)] #[doc(hidden)]
impl<'a> ToGlibPtr<'a, *mut gst_rtsp_server_sys::GstRTSPContext> for RTSPContext { impl<'a> ToGlibPtr<'a, *mut ffi::GstRTSPContext> for RTSPContext {
type Storage = &'a RTSPContext; type Storage = &'a RTSPContext;
fn to_glib_none(&'a self) -> Stash<'a, *mut gst_rtsp_server_sys::GstRTSPContext, Self> { fn to_glib_none(&'a self) -> Stash<'a, *mut ffi::GstRTSPContext, Self> {
Stash(self.0.as_ptr(), self) Stash(self.0.as_ptr(), self)
} }
fn to_glib_full(&self) -> *mut gst_rtsp_server_sys::GstRTSPContext { fn to_glib_full(&self) -> *mut ffi::GstRTSPContext {
unimplemented!() unimplemented!()
} }
} }

View file

@ -1,9 +1,7 @@
use glib::object::IsA; use glib::object::IsA;
use glib::translate::*; use glib::translate::*;
use gst;
use gst_rtsp_server_sys;
use RTSPMedia; use crate::RTSPMedia;
pub trait RTSPMediaExtManual: 'static { pub trait RTSPMediaExtManual: 'static {
fn take_pipeline<P: IsA<gst::Pipeline>>(&self, pipeline: &P); fn take_pipeline<P: IsA<gst::Pipeline>>(&self, pipeline: &P);
@ -14,13 +12,10 @@ impl<O: IsA<RTSPMedia>> RTSPMediaExtManual for O {
unsafe { unsafe {
let pipeline = pipeline.as_ref().to_glib_full(); let pipeline = pipeline.as_ref().to_glib_full();
// See https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/merge_requests/109 // See https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/merge_requests/109
gobject_sys::g_object_force_floating(pipeline as *mut _); glib::gobject_ffi::g_object_force_floating(pipeline as *mut _);
gst_rtsp_server_sys::gst_rtsp_media_take_pipeline( ffi::gst_rtsp_media_take_pipeline(self.as_ref().to_glib_none().0, pipeline);
self.as_ref().to_glib_none().0, if glib::gobject_ffi::g_object_is_floating(pipeline as *mut _) != glib::ffi::GFALSE {
pipeline, glib::gobject_ffi::g_object_ref_sink(pipeline as *mut _);
);
if gobject_sys::g_object_is_floating(pipeline as *mut _) != glib_sys::GFALSE {
gobject_sys::g_object_ref_sink(pipeline as *mut _);
} }
} }
} }

View file

@ -6,18 +6,12 @@
// option. This file may not be copied, modified, or distributed // option. This file may not be copied, modified, or distributed
// except according to those terms. // except according to those terms.
use RTSPMediaFactory; use crate::RTSPMediaFactory;
#[cfg(any(feature = "v1_14", feature = "dox"))] #[cfg(any(feature = "v1_14", feature = "dox"))]
#[cfg_attr(feature = "dox", doc(cfg(feature = "v1_14")))] #[cfg_attr(feature = "dox", doc(cfg(feature = "v1_14")))]
use glib::translate::*; use glib::translate::*;
use glib::IsA; use glib::IsA;
#[cfg(any(feature = "v1_14", feature = "dox"))]
#[cfg_attr(feature = "dox", doc(cfg(feature = "v1_14")))]
use gst;
#[cfg(any(feature = "v1_14", feature = "dox"))]
#[cfg_attr(feature = "dox", doc(cfg(feature = "v1_14")))]
use gst_rtsp_server_sys;
pub trait RTSPMediaFactoryExtManual: 'static { pub trait RTSPMediaFactoryExtManual: 'static {
#[cfg(any(feature = "v1_14", feature = "dox"))] #[cfg(any(feature = "v1_14", feature = "dox"))]
@ -30,7 +24,7 @@ impl<O: IsA<RTSPMediaFactory>> RTSPMediaFactoryExtManual for O {
#[cfg_attr(feature = "dox", doc(cfg(feature = "v1_14")))] #[cfg_attr(feature = "dox", doc(cfg(feature = "v1_14")))]
fn add_role_from_structure(&self, structure: &gst::StructureRef) { fn add_role_from_structure(&self, structure: &gst::StructureRef) {
unsafe { unsafe {
gst_rtsp_server_sys::gst_rtsp_media_factory_add_role_from_structure( ffi::gst_rtsp_media_factory_add_role_from_structure(
self.as_ref().to_glib_none().0, self.as_ref().to_glib_none().0,
structure.as_mut_ptr(), structure.as_mut_ptr(),
); );

View file

@ -1,9 +1,7 @@
use glib; use crate::RTSPServer;
use glib::object::IsA; use glib::object::IsA;
use glib::source::SourceId; use glib::source::SourceId;
use glib::translate::*; use glib::translate::*;
use gst_rtsp_server_sys;
use RTSPServer;
pub trait RTSPServerExtManual: 'static { pub trait RTSPServerExtManual: 'static {
fn attach(&self, context: Option<&glib::MainContext>) -> SourceId; fn attach(&self, context: Option<&glib::MainContext>) -> SourceId;
@ -12,7 +10,7 @@ pub trait RTSPServerExtManual: 'static {
impl<O: IsA<RTSPServer>> RTSPServerExtManual for O { impl<O: IsA<RTSPServer>> RTSPServerExtManual for O {
fn attach(&self, context: Option<&glib::MainContext>) -> SourceId { fn attach(&self, context: Option<&glib::MainContext>) -> SourceId {
unsafe { unsafe {
from_glib(gst_rtsp_server_sys::gst_rtsp_server_attach( from_glib(ffi::gst_rtsp_server_attach(
self.as_ref().to_glib_none().0, self.as_ref().to_glib_none().0,
context.to_glib_none().0, context.to_glib_none().0,
)) ))

View file

@ -1,16 +1,13 @@
use glib; use crate::RTSPSessionPool;
use glib::ffi::{gboolean, gpointer};
use glib::object::IsA; use glib::object::IsA;
use glib::source::{Continue, Priority}; use glib::source::{Continue, Priority};
use glib::translate::*; use glib::translate::*;
use glib_sys;
use glib_sys::{gboolean, gpointer};
use gst_rtsp_server_sys;
use std::cell::RefCell; use std::cell::RefCell;
use std::mem::transmute; use std::mem::transmute;
use RTSPSessionPool;
unsafe extern "C" fn trampoline_watch<F: FnMut(&RTSPSessionPool) -> Continue + Send + 'static>( unsafe extern "C" fn trampoline_watch<F: FnMut(&RTSPSessionPool) -> Continue + Send + 'static>(
pool: *mut gst_rtsp_server_sys::GstRTSPSessionPool, pool: *mut ffi::GstRTSPSessionPool,
func: gpointer, func: gpointer,
) -> gboolean { ) -> gboolean {
let func: &RefCell<F> = &*(func as *const RefCell<F>); let func: &RefCell<F> = &*(func as *const RefCell<F>);
@ -44,22 +41,20 @@ impl<O: IsA<RTSPSessionPool>> RTSPSessionPoolExtManual for O {
{ {
skip_assert_initialized!(); skip_assert_initialized!();
unsafe { unsafe {
let source = gst_rtsp_server_sys::gst_rtsp_session_pool_create_watch( let source = ffi::gst_rtsp_session_pool_create_watch(self.as_ref().to_glib_none().0);
self.as_ref().to_glib_none().0, glib::ffi::g_source_set_callback(
);
glib_sys::g_source_set_callback(
source, source,
Some(transmute::< Some(transmute::<
_, _,
unsafe extern "C" fn(glib_sys::gpointer) -> i32, unsafe extern "C" fn(glib::ffi::gpointer) -> i32,
>(trampoline_watch::<F> as *const ())), >(trampoline_watch::<F> as *const ())),
into_raw_watch(func), into_raw_watch(func),
Some(destroy_closure_watch::<F>), Some(destroy_closure_watch::<F>),
); );
glib_sys::g_source_set_priority(source, priority.to_glib()); glib::ffi::g_source_set_priority(source, priority.to_glib());
if let Some(name) = name { if let Some(name) = name {
glib_sys::g_source_set_name(source, name.to_glib_none().0); glib::ffi::g_source_set_name(source, name.to_glib_none().0);
} }
from_glib_full(source) from_glib_full(source)

View file

@ -1,8 +1,6 @@
use crate::RTSPStream;
use glib::object::IsA; use glib::object::IsA;
use glib::translate::*; use glib::translate::*;
use gst;
use gst_rtsp_server_sys;
use RTSPStream;
pub trait RTSPStreamExtManual: 'static { pub trait RTSPStreamExtManual: 'static {
fn recv_rtcp(&self, buffer: &gst::Buffer) -> Result<gst::FlowSuccess, gst::FlowError>; fn recv_rtcp(&self, buffer: &gst::Buffer) -> Result<gst::FlowSuccess, gst::FlowError>;
@ -13,7 +11,7 @@ pub trait RTSPStreamExtManual: 'static {
impl<O: IsA<RTSPStream>> RTSPStreamExtManual for O { impl<O: IsA<RTSPStream>> RTSPStreamExtManual for O {
fn recv_rtcp(&self, buffer: &gst::Buffer) -> Result<gst::FlowSuccess, gst::FlowError> { fn recv_rtcp(&self, buffer: &gst::Buffer) -> Result<gst::FlowSuccess, gst::FlowError> {
let ret: gst::FlowReturn = unsafe { let ret: gst::FlowReturn = unsafe {
from_glib(gst_rtsp_server_sys::gst_rtsp_stream_recv_rtcp( from_glib(ffi::gst_rtsp_stream_recv_rtcp(
self.as_ref().to_glib_none().0, self.as_ref().to_glib_none().0,
buffer.to_glib_full(), buffer.to_glib_full(),
)) ))
@ -23,7 +21,7 @@ impl<O: IsA<RTSPStream>> RTSPStreamExtManual for O {
fn recv_rtp(&self, buffer: &gst::Buffer) -> Result<gst::FlowSuccess, gst::FlowError> { fn recv_rtp(&self, buffer: &gst::Buffer) -> Result<gst::FlowSuccess, gst::FlowError> {
let ret: gst::FlowReturn = unsafe { let ret: gst::FlowReturn = unsafe {
from_glib(gst_rtsp_server_sys::gst_rtsp_stream_recv_rtp( from_glib(ffi::gst_rtsp_stream_recv_rtp(
self.as_ref().to_glib_none().0, self.as_ref().to_glib_none().0,
buffer.to_glib_full(), buffer.to_glib_full(),
)) ))

View file

@ -1,8 +1,6 @@
use crate::RTSPStreamTransport;
use glib::object::IsA; use glib::object::IsA;
use glib::translate::*; use glib::translate::*;
use gst;
use gst_rtsp_server_sys;
use RTSPStreamTransport;
pub trait RTSPStreamTransportExtManual: 'static { pub trait RTSPStreamTransportExtManual: 'static {
fn recv_data( fn recv_data(
@ -19,7 +17,7 @@ impl<O: IsA<RTSPStreamTransport>> RTSPStreamTransportExtManual for O {
buffer: &gst::Buffer, buffer: &gst::Buffer,
) -> Result<gst::FlowSuccess, gst::FlowError> { ) -> Result<gst::FlowSuccess, gst::FlowError> {
let ret: gst::FlowReturn = unsafe { let ret: gst::FlowReturn = unsafe {
from_glib(gst_rtsp_server_sys::gst_rtsp_stream_transport_recv_data( from_glib(ffi::gst_rtsp_stream_transport_recv_data(
self.as_ref().to_glib_none().0, self.as_ref().to_glib_none().0,
channel, channel,
buffer.to_glib_full(), buffer.to_glib_full(),

View file

@ -1,38 +1,28 @@
use glib;
use glib::translate::*; use glib::translate::*;
use gst_rtsp_server_sys; gst::gst_define_mini_object_wrapper!(RTSPThread, RTSPThreadRef, ffi::GstRTSPThread, || {
ffi::gst_rtsp_thread_get_type()
gst_define_mini_object_wrapper!( });
RTSPThread,
RTSPThreadRef,
gst_rtsp_server_sys::GstRTSPThread,
|| gst_rtsp_server_sys::gst_rtsp_thread_get_type()
);
impl RTSPThread { impl RTSPThread {
pub fn new(type_: ::RTSPThreadType) -> Option<Self> { pub fn new(type_: crate::RTSPThreadType) -> Option<Self> {
assert_initialized_main_thread!(); assert_initialized_main_thread!();
unsafe { from_glib_full(gst_rtsp_server_sys::gst_rtsp_thread_new(type_.to_glib())) } unsafe { from_glib_full(ffi::gst_rtsp_thread_new(type_.to_glib())) }
} }
} }
impl RTSPThreadRef { impl RTSPThreadRef {
pub fn reuse(&self) -> bool { pub fn reuse(&self) -> bool {
unsafe { unsafe { from_glib(ffi::gst_rtsp_thread_reuse(self.as_mut_ptr())) }
from_glib(gst_rtsp_server_sys::gst_rtsp_thread_reuse(
self.as_mut_ptr(),
))
}
} }
pub fn stop(&self) { pub fn stop(&self) {
unsafe { unsafe {
gst_rtsp_server_sys::gst_rtsp_thread_stop(self.as_mut_ptr()); ffi::gst_rtsp_thread_stop(self.as_mut_ptr());
} }
} }
pub fn type_(&self) -> ::RTSPThreadType { pub fn type_(&self) -> crate::RTSPThreadType {
unsafe { from_glib((*self.as_ptr()).type_) } unsafe { from_glib((*self.as_ptr()).type_) }
} }

View file

@ -1,22 +1,16 @@
use glib;
use glib::translate::*; use glib::translate::*;
use glib::value::ToSendValue; use glib::value::ToSendValue;
use gst;
use gst_rtsp_server_sys;
use std::fmt; use std::fmt;
gst_define_mini_object_wrapper!( gst::gst_define_mini_object_wrapper!(RTSPToken, RTSPTokenRef, ffi::GstRTSPToken, || {
RTSPToken, ffi::gst_rtsp_token_get_type()
RTSPTokenRef, });
gst_rtsp_server_sys::GstRTSPToken,
|| gst_rtsp_server_sys::gst_rtsp_token_get_type()
);
impl RTSPToken { impl RTSPToken {
pub fn new_empty() -> Self { pub fn new_empty() -> Self {
assert_initialized_main_thread!(); assert_initialized_main_thread!();
unsafe { from_glib_full(gst_rtsp_server_sys::gst_rtsp_token_new_empty()) } unsafe { from_glib_full(ffi::gst_rtsp_token_new_empty()) }
} }
pub fn new(values: &[(&str, &dyn ToSendValue)]) -> Self { pub fn new(values: &[(&str, &dyn ToSendValue)]) -> Self {
@ -39,7 +33,7 @@ impl RTSPToken {
impl RTSPTokenRef { impl RTSPTokenRef {
pub fn get_string(&self, field: &str) -> Option<String> { pub fn get_string(&self, field: &str) -> Option<String> {
unsafe { unsafe {
from_glib_none(gst_rtsp_server_sys::gst_rtsp_token_get_string( from_glib_none(ffi::gst_rtsp_token_get_string(
self.as_mut_ptr(), self.as_mut_ptr(),
field.to_glib_none().0, field.to_glib_none().0,
)) ))
@ -47,16 +41,12 @@ impl RTSPTokenRef {
} }
pub fn get_structure(&self) -> Option<gst::Structure> { pub fn get_structure(&self) -> Option<gst::Structure> {
unsafe { unsafe { from_glib_none(ffi::gst_rtsp_token_get_structure(self.as_mut_ptr())) }
from_glib_none(gst_rtsp_server_sys::gst_rtsp_token_get_structure(
self.as_mut_ptr(),
))
}
} }
pub fn is_allowed(&self, field: &str) -> bool { pub fn is_allowed(&self, field: &str) -> bool {
unsafe { unsafe {
from_glib(gst_rtsp_server_sys::gst_rtsp_token_is_allowed( from_glib(ffi::gst_rtsp_token_is_allowed(
self.as_mut_ptr(), self.as_mut_ptr(),
field.to_glib_none().0, field.to_glib_none().0,
)) ))
@ -65,8 +55,7 @@ impl RTSPTokenRef {
pub fn get_mut_structure(&mut self) -> Option<&mut gst::StructureRef> { pub fn get_mut_structure(&mut self) -> Option<&mut gst::StructureRef> {
unsafe { unsafe {
let structure = let structure = ffi::gst_rtsp_token_writable_structure(self.as_mut_ptr());
gst_rtsp_server_sys::gst_rtsp_token_writable_structure(self.as_mut_ptr());
if structure.is_null() { if structure.is_null() {
None None
} else { } else {

File diff suppressed because it is too large Load diff

View file

@ -6,19 +6,17 @@
// option. This file may not be copied, modified, or distributed // option. This file may not be copied, modified, or distributed
// except according to those terms. // except according to those terms.
use gst_rtsp_server_sys;
use glib::prelude::*; use glib::prelude::*;
use glib::subclass::prelude::*; use glib::subclass::prelude::*;
use glib::translate::*; use glib::translate::*;
use std::ptr; use std::ptr;
use RTSPMedia; use crate::RTSPMedia;
use RTSPThread; use crate::RTSPThread;
#[derive(Debug)] #[derive(Debug)]
pub struct SDPInfo(ptr::NonNull<gst_rtsp_server_sys::GstSDPInfo>); pub struct SDPInfo(ptr::NonNull<ffi::GstSDPInfo>);
impl SDPInfo { impl SDPInfo {
pub fn is_ipv6(&self) -> bool { pub fn is_ipv6(&self) -> bool {
@ -85,11 +83,11 @@ pub trait RTSPMediaImpl: RTSPMediaImplExt + ObjectImpl + Send + Sync {
self.parent_setup_sdp(media, sdp, info) self.parent_setup_sdp(media, sdp, info)
} }
fn new_stream(&self, media: &Self::Type, stream: &::RTSPStream) { fn new_stream(&self, media: &Self::Type, stream: &crate::RTSPStream) {
self.parent_new_stream(media, stream); self.parent_new_stream(media, stream);
} }
fn removed_stream(&self, media: &Self::Type, stream: &::RTSPStream) { fn removed_stream(&self, media: &Self::Type, stream: &crate::RTSPStream) {
self.parent_removed_stream(media, stream); self.parent_removed_stream(media, stream);
} }
@ -144,8 +142,8 @@ pub trait RTSPMediaImplExt: ObjectSubclass {
sdp: &mut gst_sdp::SDPMessageRef, sdp: &mut gst_sdp::SDPMessageRef,
info: &SDPInfo, info: &SDPInfo,
) -> Result<(), gst::LoggableError>; ) -> Result<(), gst::LoggableError>;
fn parent_new_stream(&self, media: &Self::Type, stream: &::RTSPStream); fn parent_new_stream(&self, media: &Self::Type, stream: &crate::RTSPStream);
fn parent_removed_stream(&self, media: &Self::Type, stream: &::RTSPStream); fn parent_removed_stream(&self, media: &Self::Type, stream: &crate::RTSPStream);
fn parent_prepared(&self, media: &Self::Type); fn parent_prepared(&self, media: &Self::Type);
fn parent_unprepared(&self, media: &Self::Type); fn parent_unprepared(&self, media: &Self::Type);
fn parent_target_state(&self, media: &Self::Type, state: gst::State); fn parent_target_state(&self, media: &Self::Type, state: gst::State);
@ -161,8 +159,7 @@ impl<T: RTSPMediaImpl> RTSPMediaImplExt for T {
fn parent_handle_message(&self, media: &Self::Type, message: &gst::MessageRef) -> bool { fn parent_handle_message(&self, media: &Self::Type, message: &gst::MessageRef) -> bool {
unsafe { unsafe {
let data = T::type_data(); let data = T::type_data();
let parent_class = let parent_class = data.as_ref().get_parent_class() as *mut ffi::GstRTSPMediaClass;
data.as_ref().get_parent_class() as *mut gst_rtsp_server_sys::GstRTSPMediaClass;
if let Some(f) = (*parent_class).handle_message { if let Some(f) = (*parent_class).handle_message {
from_glib(f( from_glib(f(
media.unsafe_cast_ref::<RTSPMedia>().to_glib_none().0, media.unsafe_cast_ref::<RTSPMedia>().to_glib_none().0,
@ -181,10 +178,9 @@ impl<T: RTSPMediaImpl> RTSPMediaImplExt for T {
) -> Result<(), gst::LoggableError> { ) -> Result<(), gst::LoggableError> {
unsafe { unsafe {
let data = T::type_data(); let data = T::type_data();
let parent_class = let parent_class = data.as_ref().get_parent_class() as *mut ffi::GstRTSPMediaClass;
data.as_ref().get_parent_class() as *mut gst_rtsp_server_sys::GstRTSPMediaClass;
if let Some(f) = (*parent_class).prepare { if let Some(f) = (*parent_class).prepare {
gst_result_from_gboolean!( gst::gst_result_from_gboolean!(
f( f(
media.unsafe_cast_ref::<RTSPMedia>().to_glib_none().0, media.unsafe_cast_ref::<RTSPMedia>().to_glib_none().0,
thread.to_glib_none().0 thread.to_glib_none().0
@ -201,10 +197,9 @@ impl<T: RTSPMediaImpl> RTSPMediaImplExt for T {
fn parent_unprepare(&self, media: &Self::Type) -> Result<(), gst::LoggableError> { fn parent_unprepare(&self, media: &Self::Type) -> Result<(), gst::LoggableError> {
unsafe { unsafe {
let data = T::type_data(); let data = T::type_data();
let parent_class = let parent_class = data.as_ref().get_parent_class() as *mut ffi::GstRTSPMediaClass;
data.as_ref().get_parent_class() as *mut gst_rtsp_server_sys::GstRTSPMediaClass;
if let Some(f) = (*parent_class).unprepare { if let Some(f) = (*parent_class).unprepare {
gst_result_from_gboolean!( gst::gst_result_from_gboolean!(
f(media.unsafe_cast_ref::<RTSPMedia>().to_glib_none().0), f(media.unsafe_cast_ref::<RTSPMedia>().to_glib_none().0),
gst::CAT_RUST, gst::CAT_RUST,
"Parent function `unprepare` failed" "Parent function `unprepare` failed"
@ -218,10 +213,9 @@ impl<T: RTSPMediaImpl> RTSPMediaImplExt for T {
fn parent_suspend(&self, media: &Self::Type) -> Result<(), gst::LoggableError> { fn parent_suspend(&self, media: &Self::Type) -> Result<(), gst::LoggableError> {
unsafe { unsafe {
let data = T::type_data(); let data = T::type_data();
let parent_class = let parent_class = data.as_ref().get_parent_class() as *mut ffi::GstRTSPMediaClass;
data.as_ref().get_parent_class() as *mut gst_rtsp_server_sys::GstRTSPMediaClass;
if let Some(f) = (*parent_class).suspend { if let Some(f) = (*parent_class).suspend {
gst_result_from_gboolean!( gst::gst_result_from_gboolean!(
f(media.unsafe_cast_ref::<RTSPMedia>().to_glib_none().0), f(media.unsafe_cast_ref::<RTSPMedia>().to_glib_none().0),
gst::CAT_RUST, gst::CAT_RUST,
"Parent function `suspend` failed" "Parent function `suspend` failed"
@ -235,10 +229,9 @@ impl<T: RTSPMediaImpl> RTSPMediaImplExt for T {
fn parent_unsuspend(&self, media: &Self::Type) -> Result<(), gst::LoggableError> { fn parent_unsuspend(&self, media: &Self::Type) -> Result<(), gst::LoggableError> {
unsafe { unsafe {
let data = T::type_data(); let data = T::type_data();
let parent_class = let parent_class = data.as_ref().get_parent_class() as *mut ffi::GstRTSPMediaClass;
data.as_ref().get_parent_class() as *mut gst_rtsp_server_sys::GstRTSPMediaClass;
if let Some(f) = (*parent_class).unsuspend { if let Some(f) = (*parent_class).unsuspend {
gst_result_from_gboolean!( gst::gst_result_from_gboolean!(
f(media.unsafe_cast_ref::<RTSPMedia>().to_glib_none().0), f(media.unsafe_cast_ref::<RTSPMedia>().to_glib_none().0),
gst::CAT_RUST, gst::CAT_RUST,
"Parent function `unsuspend` failed" "Parent function `unsuspend` failed"
@ -256,14 +249,13 @@ impl<T: RTSPMediaImpl> RTSPMediaImplExt for T {
use std::mem; use std::mem;
let data = T::type_data(); let data = T::type_data();
let parent_class = let parent_class = data.as_ref().get_parent_class() as *mut ffi::GstRTSPMediaClass;
data.as_ref().get_parent_class() as *mut gst_rtsp_server_sys::GstRTSPMediaClass;
if let Some(f) = (*parent_class).query_position { if let Some(f) = (*parent_class).query_position {
let mut position = mem::MaybeUninit::uninit(); let mut position = mem::MaybeUninit::uninit();
if f( if f(
media.unsafe_cast_ref::<RTSPMedia>().to_glib_none().0, media.unsafe_cast_ref::<RTSPMedia>().to_glib_none().0,
position.as_mut_ptr(), position.as_mut_ptr(),
) == glib_sys::GFALSE ) == glib::ffi::GFALSE
{ {
None None
} else { } else {
@ -280,14 +272,13 @@ impl<T: RTSPMediaImpl> RTSPMediaImplExt for T {
use std::mem; use std::mem;
let data = T::type_data(); let data = T::type_data();
let parent_class = let parent_class = data.as_ref().get_parent_class() as *mut ffi::GstRTSPMediaClass;
data.as_ref().get_parent_class() as *mut gst_rtsp_server_sys::GstRTSPMediaClass;
if let Some(f) = (*parent_class).query_stop { if let Some(f) = (*parent_class).query_stop {
let mut stop = mem::MaybeUninit::uninit(); let mut stop = mem::MaybeUninit::uninit();
if f( if f(
media.unsafe_cast_ref::<RTSPMedia>().to_glib_none().0, media.unsafe_cast_ref::<RTSPMedia>().to_glib_none().0,
stop.as_mut_ptr(), stop.as_mut_ptr(),
) == glib_sys::GFALSE ) == glib::ffi::GFALSE
{ {
None None
} else { } else {
@ -302,8 +293,7 @@ impl<T: RTSPMediaImpl> RTSPMediaImplExt for T {
fn parent_create_rtpbin(&self, media: &Self::Type) -> Option<gst::Element> { fn parent_create_rtpbin(&self, media: &Self::Type) -> Option<gst::Element> {
unsafe { unsafe {
let data = T::type_data(); let data = T::type_data();
let parent_class = let parent_class = data.as_ref().get_parent_class() as *mut ffi::GstRTSPMediaClass;
data.as_ref().get_parent_class() as *mut gst_rtsp_server_sys::GstRTSPMediaClass;
let f = (*parent_class) let f = (*parent_class)
.create_rtpbin .create_rtpbin
.expect("No `create_rtpbin` virtual method implementation in parent class"); .expect("No `create_rtpbin` virtual method implementation in parent class");
@ -319,15 +309,14 @@ impl<T: RTSPMediaImpl> RTSPMediaImplExt for T {
) -> Result<(), gst::LoggableError> { ) -> Result<(), gst::LoggableError> {
unsafe { unsafe {
let data = T::type_data(); let data = T::type_data();
let parent_class = let parent_class = data.as_ref().get_parent_class() as *mut ffi::GstRTSPMediaClass;
data.as_ref().get_parent_class() as *mut gst_rtsp_server_sys::GstRTSPMediaClass;
if let Some(f) = (*parent_class).setup_rtpbin { if let Some(f) = (*parent_class).setup_rtpbin {
let ptr = rtpbin.to_glib_none().0; let ptr = rtpbin.to_glib_none().0;
// The C code assumes to pass a floating reference around so let's make sure we do // The C code assumes to pass a floating reference around so let's make sure we do
gobject_sys::g_object_force_floating(ptr as *mut _); glib::gobject_ffi::g_object_force_floating(ptr as *mut _);
let res = gst_result_from_gboolean!( let res = gst::gst_result_from_gboolean!(
f(media.unsafe_cast_ref::<RTSPMedia>().to_glib_none().0, ptr), f(media.unsafe_cast_ref::<RTSPMedia>().to_glib_none().0, ptr),
gst::CAT_RUST, gst::CAT_RUST,
"Parent function `setup_sdp` failed" "Parent function `setup_sdp` failed"
@ -336,8 +325,8 @@ impl<T: RTSPMediaImpl> RTSPMediaImplExt for T {
// If the code didn't accidentally sink it then we have to do that // If the code didn't accidentally sink it then we have to do that
// here now so that we don't have any floating reference on our side // here now so that we don't have any floating reference on our side
// anymore // anymore
if gobject_sys::g_object_is_floating(ptr as *mut _) != glib_sys::GFALSE { if glib::gobject_ffi::g_object_is_floating(ptr as *mut _) != glib::ffi::GFALSE {
gobject_sys::g_object_ref_sink(ptr as *mut _); glib::gobject_ffi::g_object_ref_sink(ptr as *mut _);
} }
res res
@ -355,16 +344,15 @@ impl<T: RTSPMediaImpl> RTSPMediaImplExt for T {
) -> Result<(), gst::LoggableError> { ) -> Result<(), gst::LoggableError> {
unsafe { unsafe {
let data = T::type_data(); let data = T::type_data();
let parent_class = let parent_class = data.as_ref().get_parent_class() as *mut ffi::GstRTSPMediaClass;
data.as_ref().get_parent_class() as *mut gst_rtsp_server_sys::GstRTSPMediaClass;
let f = (*parent_class) let f = (*parent_class)
.setup_sdp .setup_sdp
.expect("No `setup_sdp` virtual method implementation in parent class"); .expect("No `setup_sdp` virtual method implementation in parent class");
gst_result_from_gboolean!( gst::gst_result_from_gboolean!(
f( f(
media.unsafe_cast_ref::<RTSPMedia>().to_glib_none().0, media.unsafe_cast_ref::<RTSPMedia>().to_glib_none().0,
sdp as *mut _ as *mut gst_sdp_sys::GstSDPMessage, sdp as *mut _ as *mut gst_sdp::ffi::GstSDPMessage,
info.0.as_ptr() info.0.as_ptr()
), ),
gst::CAT_RUST, gst::CAT_RUST,
@ -373,11 +361,10 @@ impl<T: RTSPMediaImpl> RTSPMediaImplExt for T {
} }
} }
fn parent_new_stream(&self, media: &Self::Type, stream: &::RTSPStream) { fn parent_new_stream(&self, media: &Self::Type, stream: &crate::RTSPStream) {
unsafe { unsafe {
let data = T::type_data(); let data = T::type_data();
let parent_class = let parent_class = data.as_ref().get_parent_class() as *mut ffi::GstRTSPMediaClass;
data.as_ref().get_parent_class() as *mut gst_rtsp_server_sys::GstRTSPMediaClass;
if let Some(f) = (*parent_class).new_stream { if let Some(f) = (*parent_class).new_stream {
f( f(
media.unsafe_cast_ref::<RTSPMedia>().to_glib_none().0, media.unsafe_cast_ref::<RTSPMedia>().to_glib_none().0,
@ -387,11 +374,10 @@ impl<T: RTSPMediaImpl> RTSPMediaImplExt for T {
} }
} }
fn parent_removed_stream(&self, media: &Self::Type, stream: &::RTSPStream) { fn parent_removed_stream(&self, media: &Self::Type, stream: &crate::RTSPStream) {
unsafe { unsafe {
let data = T::type_data(); let data = T::type_data();
let parent_class = let parent_class = data.as_ref().get_parent_class() as *mut ffi::GstRTSPMediaClass;
data.as_ref().get_parent_class() as *mut gst_rtsp_server_sys::GstRTSPMediaClass;
if let Some(f) = (*parent_class).removed_stream { if let Some(f) = (*parent_class).removed_stream {
f( f(
media.unsafe_cast_ref::<RTSPMedia>().to_glib_none().0, media.unsafe_cast_ref::<RTSPMedia>().to_glib_none().0,
@ -404,8 +390,7 @@ impl<T: RTSPMediaImpl> RTSPMediaImplExt for T {
fn parent_prepared(&self, media: &Self::Type) { fn parent_prepared(&self, media: &Self::Type) {
unsafe { unsafe {
let data = T::type_data(); let data = T::type_data();
let parent_class = let parent_class = data.as_ref().get_parent_class() as *mut ffi::GstRTSPMediaClass;
data.as_ref().get_parent_class() as *mut gst_rtsp_server_sys::GstRTSPMediaClass;
if let Some(f) = (*parent_class).prepared { if let Some(f) = (*parent_class).prepared {
f(media.unsafe_cast_ref::<RTSPMedia>().to_glib_none().0); f(media.unsafe_cast_ref::<RTSPMedia>().to_glib_none().0);
} }
@ -415,8 +400,7 @@ impl<T: RTSPMediaImpl> RTSPMediaImplExt for T {
fn parent_unprepared(&self, media: &Self::Type) { fn parent_unprepared(&self, media: &Self::Type) {
unsafe { unsafe {
let data = T::type_data(); let data = T::type_data();
let parent_class = let parent_class = data.as_ref().get_parent_class() as *mut ffi::GstRTSPMediaClass;
data.as_ref().get_parent_class() as *mut gst_rtsp_server_sys::GstRTSPMediaClass;
if let Some(f) = (*parent_class).unprepared { if let Some(f) = (*parent_class).unprepared {
f(media.unsafe_cast_ref::<RTSPMedia>().to_glib_none().0); f(media.unsafe_cast_ref::<RTSPMedia>().to_glib_none().0);
} }
@ -426,8 +410,7 @@ impl<T: RTSPMediaImpl> RTSPMediaImplExt for T {
fn parent_target_state(&self, media: &Self::Type, state: gst::State) { fn parent_target_state(&self, media: &Self::Type, state: gst::State) {
unsafe { unsafe {
let data = T::type_data(); let data = T::type_data();
let parent_class = let parent_class = data.as_ref().get_parent_class() as *mut ffi::GstRTSPMediaClass;
data.as_ref().get_parent_class() as *mut gst_rtsp_server_sys::GstRTSPMediaClass;
if let Some(f) = (*parent_class).target_state { if let Some(f) = (*parent_class).target_state {
f( f(
media.unsafe_cast_ref::<RTSPMedia>().to_glib_none().0, media.unsafe_cast_ref::<RTSPMedia>().to_glib_none().0,
@ -440,8 +423,7 @@ impl<T: RTSPMediaImpl> RTSPMediaImplExt for T {
fn parent_new_state(&self, media: &Self::Type, state: gst::State) { fn parent_new_state(&self, media: &Self::Type, state: gst::State) {
unsafe { unsafe {
let data = T::type_data(); let data = T::type_data();
let parent_class = let parent_class = data.as_ref().get_parent_class() as *mut ffi::GstRTSPMediaClass;
data.as_ref().get_parent_class() as *mut gst_rtsp_server_sys::GstRTSPMediaClass;
if let Some(f) = (*parent_class).new_state { if let Some(f) = (*parent_class).new_state {
f( f(
media.unsafe_cast_ref::<RTSPMedia>().to_glib_none().0, media.unsafe_cast_ref::<RTSPMedia>().to_glib_none().0,
@ -458,16 +440,15 @@ impl<T: RTSPMediaImpl> RTSPMediaImplExt for T {
) -> Result<(), gst::LoggableError> { ) -> Result<(), gst::LoggableError> {
unsafe { unsafe {
let data = T::type_data(); let data = T::type_data();
let parent_class = let parent_class = data.as_ref().get_parent_class() as *mut ffi::GstRTSPMediaClass;
data.as_ref().get_parent_class() as *mut gst_rtsp_server_sys::GstRTSPMediaClass;
let f = (*parent_class) let f = (*parent_class)
.handle_sdp .handle_sdp
.expect("No `handle_sdp` virtual method implementation in parent class"); .expect("No `handle_sdp` virtual method implementation in parent class");
gst_result_from_gboolean!( gst::gst_result_from_gboolean!(
f( f(
media.unsafe_cast_ref::<RTSPMedia>().to_glib_none().0, media.unsafe_cast_ref::<RTSPMedia>().to_glib_none().0,
sdp as *const _ as *mut gst_sdp_sys::GstSDPMessage sdp as *const _ as *mut gst_sdp::ffi::GstSDPMessage
), ),
gst::CAT_RUST, gst::CAT_RUST,
"Parent function `handle_sdp` failed" "Parent function `handle_sdp` failed"
@ -500,9 +481,9 @@ unsafe impl<T: RTSPMediaImpl> IsSubclassable<T> for RTSPMedia {
} }
unsafe extern "C" fn media_handle_message<T: RTSPMediaImpl>( unsafe extern "C" fn media_handle_message<T: RTSPMediaImpl>(
ptr: *mut gst_rtsp_server_sys::GstRTSPMedia, ptr: *mut ffi::GstRTSPMedia,
message: *mut gst_sys::GstMessage, message: *mut gst::ffi::GstMessage,
) -> glib_sys::gboolean { ) -> glib::ffi::gboolean {
let instance = &*(ptr as *mut T::Instance); let instance = &*(ptr as *mut T::Instance);
let imp = instance.get_impl(); let imp = instance.get_impl();
let wrap: Borrowed<RTSPMedia> = from_glib_borrow(ptr); let wrap: Borrowed<RTSPMedia> = from_glib_borrow(ptr);
@ -512,74 +493,74 @@ unsafe extern "C" fn media_handle_message<T: RTSPMediaImpl>(
} }
unsafe extern "C" fn media_prepare<T: RTSPMediaImpl>( unsafe extern "C" fn media_prepare<T: RTSPMediaImpl>(
ptr: *mut gst_rtsp_server_sys::GstRTSPMedia, ptr: *mut ffi::GstRTSPMedia,
thread: *mut gst_rtsp_server_sys::GstRTSPThread, thread: *mut ffi::GstRTSPThread,
) -> glib_sys::gboolean { ) -> glib::ffi::gboolean {
let instance = &*(ptr as *mut T::Instance); let instance = &*(ptr as *mut T::Instance);
let imp = instance.get_impl(); let imp = instance.get_impl();
let wrap: Borrowed<RTSPMedia> = from_glib_borrow(ptr); let wrap: Borrowed<RTSPMedia> = from_glib_borrow(ptr);
match imp.prepare(wrap.unsafe_cast_ref(), &from_glib_borrow(thread)) { match imp.prepare(wrap.unsafe_cast_ref(), &from_glib_borrow(thread)) {
Ok(()) => glib_sys::GTRUE, Ok(()) => glib::ffi::GTRUE,
Err(err) => { Err(err) => {
err.log_with_object(&*wrap); err.log_with_object(&*wrap);
glib_sys::GFALSE glib::ffi::GFALSE
} }
} }
} }
unsafe extern "C" fn media_unprepare<T: RTSPMediaImpl>( unsafe extern "C" fn media_unprepare<T: RTSPMediaImpl>(
ptr: *mut gst_rtsp_server_sys::GstRTSPMedia, ptr: *mut ffi::GstRTSPMedia,
) -> glib_sys::gboolean { ) -> glib::ffi::gboolean {
let instance = &*(ptr as *mut T::Instance); let instance = &*(ptr as *mut T::Instance);
let imp = instance.get_impl(); let imp = instance.get_impl();
let wrap: Borrowed<RTSPMedia> = from_glib_borrow(ptr); let wrap: Borrowed<RTSPMedia> = from_glib_borrow(ptr);
match imp.unprepare(wrap.unsafe_cast_ref()) { match imp.unprepare(wrap.unsafe_cast_ref()) {
Ok(()) => glib_sys::GTRUE, Ok(()) => glib::ffi::GTRUE,
Err(err) => { Err(err) => {
err.log_with_object(&*wrap); err.log_with_object(&*wrap);
glib_sys::GFALSE glib::ffi::GFALSE
} }
} }
} }
unsafe extern "C" fn media_suspend<T: RTSPMediaImpl>( unsafe extern "C" fn media_suspend<T: RTSPMediaImpl>(
ptr: *mut gst_rtsp_server_sys::GstRTSPMedia, ptr: *mut ffi::GstRTSPMedia,
) -> glib_sys::gboolean { ) -> glib::ffi::gboolean {
let instance = &*(ptr as *mut T::Instance); let instance = &*(ptr as *mut T::Instance);
let imp = instance.get_impl(); let imp = instance.get_impl();
let wrap: Borrowed<RTSPMedia> = from_glib_borrow(ptr); let wrap: Borrowed<RTSPMedia> = from_glib_borrow(ptr);
match imp.suspend(wrap.unsafe_cast_ref()) { match imp.suspend(wrap.unsafe_cast_ref()) {
Ok(()) => glib_sys::GTRUE, Ok(()) => glib::ffi::GTRUE,
Err(err) => { Err(err) => {
err.log_with_object(&*wrap); err.log_with_object(&*wrap);
glib_sys::GFALSE glib::ffi::GFALSE
} }
} }
} }
unsafe extern "C" fn media_unsuspend<T: RTSPMediaImpl>( unsafe extern "C" fn media_unsuspend<T: RTSPMediaImpl>(
ptr: *mut gst_rtsp_server_sys::GstRTSPMedia, ptr: *mut ffi::GstRTSPMedia,
) -> glib_sys::gboolean { ) -> glib::ffi::gboolean {
let instance = &*(ptr as *mut T::Instance); let instance = &*(ptr as *mut T::Instance);
let imp = instance.get_impl(); let imp = instance.get_impl();
let wrap: Borrowed<RTSPMedia> = from_glib_borrow(ptr); let wrap: Borrowed<RTSPMedia> = from_glib_borrow(ptr);
match imp.unsuspend(wrap.unsafe_cast_ref()) { match imp.unsuspend(wrap.unsafe_cast_ref()) {
Ok(()) => glib_sys::GTRUE, Ok(()) => glib::ffi::GTRUE,
Err(err) => { Err(err) => {
err.log_with_object(&*wrap); err.log_with_object(&*wrap);
glib_sys::GFALSE glib::ffi::GFALSE
} }
} }
} }
unsafe extern "C" fn media_query_position<T: RTSPMediaImpl>( unsafe extern "C" fn media_query_position<T: RTSPMediaImpl>(
ptr: *mut gst_rtsp_server_sys::GstRTSPMedia, ptr: *mut ffi::GstRTSPMedia,
position: *mut i64, position: *mut i64,
) -> glib_sys::gboolean { ) -> glib::ffi::gboolean {
let instance = &*(ptr as *mut T::Instance); let instance = &*(ptr as *mut T::Instance);
let imp = instance.get_impl(); let imp = instance.get_impl();
let wrap: Borrowed<RTSPMedia> = from_glib_borrow(ptr); let wrap: Borrowed<RTSPMedia> = from_glib_borrow(ptr);
@ -587,16 +568,16 @@ unsafe extern "C" fn media_query_position<T: RTSPMediaImpl>(
match imp.query_position(wrap.unsafe_cast_ref()) { match imp.query_position(wrap.unsafe_cast_ref()) {
Some(pos) => { Some(pos) => {
*position = pos.to_glib() as i64; *position = pos.to_glib() as i64;
glib_sys::GTRUE glib::ffi::GTRUE
} }
None => glib_sys::GFALSE, None => glib::ffi::GFALSE,
} }
} }
unsafe extern "C" fn media_query_stop<T: RTSPMediaImpl>( unsafe extern "C" fn media_query_stop<T: RTSPMediaImpl>(
ptr: *mut gst_rtsp_server_sys::GstRTSPMedia, ptr: *mut ffi::GstRTSPMedia,
stop: *mut i64, stop: *mut i64,
) -> glib_sys::gboolean { ) -> glib::ffi::gboolean {
let instance = &*(ptr as *mut T::Instance); let instance = &*(ptr as *mut T::Instance);
let imp = instance.get_impl(); let imp = instance.get_impl();
let wrap: Borrowed<RTSPMedia> = from_glib_borrow(ptr); let wrap: Borrowed<RTSPMedia> = from_glib_borrow(ptr);
@ -604,61 +585,61 @@ unsafe extern "C" fn media_query_stop<T: RTSPMediaImpl>(
match imp.query_stop(wrap.unsafe_cast_ref()) { match imp.query_stop(wrap.unsafe_cast_ref()) {
Some(s) => { Some(s) => {
*stop = s.to_glib() as i64; *stop = s.to_glib() as i64;
glib_sys::GTRUE glib::ffi::GTRUE
} }
None => glib_sys::GFALSE, None => glib::ffi::GFALSE,
} }
} }
unsafe extern "C" fn media_create_rtpbin<T: RTSPMediaImpl>( unsafe extern "C" fn media_create_rtpbin<T: RTSPMediaImpl>(
ptr: *mut gst_rtsp_server_sys::GstRTSPMedia, ptr: *mut ffi::GstRTSPMedia,
) -> *mut gst_sys::GstElement { ) -> *mut gst::ffi::GstElement {
let instance = &*(ptr as *mut T::Instance); let instance = &*(ptr as *mut T::Instance);
let imp = instance.get_impl(); let imp = instance.get_impl();
let wrap: Borrowed<RTSPMedia> = from_glib_borrow(ptr); let wrap: Borrowed<RTSPMedia> = from_glib_borrow(ptr);
let res: *mut gst_sys::GstElement = imp.create_rtpbin(wrap.unsafe_cast_ref()).to_glib_full(); let res: *mut gst::ffi::GstElement = imp.create_rtpbin(wrap.unsafe_cast_ref()).to_glib_full();
if !res.is_null() { if !res.is_null() {
gobject_sys::g_object_force_floating(res as *mut _); glib::gobject_ffi::g_object_force_floating(res as *mut _);
} }
res res
} }
unsafe extern "C" fn media_setup_rtpbin<T: RTSPMediaImpl>( unsafe extern "C" fn media_setup_rtpbin<T: RTSPMediaImpl>(
ptr: *mut gst_rtsp_server_sys::GstRTSPMedia, ptr: *mut ffi::GstRTSPMedia,
rtpbin: *mut gst_sys::GstElement, rtpbin: *mut gst::ffi::GstElement,
) -> glib_sys::gboolean { ) -> glib::ffi::gboolean {
let instance = &*(ptr as *mut T::Instance); let instance = &*(ptr as *mut T::Instance);
let imp = instance.get_impl(); let imp = instance.get_impl();
let wrap: Borrowed<RTSPMedia> = from_glib_borrow(ptr); let wrap: Borrowed<RTSPMedia> = from_glib_borrow(ptr);
// If the rtpbin was floating before make sure it is not anymore for now so // If the rtpbin was floating before make sure it is not anymore for now so
// we don't accidentally take ownership of it somewhere along the line // we don't accidentally take ownership of it somewhere along the line
if gobject_sys::g_object_is_floating(rtpbin as *mut _) != glib_sys::GFALSE { if glib::gobject_ffi::g_object_is_floating(rtpbin as *mut _) != glib::ffi::GFALSE {
gobject_sys::g_object_ref_sink(rtpbin as *mut _); glib::gobject_ffi::g_object_ref_sink(rtpbin as *mut _);
} }
let res = match imp.setup_rtpbin(wrap.unsafe_cast_ref(), &from_glib_borrow(rtpbin)) { let res = match imp.setup_rtpbin(wrap.unsafe_cast_ref(), &from_glib_borrow(rtpbin)) {
Ok(()) => glib_sys::GTRUE, Ok(()) => glib::ffi::GTRUE,
Err(err) => { Err(err) => {
err.log_with_object(&*wrap); err.log_with_object(&*wrap);
glib_sys::GFALSE glib::ffi::GFALSE
} }
}; };
// Ensure that the rtpbin is still floating afterwards here // Ensure that the rtpbin is still floating afterwards here
gobject_sys::g_object_force_floating(rtpbin as *mut _); glib::gobject_ffi::g_object_force_floating(rtpbin as *mut _);
res res
} }
unsafe extern "C" fn media_setup_sdp<T: RTSPMediaImpl>( unsafe extern "C" fn media_setup_sdp<T: RTSPMediaImpl>(
ptr: *mut gst_rtsp_server_sys::GstRTSPMedia, ptr: *mut ffi::GstRTSPMedia,
sdp: *mut gst_sdp_sys::GstSDPMessage, sdp: *mut gst_sdp::ffi::GstSDPMessage,
info: *mut gst_rtsp_server_sys::GstSDPInfo, info: *mut ffi::GstSDPInfo,
) -> glib_sys::gboolean { ) -> glib::ffi::gboolean {
let instance = &*(ptr as *mut T::Instance); let instance = &*(ptr as *mut T::Instance);
let imp = instance.get_impl(); let imp = instance.get_impl();
let wrap: Borrowed<RTSPMedia> = from_glib_borrow(ptr); let wrap: Borrowed<RTSPMedia> = from_glib_borrow(ptr);
@ -668,17 +649,17 @@ unsafe extern "C" fn media_setup_sdp<T: RTSPMediaImpl>(
&mut *(sdp as *mut gst_sdp::SDPMessageRef), &mut *(sdp as *mut gst_sdp::SDPMessageRef),
&SDPInfo(ptr::NonNull::new(info).expect("NULL SDPInfo")), &SDPInfo(ptr::NonNull::new(info).expect("NULL SDPInfo")),
) { ) {
Ok(()) => glib_sys::GTRUE, Ok(()) => glib::ffi::GTRUE,
Err(err) => { Err(err) => {
err.log_with_object(&*wrap); err.log_with_object(&*wrap);
glib_sys::GFALSE glib::ffi::GFALSE
} }
} }
} }
unsafe extern "C" fn media_new_stream<T: RTSPMediaImpl>( unsafe extern "C" fn media_new_stream<T: RTSPMediaImpl>(
ptr: *mut gst_rtsp_server_sys::GstRTSPMedia, ptr: *mut ffi::GstRTSPMedia,
stream: *mut gst_rtsp_server_sys::GstRTSPStream, stream: *mut ffi::GstRTSPStream,
) { ) {
let instance = &*(ptr as *mut T::Instance); let instance = &*(ptr as *mut T::Instance);
let imp = instance.get_impl(); let imp = instance.get_impl();
@ -688,8 +669,8 @@ unsafe extern "C" fn media_new_stream<T: RTSPMediaImpl>(
} }
unsafe extern "C" fn media_removed_stream<T: RTSPMediaImpl>( unsafe extern "C" fn media_removed_stream<T: RTSPMediaImpl>(
ptr: *mut gst_rtsp_server_sys::GstRTSPMedia, ptr: *mut ffi::GstRTSPMedia,
stream: *mut gst_rtsp_server_sys::GstRTSPStream, stream: *mut ffi::GstRTSPStream,
) { ) {
let instance = &*(ptr as *mut T::Instance); let instance = &*(ptr as *mut T::Instance);
let imp = instance.get_impl(); let imp = instance.get_impl();
@ -698,7 +679,7 @@ unsafe extern "C" fn media_removed_stream<T: RTSPMediaImpl>(
imp.removed_stream(wrap.unsafe_cast_ref(), &from_glib_borrow(stream)); imp.removed_stream(wrap.unsafe_cast_ref(), &from_glib_borrow(stream));
} }
unsafe extern "C" fn media_prepared<T: RTSPMediaImpl>(ptr: *mut gst_rtsp_server_sys::GstRTSPMedia) { unsafe extern "C" fn media_prepared<T: RTSPMediaImpl>(ptr: *mut ffi::GstRTSPMedia) {
let instance = &*(ptr as *mut T::Instance); let instance = &*(ptr as *mut T::Instance);
let imp = instance.get_impl(); let imp = instance.get_impl();
let wrap: Borrowed<RTSPMedia> = from_glib_borrow(ptr); let wrap: Borrowed<RTSPMedia> = from_glib_borrow(ptr);
@ -706,9 +687,7 @@ unsafe extern "C" fn media_prepared<T: RTSPMediaImpl>(ptr: *mut gst_rtsp_server_
imp.prepared(wrap.unsafe_cast_ref()); imp.prepared(wrap.unsafe_cast_ref());
} }
unsafe extern "C" fn media_unprepared<T: RTSPMediaImpl>( unsafe extern "C" fn media_unprepared<T: RTSPMediaImpl>(ptr: *mut ffi::GstRTSPMedia) {
ptr: *mut gst_rtsp_server_sys::GstRTSPMedia,
) {
let instance = &*(ptr as *mut T::Instance); let instance = &*(ptr as *mut T::Instance);
let imp = instance.get_impl(); let imp = instance.get_impl();
let wrap: Borrowed<RTSPMedia> = from_glib_borrow(ptr); let wrap: Borrowed<RTSPMedia> = from_glib_borrow(ptr);
@ -717,8 +696,8 @@ unsafe extern "C" fn media_unprepared<T: RTSPMediaImpl>(
} }
unsafe extern "C" fn media_target_state<T: RTSPMediaImpl>( unsafe extern "C" fn media_target_state<T: RTSPMediaImpl>(
ptr: *mut gst_rtsp_server_sys::GstRTSPMedia, ptr: *mut ffi::GstRTSPMedia,
state: gst_sys::GstState, state: gst::ffi::GstState,
) { ) {
let instance = &*(ptr as *mut T::Instance); let instance = &*(ptr as *mut T::Instance);
let imp = instance.get_impl(); let imp = instance.get_impl();
@ -728,8 +707,8 @@ unsafe extern "C" fn media_target_state<T: RTSPMediaImpl>(
} }
unsafe extern "C" fn media_new_state<T: RTSPMediaImpl>( unsafe extern "C" fn media_new_state<T: RTSPMediaImpl>(
ptr: *mut gst_rtsp_server_sys::GstRTSPMedia, ptr: *mut ffi::GstRTSPMedia,
state: gst_sys::GstState, state: gst::ffi::GstState,
) { ) {
let instance = &*(ptr as *mut T::Instance); let instance = &*(ptr as *mut T::Instance);
let imp = instance.get_impl(); let imp = instance.get_impl();
@ -739,9 +718,9 @@ unsafe extern "C" fn media_new_state<T: RTSPMediaImpl>(
} }
unsafe extern "C" fn media_handle_sdp<T: RTSPMediaImpl>( unsafe extern "C" fn media_handle_sdp<T: RTSPMediaImpl>(
ptr: *mut gst_rtsp_server_sys::GstRTSPMedia, ptr: *mut ffi::GstRTSPMedia,
sdp: *mut gst_sdp_sys::GstSDPMessage, sdp: *mut gst_sdp::ffi::GstSDPMessage,
) -> glib_sys::gboolean { ) -> glib::ffi::gboolean {
let instance = &*(ptr as *mut T::Instance); let instance = &*(ptr as *mut T::Instance);
let imp = instance.get_impl(); let imp = instance.get_impl();
let wrap: Borrowed<RTSPMedia> = from_glib_borrow(ptr); let wrap: Borrowed<RTSPMedia> = from_glib_borrow(ptr);
@ -750,10 +729,10 @@ unsafe extern "C" fn media_handle_sdp<T: RTSPMediaImpl>(
wrap.unsafe_cast_ref(), wrap.unsafe_cast_ref(),
&*(sdp as *const gst_sdp::SDPMessageRef), &*(sdp as *const gst_sdp::SDPMessageRef),
) { ) {
Ok(()) => glib_sys::GTRUE, Ok(()) => glib::ffi::GTRUE,
Err(err) => { Err(err) => {
err.log_with_object(&*wrap); err.log_with_object(&*wrap);
glib_sys::GFALSE glib::ffi::GFALSE
} }
} }
} }

View file

@ -6,15 +6,11 @@
// option. This file may not be copied, modified, or distributed // option. This file may not be copied, modified, or distributed
// except according to those terms. // except according to those terms.
use gst_rtsp_server_sys;
use glib::prelude::*; use glib::prelude::*;
use glib::subclass::prelude::*; use glib::subclass::prelude::*;
use glib::translate::*; use glib::translate::*;
use gst_rtsp; use crate::RTSPMediaFactory;
use RTSPMediaFactory;
use std::mem::transmute; use std::mem::transmute;
@ -31,23 +27,27 @@ pub trait RTSPMediaFactoryImpl: RTSPMediaFactoryImplExt + ObjectImpl + Send + Sy
self.parent_create_element(factory, url) self.parent_create_element(factory, url)
} }
fn construct(&self, factory: &Self::Type, url: &gst_rtsp::RTSPUrl) -> Option<::RTSPMedia> { fn construct(&self, factory: &Self::Type, url: &gst_rtsp::RTSPUrl) -> Option<crate::RTSPMedia> {
self.parent_construct(factory, url) self.parent_construct(factory, url)
} }
fn create_pipeline(&self, factory: &Self::Type, media: &::RTSPMedia) -> Option<gst::Pipeline> { fn create_pipeline(
&self,
factory: &Self::Type,
media: &crate::RTSPMedia,
) -> Option<gst::Pipeline> {
self.parent_create_pipeline(factory, media) self.parent_create_pipeline(factory, media)
} }
fn configure(&self, factory: &Self::Type, media: &::RTSPMedia) { fn configure(&self, factory: &Self::Type, media: &crate::RTSPMedia) {
self.parent_configure(factory, media) self.parent_configure(factory, media)
} }
fn media_constructed(&self, factory: &Self::Type, media: &::RTSPMedia) { fn media_constructed(&self, factory: &Self::Type, media: &crate::RTSPMedia) {
self.parent_media_constructed(factory, media) self.parent_media_constructed(factory, media)
} }
fn media_configure(&self, factory: &Self::Type, media: &::RTSPMedia) { fn media_configure(&self, factory: &Self::Type, media: &crate::RTSPMedia) {
self.parent_media_configure(factory, media) self.parent_media_configure(factory, media)
} }
} }
@ -69,18 +69,18 @@ pub trait RTSPMediaFactoryImplExt: ObjectSubclass {
&self, &self,
factory: &Self::Type, factory: &Self::Type,
url: &gst_rtsp::RTSPUrl, url: &gst_rtsp::RTSPUrl,
) -> Option<::RTSPMedia>; ) -> Option<crate::RTSPMedia>;
fn parent_create_pipeline( fn parent_create_pipeline(
&self, &self,
factory: &Self::Type, factory: &Self::Type,
media: &::RTSPMedia, media: &crate::RTSPMedia,
) -> Option<gst::Pipeline>; ) -> Option<gst::Pipeline>;
fn parent_configure(&self, factory: &Self::Type, media: &::RTSPMedia); fn parent_configure(&self, factory: &Self::Type, media: &crate::RTSPMedia);
fn parent_media_constructed(&self, factory: &Self::Type, media: &::RTSPMedia); fn parent_media_constructed(&self, factory: &Self::Type, media: &crate::RTSPMedia);
fn parent_media_configure(&self, factory: &Self::Type, media: &::RTSPMedia); fn parent_media_configure(&self, factory: &Self::Type, media: &crate::RTSPMedia);
} }
impl<T: RTSPMediaFactoryImpl> RTSPMediaFactoryImplExt for T { impl<T: RTSPMediaFactoryImpl> RTSPMediaFactoryImplExt for T {
@ -91,8 +91,8 @@ impl<T: RTSPMediaFactoryImpl> RTSPMediaFactoryImplExt for T {
) -> Option<glib::GString> { ) -> Option<glib::GString> {
unsafe { unsafe {
let data = T::type_data(); let data = T::type_data();
let parent_class = data.as_ref().get_parent_class() let parent_class =
as *mut gst_rtsp_server_sys::GstRTSPMediaFactoryClass; data.as_ref().get_parent_class() as *mut ffi::GstRTSPMediaFactoryClass;
(*parent_class) (*parent_class)
.gen_key .gen_key
.map(|f| { .map(|f| {
@ -115,8 +115,8 @@ impl<T: RTSPMediaFactoryImpl> RTSPMediaFactoryImplExt for T {
) -> Option<gst::Element> { ) -> Option<gst::Element> {
unsafe { unsafe {
let data = T::type_data(); let data = T::type_data();
let parent_class = data.as_ref().get_parent_class() let parent_class =
as *mut gst_rtsp_server_sys::GstRTSPMediaFactoryClass; data.as_ref().get_parent_class() as *mut ffi::GstRTSPMediaFactoryClass;
(*parent_class) (*parent_class)
.create_element .create_element
.map(|f| { .map(|f| {
@ -136,11 +136,11 @@ impl<T: RTSPMediaFactoryImpl> RTSPMediaFactoryImplExt for T {
&self, &self,
factory: &Self::Type, factory: &Self::Type,
url: &gst_rtsp::RTSPUrl, url: &gst_rtsp::RTSPUrl,
) -> Option<::RTSPMedia> { ) -> Option<crate::RTSPMedia> {
unsafe { unsafe {
let data = T::type_data(); let data = T::type_data();
let parent_class = data.as_ref().get_parent_class() let parent_class =
as *mut gst_rtsp_server_sys::GstRTSPMediaFactoryClass; data.as_ref().get_parent_class() as *mut ffi::GstRTSPMediaFactoryClass;
(*parent_class) (*parent_class)
.construct .construct
.map(|f| { .map(|f| {
@ -159,12 +159,12 @@ impl<T: RTSPMediaFactoryImpl> RTSPMediaFactoryImplExt for T {
fn parent_create_pipeline( fn parent_create_pipeline(
&self, &self,
factory: &Self::Type, factory: &Self::Type,
media: &::RTSPMedia, media: &crate::RTSPMedia,
) -> Option<gst::Pipeline> { ) -> Option<gst::Pipeline> {
unsafe { unsafe {
let data = T::type_data(); let data = T::type_data();
let parent_class = data.as_ref().get_parent_class() let parent_class =
as *mut gst_rtsp_server_sys::GstRTSPMediaFactoryClass; data.as_ref().get_parent_class() as *mut ffi::GstRTSPMediaFactoryClass;
(*parent_class) (*parent_class)
.create_pipeline .create_pipeline
.map(|f| { .map(|f| {
@ -174,11 +174,11 @@ impl<T: RTSPMediaFactoryImpl> RTSPMediaFactoryImplExt for T {
.to_glib_none() .to_glib_none()
.0, .0,
media.to_glib_none().0, media.to_glib_none().0,
) as *mut gst_sys::GstPipeline; ) as *mut gst::ffi::GstPipeline;
// See https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/merge_requests/109 // See https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/merge_requests/109
if gobject_sys::g_object_is_floating(ptr as *mut _) != glib_sys::GFALSE { if glib::gobject_ffi::g_object_is_floating(ptr as *mut _) != glib::ffi::GFALSE {
gobject_sys::g_object_ref_sink(ptr as *mut _); glib::gobject_ffi::g_object_ref_sink(ptr as *mut _);
} }
from_glib_none(ptr) from_glib_none(ptr)
}) })
@ -186,11 +186,11 @@ impl<T: RTSPMediaFactoryImpl> RTSPMediaFactoryImplExt for T {
} }
} }
fn parent_configure(&self, factory: &Self::Type, media: &::RTSPMedia) { fn parent_configure(&self, factory: &Self::Type, media: &crate::RTSPMedia) {
unsafe { unsafe {
let data = T::type_data(); let data = T::type_data();
let parent_class = data.as_ref().get_parent_class() let parent_class =
as *mut gst_rtsp_server_sys::GstRTSPMediaFactoryClass; data.as_ref().get_parent_class() as *mut ffi::GstRTSPMediaFactoryClass;
if let Some(f) = (*parent_class).configure { if let Some(f) = (*parent_class).configure {
f( f(
factory factory
@ -203,11 +203,11 @@ impl<T: RTSPMediaFactoryImpl> RTSPMediaFactoryImplExt for T {
} }
} }
fn parent_media_constructed(&self, factory: &Self::Type, media: &::RTSPMedia) { fn parent_media_constructed(&self, factory: &Self::Type, media: &crate::RTSPMedia) {
unsafe { unsafe {
let data = T::type_data(); let data = T::type_data();
let parent_class = data.as_ref().get_parent_class() let parent_class =
as *mut gst_rtsp_server_sys::GstRTSPMediaFactoryClass; data.as_ref().get_parent_class() as *mut ffi::GstRTSPMediaFactoryClass;
if let Some(f) = (*parent_class).media_constructed { if let Some(f) = (*parent_class).media_constructed {
f( f(
factory factory
@ -220,11 +220,11 @@ impl<T: RTSPMediaFactoryImpl> RTSPMediaFactoryImplExt for T {
} }
} }
fn parent_media_configure(&self, factory: &Self::Type, media: &::RTSPMedia) { fn parent_media_configure(&self, factory: &Self::Type, media: &crate::RTSPMedia) {
unsafe { unsafe {
let data = T::type_data(); let data = T::type_data();
let parent_class = data.as_ref().get_parent_class() let parent_class =
as *mut gst_rtsp_server_sys::GstRTSPMediaFactoryClass; data.as_ref().get_parent_class() as *mut ffi::GstRTSPMediaFactoryClass;
if let Some(f) = (*parent_class).media_configure { if let Some(f) = (*parent_class).media_configure {
f( f(
factory factory
@ -252,8 +252,8 @@ unsafe impl<T: RTSPMediaFactoryImpl> IsSubclassable<T> for RTSPMediaFactory {
} }
unsafe extern "C" fn factory_gen_key<T: RTSPMediaFactoryImpl>( unsafe extern "C" fn factory_gen_key<T: RTSPMediaFactoryImpl>(
ptr: *mut gst_rtsp_server_sys::GstRTSPMediaFactory, ptr: *mut ffi::GstRTSPMediaFactory,
url: *const gst_rtsp_sys::GstRTSPUrl, url: *const gst_rtsp::ffi::GstRTSPUrl,
) -> *mut std::os::raw::c_char { ) -> *mut std::os::raw::c_char {
let instance = &*(ptr as *mut T::Instance); let instance = &*(ptr as *mut T::Instance);
let imp = instance.get_impl(); let imp = instance.get_impl();
@ -264,9 +264,9 @@ unsafe extern "C" fn factory_gen_key<T: RTSPMediaFactoryImpl>(
} }
unsafe extern "C" fn factory_create_element<T: RTSPMediaFactoryImpl>( unsafe extern "C" fn factory_create_element<T: RTSPMediaFactoryImpl>(
ptr: *mut gst_rtsp_server_sys::GstRTSPMediaFactory, ptr: *mut ffi::GstRTSPMediaFactory,
url: *const gst_rtsp_sys::GstRTSPUrl, url: *const gst_rtsp::ffi::GstRTSPUrl,
) -> *mut gst_sys::GstElement { ) -> *mut gst::ffi::GstElement {
let instance = &*(ptr as *mut T::Instance); let instance = &*(ptr as *mut T::Instance);
let imp = instance.get_impl(); let imp = instance.get_impl();
let wrap: Borrowed<RTSPMediaFactory> = from_glib_borrow(ptr); let wrap: Borrowed<RTSPMediaFactory> = from_glib_borrow(ptr);
@ -274,14 +274,14 @@ unsafe extern "C" fn factory_create_element<T: RTSPMediaFactoryImpl>(
let element = imp let element = imp
.create_element(wrap.unsafe_cast_ref(), &from_glib_borrow(url)) .create_element(wrap.unsafe_cast_ref(), &from_glib_borrow(url))
.to_glib_full(); .to_glib_full();
gobject_sys::g_object_force_floating(element as *mut _); glib::gobject_ffi::g_object_force_floating(element as *mut _);
element element
} }
unsafe extern "C" fn factory_construct<T: RTSPMediaFactoryImpl>( unsafe extern "C" fn factory_construct<T: RTSPMediaFactoryImpl>(
ptr: *mut gst_rtsp_server_sys::GstRTSPMediaFactory, ptr: *mut ffi::GstRTSPMediaFactory,
url: *const gst_rtsp_sys::GstRTSPUrl, url: *const gst_rtsp::ffi::GstRTSPUrl,
) -> *mut gst_rtsp_server_sys::GstRTSPMedia { ) -> *mut ffi::GstRTSPMedia {
let instance = &*(ptr as *mut T::Instance); let instance = &*(ptr as *mut T::Instance);
let imp = instance.get_impl(); let imp = instance.get_impl();
let wrap: Borrowed<RTSPMediaFactory> = from_glib_borrow(ptr); let wrap: Borrowed<RTSPMediaFactory> = from_glib_borrow(ptr);
@ -291,9 +291,9 @@ unsafe extern "C" fn factory_construct<T: RTSPMediaFactoryImpl>(
} }
unsafe extern "C" fn factory_create_pipeline<T: RTSPMediaFactoryImpl>( unsafe extern "C" fn factory_create_pipeline<T: RTSPMediaFactoryImpl>(
ptr: *mut gst_rtsp_server_sys::GstRTSPMediaFactory, ptr: *mut ffi::GstRTSPMediaFactory,
media: *mut gst_rtsp_server_sys::GstRTSPMedia, media: *mut ffi::GstRTSPMedia,
) -> *mut gst_sys::GstElement { ) -> *mut gst::ffi::GstElement {
use once_cell::sync::Lazy; use once_cell::sync::Lazy;
static PIPELINE_QUARK: Lazy<glib::Quark> = static PIPELINE_QUARK: Lazy<glib::Quark> =
@ -303,17 +303,17 @@ unsafe extern "C" fn factory_create_pipeline<T: RTSPMediaFactoryImpl>(
let imp = instance.get_impl(); let imp = instance.get_impl();
let wrap: Borrowed<RTSPMediaFactory> = from_glib_borrow(ptr); let wrap: Borrowed<RTSPMediaFactory> = from_glib_borrow(ptr);
let pipeline: *mut gst_sys::GstPipeline = imp let pipeline: *mut gst::ffi::GstPipeline = imp
.create_pipeline(wrap.unsafe_cast_ref(), &from_glib_borrow(media)) .create_pipeline(wrap.unsafe_cast_ref(), &from_glib_borrow(media))
.to_glib_full(); .to_glib_full();
// FIXME We somehow need to ensure the pipeline actually stays alive... // FIXME We somehow need to ensure the pipeline actually stays alive...
gobject_sys::g_object_set_qdata_full( glib::gobject_ffi::g_object_set_qdata_full(
media as *mut _, media as *mut _,
PIPELINE_QUARK.to_glib(), PIPELINE_QUARK.to_glib(),
pipeline as *mut _, pipeline as *mut _,
Some(transmute::<_, unsafe extern "C" fn(glib_sys::gpointer)>( Some(transmute::<_, unsafe extern "C" fn(glib::ffi::gpointer)>(
gobject_sys::g_object_unref as *const (), glib::gobject_ffi::g_object_unref as *const (),
)), )),
); );
@ -321,8 +321,8 @@ unsafe extern "C" fn factory_create_pipeline<T: RTSPMediaFactoryImpl>(
} }
unsafe extern "C" fn factory_configure<T: RTSPMediaFactoryImpl>( unsafe extern "C" fn factory_configure<T: RTSPMediaFactoryImpl>(
ptr: *mut gst_rtsp_server_sys::GstRTSPMediaFactory, ptr: *mut ffi::GstRTSPMediaFactory,
media: *mut gst_rtsp_server_sys::GstRTSPMedia, media: *mut ffi::GstRTSPMedia,
) { ) {
let instance = &*(ptr as *mut T::Instance); let instance = &*(ptr as *mut T::Instance);
let imp = instance.get_impl(); let imp = instance.get_impl();
@ -332,8 +332,8 @@ unsafe extern "C" fn factory_configure<T: RTSPMediaFactoryImpl>(
} }
unsafe extern "C" fn factory_media_constructed<T: RTSPMediaFactoryImpl>( unsafe extern "C" fn factory_media_constructed<T: RTSPMediaFactoryImpl>(
ptr: *mut gst_rtsp_server_sys::GstRTSPMediaFactory, ptr: *mut ffi::GstRTSPMediaFactory,
media: *mut gst_rtsp_server_sys::GstRTSPMedia, media: *mut ffi::GstRTSPMedia,
) { ) {
let instance = &*(ptr as *mut T::Instance); let instance = &*(ptr as *mut T::Instance);
let imp = instance.get_impl(); let imp = instance.get_impl();
@ -343,8 +343,8 @@ unsafe extern "C" fn factory_media_constructed<T: RTSPMediaFactoryImpl>(
} }
unsafe extern "C" fn factory_media_configure<T: RTSPMediaFactoryImpl>( unsafe extern "C" fn factory_media_configure<T: RTSPMediaFactoryImpl>(
ptr: *mut gst_rtsp_server_sys::GstRTSPMediaFactory, ptr: *mut ffi::GstRTSPMediaFactory,
media: *mut gst_rtsp_server_sys::GstRTSPMedia, media: *mut ffi::GstRTSPMedia,
) { ) {
let instance = &*(ptr as *mut T::Instance); let instance = &*(ptr as *mut T::Instance);
let imp = instance.get_impl(); let imp = instance.get_impl();

View file

@ -6,36 +6,33 @@
// option. This file may not be copied, modified, or distributed // option. This file may not be copied, modified, or distributed
// except according to those terms. // except according to those terms.
use gst_rtsp_server_sys;
use glib::prelude::*; use glib::prelude::*;
use glib::subclass::prelude::*; use glib::subclass::prelude::*;
use glib::translate::*; use glib::translate::*;
use RTSPServer; use crate::RTSPServer;
pub trait RTSPServerImpl: RTSPServerImplExt + ObjectImpl + Send + Sync { pub trait RTSPServerImpl: RTSPServerImplExt + ObjectImpl + Send + Sync {
fn create_client(&self, server: &Self::Type) -> Option<::RTSPClient> { fn create_client(&self, server: &Self::Type) -> Option<crate::RTSPClient> {
self.parent_create_client(server) self.parent_create_client(server)
} }
fn client_connected(&self, server: &Self::Type, client: &::RTSPClient) { fn client_connected(&self, server: &Self::Type, client: &crate::RTSPClient) {
self.parent_client_connected(server, client); self.parent_client_connected(server, client);
} }
} }
pub trait RTSPServerImplExt: ObjectSubclass { pub trait RTSPServerImplExt: ObjectSubclass {
fn parent_create_client(&self, server: &Self::Type) -> Option<::RTSPClient>; fn parent_create_client(&self, server: &Self::Type) -> Option<crate::RTSPClient>;
fn parent_client_connected(&self, server: &Self::Type, client: &::RTSPClient); fn parent_client_connected(&self, server: &Self::Type, client: &crate::RTSPClient);
} }
impl<T: RTSPServerImpl> RTSPServerImplExt for T { impl<T: RTSPServerImpl> RTSPServerImplExt for T {
fn parent_create_client(&self, server: &Self::Type) -> Option<::RTSPClient> { fn parent_create_client(&self, server: &Self::Type) -> Option<crate::RTSPClient> {
unsafe { unsafe {
let data = T::type_data(); let data = T::type_data();
let parent_class = let parent_class = data.as_ref().get_parent_class() as *mut ffi::GstRTSPServerClass;
data.as_ref().get_parent_class() as *mut gst_rtsp_server_sys::GstRTSPServerClass;
let f = (*parent_class) let f = (*parent_class)
.create_client .create_client
.expect("No `create_client` virtual method implementation in parent class"); .expect("No `create_client` virtual method implementation in parent class");
@ -43,11 +40,10 @@ impl<T: RTSPServerImpl> RTSPServerImplExt for T {
} }
} }
fn parent_client_connected(&self, server: &Self::Type, client: &::RTSPClient) { fn parent_client_connected(&self, server: &Self::Type, client: &crate::RTSPClient) {
unsafe { unsafe {
let data = T::type_data(); let data = T::type_data();
let parent_class = let parent_class = data.as_ref().get_parent_class() as *mut ffi::GstRTSPServerClass;
data.as_ref().get_parent_class() as *mut gst_rtsp_server_sys::GstRTSPServerClass;
if let Some(f) = (*parent_class).client_connected { if let Some(f) = (*parent_class).client_connected {
f( f(
server.unsafe_cast_ref::<RTSPServer>().to_glib_none().0, server.unsafe_cast_ref::<RTSPServer>().to_glib_none().0,
@ -67,8 +63,8 @@ unsafe impl<T: RTSPServerImpl> IsSubclassable<T> for RTSPServer {
} }
unsafe extern "C" fn server_create_client<T: RTSPServerImpl>( unsafe extern "C" fn server_create_client<T: RTSPServerImpl>(
ptr: *mut gst_rtsp_server_sys::GstRTSPServer, ptr: *mut ffi::GstRTSPServer,
) -> *mut gst_rtsp_server_sys::GstRTSPClient { ) -> *mut ffi::GstRTSPClient {
let instance = &*(ptr as *mut T::Instance); let instance = &*(ptr as *mut T::Instance);
let imp = instance.get_impl(); let imp = instance.get_impl();
let wrap: Borrowed<RTSPServer> = from_glib_borrow(ptr); let wrap: Borrowed<RTSPServer> = from_glib_borrow(ptr);
@ -77,8 +73,8 @@ unsafe extern "C" fn server_create_client<T: RTSPServerImpl>(
} }
unsafe extern "C" fn server_client_connected<T: RTSPServerImpl>( unsafe extern "C" fn server_client_connected<T: RTSPServerImpl>(
ptr: *mut gst_rtsp_server_sys::GstRTSPServer, ptr: *mut ffi::GstRTSPServer,
client: *mut gst_rtsp_server_sys::GstRTSPClient, client: *mut ffi::GstRTSPClient,
) { ) {
let instance = &*(ptr as *mut T::Instance); let instance = &*(ptr as *mut T::Instance);
let imp = instance.get_impl(); let imp = instance.get_impl();