diff --git a/gst-plugin/src/base_sink.rs b/gst-plugin/src/base_sink.rs index 4ff95ce4..e40689c1 100644 --- a/gst-plugin/src/base_sink.rs +++ b/gst-plugin/src/base_sink.rs @@ -206,6 +206,7 @@ pub type BaseSinkClass = ClassStruct; // FIXME: Boilerplate unsafe impl BaseSinkClassExt for BaseSinkClass {} unsafe impl ElementClassExt for BaseSinkClass {} +unsafe impl ObjectClassExt for BaseSinkClass {} unsafe impl Send for BaseSink {} unsafe impl Sync for BaseSink {} @@ -291,15 +292,10 @@ box_base_sink_impl!(BaseSinkImpl); impl ObjectType for BaseSink { const NAME: &'static str = "RsBaseSink"; - type GlibType = gst_base_ffi::GstBaseSink; - type GlibClassType = gst_base_ffi::GstBaseSinkClass; + type ParentType = gst_base::BaseSink; type ImplType = Box>; type InstanceStructType = ElementInstanceStruct; - fn glib_type() -> glib::Type { - unsafe { from_glib(gst_base_ffi::gst_base_sink_get_type()) } - } - fn class_init(token: &ClassInitToken, klass: &mut BaseSinkClass) { ElementClassExt::override_vfuncs(klass, token); BaseSinkClassExt::override_vfuncs(klass, token); diff --git a/gst-plugin/src/base_src.rs b/gst-plugin/src/base_src.rs index fbf23d44..12ff3d6e 100644 --- a/gst-plugin/src/base_src.rs +++ b/gst-plugin/src/base_src.rs @@ -257,6 +257,7 @@ pub type BaseSrcClass = ClassStruct; // FIXME: Boilerplate unsafe impl BaseSrcClassExt for BaseSrcClass {} unsafe impl ElementClassExt for BaseSrcClass {} +unsafe impl ObjectClassExt for BaseSrcClass {} unsafe impl Send for BaseSrc {} unsafe impl Sync for BaseSrc {} @@ -362,16 +363,12 @@ box_base_src_impl!(BaseSrcImpl); impl ObjectType for BaseSrc { const NAME: &'static str = "RsBaseSrc"; - type GlibType = gst_base_ffi::GstBaseSrc; - type GlibClassType = gst_base_ffi::GstBaseSrcClass; + type ParentType = gst_base::BaseSrc; type ImplType = Box>; type InstanceStructType = ElementInstanceStruct; - fn glib_type() -> glib::Type { - unsafe { from_glib(gst_base_ffi::gst_base_src_get_type()) } - } - fn class_init(token: &ClassInitToken, klass: &mut BaseSrcClass) { + ObjectClassExt::override_vfuncs(klass, token); ElementClassExt::override_vfuncs(klass, token); BaseSrcClassExt::override_vfuncs(klass, token); } diff --git a/gst-plugin/src/base_transform.rs b/gst-plugin/src/base_transform.rs index cf308fa8..fecb1d42 100644 --- a/gst-plugin/src/base_transform.rs +++ b/gst-plugin/src/base_transform.rs @@ -335,6 +335,7 @@ pub type BaseTransformClass = ClassStruct; // FIXME: Boilerplate unsafe impl BaseTransformClassExt for BaseTransformClass {} unsafe impl ElementClassExt for BaseTransformClass {} +unsafe impl ObjectClassExt for BaseTransformClass {} unsafe impl Send for BaseTransform {} unsafe impl Sync for BaseTransform {} @@ -424,15 +425,10 @@ box_base_transform_impl!(BaseTransformImpl); impl ObjectType for BaseTransform { const NAME: &'static str = "RsBaseTransform"; - type GlibType = gst_base_ffi::GstBaseTransform; - type GlibClassType = gst_base_ffi::GstBaseTransformClass; + type ParentType = gst_base::BaseTransform; type ImplType = Box>; type InstanceStructType = ElementInstanceStruct; - fn glib_type() -> glib::Type { - unsafe { from_glib(gst_base_ffi::gst_base_transform_get_type()) } - } - fn class_init(token: &ClassInitToken, klass: &mut BaseTransformClass) { ElementClassExt::override_vfuncs(klass, token); BaseTransformClassExt::override_vfuncs(klass, token); diff --git a/gst-plugin/src/bin.rs b/gst-plugin/src/bin.rs index c6b4c016..35c42af1 100644 --- a/gst-plugin/src/bin.rs +++ b/gst-plugin/src/bin.rs @@ -111,6 +111,7 @@ pub type BinClass = ClassStruct; // FIXME: Boilerplate unsafe impl BinClassExt for BinClass {} unsafe impl ElementClassExt for BinClass {} +unsafe impl ObjectClassExt for BinClass {} unsafe impl Send for Bin {} unsafe impl Sync for Bin {} @@ -145,15 +146,10 @@ box_bin_impl!(BinImpl); impl ObjectType for Bin { const NAME: &'static str = "RsBin"; - type GlibType = gst_ffi::GstBin; - type GlibClassType = gst_ffi::GstBinClass; + type ParentType = gst::Bin; type ImplType = Box>; type InstanceStructType = ElementInstanceStruct; - fn glib_type() -> glib::Type { - unsafe { from_glib(gst_ffi::gst_bin_get_type()) } - } - fn class_init(token: &ClassInitToken, klass: &mut BinClass) { ElementClassExt::override_vfuncs(klass, token); BinClassExt::override_vfuncs(klass, token); diff --git a/gst-plugin/src/element.rs b/gst-plugin/src/element.rs index 4b5d0b1f..20348917 100644 --- a/gst-plugin/src/element.rs +++ b/gst-plugin/src/element.rs @@ -207,6 +207,7 @@ pub type ElementClass = ClassStruct; // FIXME: Boilerplate unsafe impl ElementClassExt for ElementClass {} +unsafe impl ObjectClassExt for ElementClass {} unsafe impl Send for Element {} unsafe impl Sync for Element {} @@ -261,17 +262,13 @@ box_element_impl!(ElementImpl); impl ObjectType for Element { const NAME: &'static str = "RsElement"; - type GlibType = gst_ffi::GstElement; - type GlibClassType = gst_ffi::GstElementClass; + type ParentType = gst::Element; type ImplType = Box>; type InstanceStructType = ElementInstanceStruct; - fn glib_type() -> glib::Type { - unsafe { from_glib(gst_ffi::gst_element_get_type()) } - } - fn class_init(token: &ClassInitToken, klass: &mut ElementClass) { - klass.override_vfuncs(token); + ObjectClassExt::override_vfuncs(klass, token); + ElementClassExt::override_vfuncs(klass, token); } object_type_fns!(); diff --git a/gst-plugin/src/object.rs b/gst-plugin/src/object.rs index 20d9e061..e4ee13e7 100644 --- a/gst-plugin/src/object.rs +++ b/gst-plugin/src/object.rs @@ -2,10 +2,11 @@ use std::ptr; use std::sync::atomic::AtomicBool; use gobject_subclass::object::*; +use glib::wrapper::Wrapper; #[repr(C)] pub struct ElementInstanceStruct { - _parent: T::GlibType, + _parent: ::GlibType, _imp: ptr::NonNull, _panicked: AtomicBool, @@ -16,7 +17,7 @@ pub trait PanicPoison { } unsafe impl Instance for ElementInstanceStruct { - fn parent(&self) -> &T::GlibType { + fn parent(&self) -> &::GlibType { &self._parent } diff --git a/gst-plugin/src/pipeline.rs b/gst-plugin/src/pipeline.rs index d1ad5d94..813ecec4 100644 --- a/gst-plugin/src/pipeline.rs +++ b/gst-plugin/src/pipeline.rs @@ -70,6 +70,7 @@ pub type PipelineClass = ClassStruct; unsafe impl PipelineClassExt for PipelineClass {} unsafe impl BinClassExt for PipelineClass {} unsafe impl ElementClassExt for PipelineClass {} +unsafe impl ObjectClassExt for PipelineClass {} unsafe impl Send for Pipeline {} unsafe impl Sync for Pipeline {} @@ -90,16 +91,12 @@ box_pipeline_impl!(PipelineImpl); impl ObjectType for Pipeline { const NAME: &'static str = "RsPipeline"; - type GlibType = gst_ffi::GstPipeline; - type GlibClassType = gst_ffi::GstPipelineClass; + type ParentType = gst::Pipeline; type ImplType = Box>; type InstanceStructType = ElementInstanceStruct; - fn glib_type() -> glib::Type { - unsafe { from_glib(gst_ffi::gst_pipeline_get_type()) } - } - fn class_init(token: &ClassInitToken, klass: &mut PipelineClass) { + ObjectClassExt::override_vfuncs(klass, token); ElementClassExt::override_vfuncs(klass, token); BinClassExt::override_vfuncs(klass, token); PipelineClassExt::override_vfuncs(klass, token);