mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer-rs.git
synced 2024-11-25 19:11:06 +00:00
rtsp-server: Add subclassing support for Onvif-specific client/media/media-factory/server
This commit is contained in:
parent
586fc75ffc
commit
b451f692cf
5 changed files with 115 additions and 0 deletions
|
@ -8,6 +8,19 @@ mod rtsp_media_factory;
|
|||
mod rtsp_mount_points;
|
||||
mod rtsp_server;
|
||||
|
||||
#[cfg(any(feature = "v1_14", feature = "dox"))]
|
||||
#[cfg_attr(feature = "dox", doc(cfg(feature = "v1_14")))]
|
||||
mod rtsp_onvif_client;
|
||||
#[cfg(any(feature = "v1_14", feature = "dox"))]
|
||||
#[cfg_attr(feature = "dox", doc(cfg(feature = "v1_14")))]
|
||||
mod rtsp_onvif_media;
|
||||
#[cfg(any(feature = "v1_14", feature = "dox"))]
|
||||
#[cfg_attr(feature = "dox", doc(cfg(feature = "v1_14")))]
|
||||
mod rtsp_onvif_media_factory;
|
||||
#[cfg(any(feature = "v1_14", feature = "dox"))]
|
||||
#[cfg_attr(feature = "dox", doc(cfg(feature = "v1_14")))]
|
||||
mod rtsp_onvif_server;
|
||||
|
||||
pub use self::rtsp_media::SDPInfo;
|
||||
|
||||
pub mod prelude {
|
||||
|
@ -18,5 +31,19 @@ pub mod prelude {
|
|||
pub use super::rtsp_media::{RTSPMediaImpl, RTSPMediaImplExt};
|
||||
pub use super::rtsp_media_factory::{RTSPMediaFactoryImpl, RTSPMediaFactoryImplExt};
|
||||
pub use super::rtsp_mount_points::{RTSPMountPointsImpl, RTSPMountPointsImplExt};
|
||||
#[cfg(any(feature = "v1_14", feature = "dox"))]
|
||||
#[cfg_attr(feature = "dox", doc(cfg(feature = "v1_14")))]
|
||||
pub use super::rtsp_onvif_client::RTSPOnvifClientImpl;
|
||||
#[cfg(any(feature = "v1_14", feature = "dox"))]
|
||||
#[cfg_attr(feature = "dox", doc(cfg(feature = "v1_14")))]
|
||||
pub use super::rtsp_onvif_media::RTSPOnvifMediaImpl;
|
||||
#[cfg(any(feature = "v1_14", feature = "dox"))]
|
||||
#[cfg_attr(feature = "dox", doc(cfg(feature = "v1_14")))]
|
||||
pub use super::rtsp_onvif_media_factory::{
|
||||
RTSPOnvifMediaFactoryImpl, RTSPOnvifMediaFactoryImplExt,
|
||||
};
|
||||
#[cfg(any(feature = "v1_14", feature = "dox"))]
|
||||
#[cfg_attr(feature = "dox", doc(cfg(feature = "v1_14")))]
|
||||
pub use super::rtsp_onvif_server::RTSPOnvifServerImpl;
|
||||
pub use super::rtsp_server::{RTSPServerImpl, RTSPServerImplExt};
|
||||
}
|
||||
|
|
10
gstreamer-rtsp-server/src/subclass/rtsp_onvif_client.rs
Normal file
10
gstreamer-rtsp-server/src/subclass/rtsp_onvif_client.rs
Normal file
|
@ -0,0 +1,10 @@
|
|||
// Take a look at the license at the top of the repository in the LICENSE file.
|
||||
|
||||
use glib::subclass::prelude::*;
|
||||
|
||||
use super::prelude::*;
|
||||
use crate::RTSPOnvifClient;
|
||||
|
||||
pub trait RTSPOnvifClientImpl: RTSPClientImpl + Send + Sync {}
|
||||
|
||||
unsafe impl<T: RTSPOnvifClientImpl> IsSubclassable<T> for RTSPOnvifClient {}
|
10
gstreamer-rtsp-server/src/subclass/rtsp_onvif_media.rs
Normal file
10
gstreamer-rtsp-server/src/subclass/rtsp_onvif_media.rs
Normal file
|
@ -0,0 +1,10 @@
|
|||
// Take a look at the license at the top of the repository in the LICENSE file.
|
||||
|
||||
use glib::subclass::prelude::*;
|
||||
|
||||
use super::prelude::*;
|
||||
use crate::RTSPOnvifMedia;
|
||||
|
||||
pub trait RTSPOnvifMediaImpl: RTSPMediaImpl + Send + Sync {}
|
||||
|
||||
unsafe impl<T: RTSPOnvifMediaImpl> IsSubclassable<T> for RTSPOnvifMedia {}
|
|
@ -0,0 +1,58 @@
|
|||
// Take a look at the license at the top of the repository in the LICENSE file.
|
||||
|
||||
use glib::prelude::*;
|
||||
use glib::subclass::prelude::*;
|
||||
use glib::translate::*;
|
||||
|
||||
use super::prelude::*;
|
||||
use crate::RTSPOnvifMediaFactory;
|
||||
|
||||
pub trait RTSPOnvifMediaFactoryImpl:
|
||||
RTSPMediaFactoryImplExt + RTSPMediaFactoryImpl + Send + Sync
|
||||
{
|
||||
fn has_backchannel_support(&self, factory: &Self::Type) -> bool {
|
||||
self.parent_has_backchannel_support(factory)
|
||||
}
|
||||
}
|
||||
|
||||
pub trait RTSPOnvifMediaFactoryImplExt: ObjectSubclass {
|
||||
fn parent_has_backchannel_support(&self, factory: &Self::Type) -> bool;
|
||||
}
|
||||
|
||||
impl<T: RTSPOnvifMediaFactoryImpl> RTSPOnvifMediaFactoryImplExt for T {
|
||||
fn parent_has_backchannel_support(&self, factory: &Self::Type) -> bool {
|
||||
unsafe {
|
||||
let data = Self::type_data();
|
||||
let parent_class =
|
||||
data.as_ref().parent_class() as *mut ffi::GstRTSPOnvifMediaFactoryClass;
|
||||
(*parent_class)
|
||||
.has_backchannel_support
|
||||
.map(|f| {
|
||||
from_glib(f(factory
|
||||
.unsafe_cast_ref::<RTSPOnvifMediaFactory>()
|
||||
.to_glib_none()
|
||||
.0))
|
||||
})
|
||||
.unwrap_or(false)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
unsafe impl<T: RTSPOnvifMediaFactoryImpl> IsSubclassable<T> for RTSPOnvifMediaFactory {
|
||||
fn class_init(klass: &mut glib::Class<Self>) {
|
||||
Self::parent_class_init::<T>(klass);
|
||||
let klass = klass.as_mut();
|
||||
klass.has_backchannel_support = Some(factory_has_backchannel_support::<T>);
|
||||
}
|
||||
}
|
||||
|
||||
unsafe extern "C" fn factory_has_backchannel_support<T: RTSPOnvifMediaFactoryImpl>(
|
||||
ptr: *mut ffi::GstRTSPOnvifMediaFactory,
|
||||
) -> glib::ffi::gboolean {
|
||||
let instance = &*(ptr as *mut T::Instance);
|
||||
let imp = instance.imp();
|
||||
let wrap: Borrowed<RTSPOnvifMediaFactory> = from_glib_borrow(ptr);
|
||||
|
||||
imp.has_backchannel_support(wrap.unsafe_cast_ref())
|
||||
.into_glib()
|
||||
}
|
10
gstreamer-rtsp-server/src/subclass/rtsp_onvif_server.rs
Normal file
10
gstreamer-rtsp-server/src/subclass/rtsp_onvif_server.rs
Normal file
|
@ -0,0 +1,10 @@
|
|||
// Take a look at the license at the top of the repository in the LICENSE file.
|
||||
|
||||
use glib::subclass::prelude::*;
|
||||
|
||||
use super::prelude::*;
|
||||
use crate::RTSPOnvifServer;
|
||||
|
||||
pub trait RTSPOnvifServerImpl: RTSPServerImpl + Send + Sync {}
|
||||
|
||||
unsafe impl<T: RTSPOnvifServerImpl> IsSubclassable<T> for RTSPOnvifServer {}
|
Loading…
Reference in a new issue