mirror of
https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs.git
synced 2024-12-23 18:40:32 +00:00
webrtc/signaller: remove SignallableImplExt
This pattern is used for subclassing and calling parent class/interface functions. However that is not useful for the signaller object. 1. The signals are the API contract and should instead be used by webrtcsrc/sink to ask or provide outside for/with information. 2. The default case (no signal attached)is instead handled by default class handlers that call directly using the relevant rust trait. No parent (GObject) vfuncs necessary. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1141>
This commit is contained in:
parent
b6e78b5f04
commit
343b659755
2 changed files with 8 additions and 92 deletions
|
@ -303,101 +303,18 @@ where
|
||||||
}
|
}
|
||||||
|
|
||||||
pub trait SignallableImpl: object::ObjectImpl + 'static {
|
pub trait SignallableImpl: object::ObjectImpl + 'static {
|
||||||
fn start(&self) {
|
fn start(&self) {}
|
||||||
SignallableImplExt::parent_vstart(self)
|
fn stop(&self) {}
|
||||||
}
|
fn send_sdp(&self, _session_id: &str, _sdp: &gst_webrtc::WebRTCSessionDescription) {}
|
||||||
fn stop(&self) {
|
|
||||||
SignallableImplExt::parent_vstop(self)
|
|
||||||
}
|
|
||||||
fn send_sdp(&self, session_id: &str, sdp: &gst_webrtc::WebRTCSessionDescription) {
|
|
||||||
SignallableImplExt::parent_send_sdp(self, session_id, sdp)
|
|
||||||
}
|
|
||||||
fn add_ice(
|
fn add_ice(
|
||||||
&self,
|
&self,
|
||||||
session_id: &str,
|
_session_id: &str,
|
||||||
candidate: &str,
|
_candidate: &str,
|
||||||
sdp_m_line_index: Option<u32>,
|
_sdp_m_line_index: Option<u32>,
|
||||||
sdp_mid: Option<String>,
|
_sdp_mid: Option<String>,
|
||||||
) {
|
) {
|
||||||
SignallableImplExt::parent_add_ice(self, session_id, candidate, sdp_m_line_index, sdp_mid)
|
|
||||||
}
|
|
||||||
fn end_session(&self, session_id: &str) {
|
|
||||||
SignallableImplExt::parent_end_session(self, session_id)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub trait SignallableImplExt: types::ObjectSubclass {
|
|
||||||
fn parent_vstart(&self);
|
|
||||||
fn parent_vstop(&self);
|
|
||||||
fn parent_send_sdp(&self, session_id: &str, sdp: &gst_webrtc::WebRTCSessionDescription);
|
|
||||||
fn parent_add_ice(
|
|
||||||
&self,
|
|
||||||
session_id: &str,
|
|
||||||
candidate: &str,
|
|
||||||
sdp_m_line_index: Option<u32>,
|
|
||||||
sdp_mid: Option<String>,
|
|
||||||
);
|
|
||||||
fn parent_end_session(&self, session_id: &str);
|
|
||||||
}
|
|
||||||
|
|
||||||
type ClassType = *mut <super::Signallable as glib::object::ObjectType>::GlibClassType;
|
|
||||||
impl<Obj: SignallableImpl> SignallableImplExt for Obj {
|
|
||||||
fn parent_vstart(&self) {
|
|
||||||
let obj = self.obj();
|
|
||||||
let obj = unsafe { obj.unsafe_cast_ref::<super::Signallable>() };
|
|
||||||
let vtable = unsafe {
|
|
||||||
&*(Self::type_data()
|
|
||||||
.as_ref()
|
|
||||||
.parent_interface::<super::Signallable>() as ClassType)
|
|
||||||
};
|
|
||||||
(vtable.start)(obj)
|
|
||||||
}
|
|
||||||
fn parent_vstop(&self) {
|
|
||||||
let obj = self.obj();
|
|
||||||
let obj = unsafe { obj.unsafe_cast_ref::<super::Signallable>() };
|
|
||||||
let vtable = unsafe {
|
|
||||||
&*(Self::type_data()
|
|
||||||
.as_ref()
|
|
||||||
.parent_interface::<super::Signallable>() as ClassType)
|
|
||||||
};
|
|
||||||
(vtable.stop)(obj)
|
|
||||||
}
|
|
||||||
fn parent_send_sdp(&self, session_id: &str, sdp: &gst_webrtc::WebRTCSessionDescription) {
|
|
||||||
let obj = self.obj();
|
|
||||||
let obj = unsafe { obj.unsafe_cast_ref::<super::Signallable>() };
|
|
||||||
let vtable = unsafe {
|
|
||||||
&*(Self::type_data()
|
|
||||||
.as_ref()
|
|
||||||
.parent_interface::<super::Signallable>() as ClassType)
|
|
||||||
};
|
|
||||||
(vtable.send_sdp)(obj, session_id, sdp)
|
|
||||||
}
|
|
||||||
fn parent_add_ice(
|
|
||||||
&self,
|
|
||||||
session_id: &str,
|
|
||||||
candidate: &str,
|
|
||||||
sdp_m_line_index: Option<u32>,
|
|
||||||
sdp_mid: Option<String>,
|
|
||||||
) {
|
|
||||||
let obj = self.obj();
|
|
||||||
let obj = unsafe { obj.unsafe_cast_ref::<super::Signallable>() };
|
|
||||||
let vtable = unsafe {
|
|
||||||
&*(Self::type_data()
|
|
||||||
.as_ref()
|
|
||||||
.parent_interface::<super::Signallable>() as ClassType)
|
|
||||||
};
|
|
||||||
(vtable.add_ice)(obj, session_id, candidate, sdp_m_line_index, sdp_mid)
|
|
||||||
}
|
|
||||||
fn parent_end_session(&self, session_id: &str) {
|
|
||||||
let obj = self.obj();
|
|
||||||
let obj = unsafe { obj.unsafe_cast_ref::<super::Signallable>() };
|
|
||||||
let vtable = unsafe {
|
|
||||||
&*(Self::type_data()
|
|
||||||
.as_ref()
|
|
||||||
.parent_interface::<super::Signallable>() as ClassType)
|
|
||||||
};
|
|
||||||
(vtable.end_session)(obj, session_id)
|
|
||||||
}
|
}
|
||||||
|
fn end_session(&self, _session_id: &str) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub trait SignallableExt: 'static {
|
pub trait SignallableExt: 'static {
|
||||||
|
|
|
@ -40,7 +40,6 @@ impl Signaller {
|
||||||
|
|
||||||
pub use iface::SignallableExt;
|
pub use iface::SignallableExt;
|
||||||
pub use iface::SignallableImpl;
|
pub use iface::SignallableImpl;
|
||||||
pub use iface::SignallableImplExt;
|
|
||||||
|
|
||||||
unsafe impl Send for Signallable {}
|
unsafe impl Send for Signallable {}
|
||||||
unsafe impl Sync for Signallable {}
|
unsafe impl Sync for Signallable {}
|
||||||
|
|
Loading…
Reference in a new issue