feat: Added PipelineExt trait for all Children of Pipelines
This commit is contained in:
@@ -1,32 +1,35 @@
|
||||
pub trait GstWrapper {
|
||||
type GstType: glib::prelude::ObjectType;
|
||||
fn from_gst(gst: Self::GstType) -> Self;
|
||||
fn into_gst(self) -> Self::GstType;
|
||||
// fn into_gst(self) -> Self::GstType;
|
||||
fn as_gst_ref(&self) -> &Self::GstType;
|
||||
}
|
||||
|
||||
#[macro_export]
|
||||
macro_rules! wrap_gst {
|
||||
($name:ident) => {
|
||||
wrap_gst!($name, gstreamer::$name);
|
||||
$crate::wrap_gst!($name, gstreamer::$name);
|
||||
};
|
||||
($name:ident, $inner:ty) => {
|
||||
$crate::wrap_gst!(core $name, $inner);
|
||||
$crate::wrap_gst!($name, $inner, into_inner);
|
||||
};
|
||||
($name:ident, $inner:ty, skip_inner) => {
|
||||
$crate::wrap_gst!(core $name, $inner);
|
||||
};
|
||||
|
||||
(core $name:ident, $inner:ty) => {
|
||||
#[derive(Debug, Clone)]
|
||||
#[repr(transparent)]
|
||||
pub struct $name {
|
||||
pub(crate) inner: $inner,
|
||||
}
|
||||
|
||||
impl From<$inner> for $name {
|
||||
fn from(inner: $inner) -> Self {
|
||||
Self { inner }
|
||||
}
|
||||
}
|
||||
impl From<$name> for $inner {
|
||||
fn from(wrapper: $name) -> Self {
|
||||
wrapper.into_inner()
|
||||
}
|
||||
}
|
||||
// impl From<$name> for $inner {
|
||||
// fn from(wrapper: $name) -> Self {
|
||||
// wrapper.into_inner()
|
||||
// }
|
||||
// }
|
||||
|
||||
impl $name {
|
||||
pub fn into_inner(self) -> $inner {
|
||||
@@ -41,9 +44,9 @@ macro_rules! wrap_gst {
|
||||
Self { inner: gst }
|
||||
}
|
||||
|
||||
fn into_gst(self) -> Self::GstType {
|
||||
self.inner.clone()
|
||||
}
|
||||
// fn into_gst(self) -> Self::GstType {
|
||||
// self.inner.clone()
|
||||
// }
|
||||
|
||||
fn as_gst_ref(&self) -> &Self::GstType {
|
||||
&self.inner
|
||||
@@ -56,6 +59,13 @@ macro_rules! wrap_gst {
|
||||
}
|
||||
}
|
||||
};
|
||||
($name:ident, $inner:ty, into_inner) => {
|
||||
impl From<$inner> for $name {
|
||||
fn from(inner: $inner) -> Self {
|
||||
Self { inner }
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/// A trait for types that can be upcasted to type T.
|
||||
@@ -93,5 +103,31 @@ macro_rules! parent_child {
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
}; // ($parent:ty, $child:ty, deref) => {
|
||||
// $crate::parent_child!($parent, $child);
|
||||
// $crate::parent_child!($parent, $child, __deref);
|
||||
// };
|
||||
//
|
||||
// ($parent:ty, $child:ty, downcast, deref) => {
|
||||
// $crate::parent_child!($parent, $child, downcast);
|
||||
// $crate::parent_child!($parent, $child, __deref);
|
||||
// };
|
||||
// ($parent:ty, $child:ty, deref, downcast) => {
|
||||
// $crate::parent_child!($parent, $child, downcast);
|
||||
// $crate::parent_child!($parent, $child, __deref);
|
||||
// };
|
||||
//
|
||||
// ($parent:ty, $child:ty, __deref) => {
|
||||
// impl core::ops::Deref for $child
|
||||
// where
|
||||
// $child: GstWrapper,
|
||||
// $parent: GstWrapper,
|
||||
// {
|
||||
// type Target = $parent;
|
||||
//
|
||||
// fn deref(&self) -> &Self::Target {
|
||||
// self.upcast_ref()
|
||||
// }
|
||||
// }
|
||||
// };
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user