mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer-rs.git
synced 2024-11-22 09:31:06 +00:00
examples: Add a few more docs/comments to the subclass/virtual methods example
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/-/merge_requests/1360>
This commit is contained in:
parent
0ec7b2608c
commit
3daab0112d
3 changed files with 11 additions and 0 deletions
|
@ -45,6 +45,8 @@ impl ObjectSubclass for IirFilter {
|
||||||
type ParentType = gst_audio::AudioFilter;
|
type ParentType = gst_audio::AudioFilter;
|
||||||
type Class = super::Class;
|
type Class = super::Class;
|
||||||
|
|
||||||
|
// Here we set default implementations for all the virtual methods.
|
||||||
|
// This is mandatory for all virtual methods that are not `Option`s.
|
||||||
fn class_init(class: &mut Self::Class) {
|
fn class_init(class: &mut Self::Class) {
|
||||||
class.set_rate = |obj, rate| obj.imp().set_rate_default(rate);
|
class.set_rate = |obj, rate| obj.imp().set_rate_default(rate);
|
||||||
}
|
}
|
||||||
|
|
|
@ -60,6 +60,8 @@ unsafe impl ClassStruct for Class {
|
||||||
type Type = imp::IirFilter;
|
type Type = imp::IirFilter;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// This allows directly using `Class` as e.g. `gst_audio::AudioFilterClass` or
|
||||||
|
/// `gst_base::BaseTransformClass` without having to cast.
|
||||||
impl std::ops::Deref for Class {
|
impl std::ops::Deref for Class {
|
||||||
type Target = glib::Class<<<Self as ClassStruct>::Type as ObjectSubclass>::ParentType>;
|
type Target = glib::Class<<<Self as ClassStruct>::Type as ObjectSubclass>::ParentType>;
|
||||||
|
|
||||||
|
@ -68,6 +70,8 @@ impl std::ops::Deref for Class {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Overrides the virtual methods with the actual implementation of the subclass as is provided by
|
||||||
|
/// the subclass' implementation of the `Impl` trait.
|
||||||
unsafe impl<T: IirFilterImpl> IsSubclassable<T> for IirFilter {
|
unsafe impl<T: IirFilterImpl> IsSubclassable<T> for IirFilter {
|
||||||
fn class_init(class: &mut glib::Class<Self>) {
|
fn class_init(class: &mut glib::Class<Self>) {
|
||||||
Self::parent_class_init::<T>(class);
|
Self::parent_class_init::<T>(class);
|
||||||
|
|
|
@ -121,6 +121,11 @@ impl AudioFilterImpl for Lowpass {}
|
||||||
// Implement of IirFilter virtual methods
|
// Implement of IirFilter virtual methods
|
||||||
impl IirFilterImpl for Lowpass {
|
impl IirFilterImpl for Lowpass {
|
||||||
fn set_rate(&self, rate: u32) {
|
fn set_rate(&self, rate: u32) {
|
||||||
|
// Could call
|
||||||
|
// self.parent_set_rate(rate);
|
||||||
|
// here but chaining up is not necessary if the base class doesn't require that
|
||||||
|
// or if the behaviour of the parent class should be completely overridden.
|
||||||
|
|
||||||
self.state.lock().unwrap().rate = Some(rate);
|
self.state.lock().unwrap().rate = Some(rate);
|
||||||
self.calculate_coeffs();
|
self.calculate_coeffs();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue