implement effect processor
This commit is contained in:
parent
50c8096906
commit
2936f3c2b2
40
src/lib.rs
40
src/lib.rs
|
@ -131,6 +131,46 @@ impl Drop for Detector {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Effect calculator which interacts with the C++ library.
|
||||||
|
pub struct Effect {
|
||||||
|
graph: *mut mediagraph_Effect,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Effect {
|
||||||
|
/// Creates a new Mediagraph with the given config.
|
||||||
|
pub fn new(graph_config: &str, output_node: &str) -> Self {
|
||||||
|
let graph_config = CString::new(graph_config).expect("CString::new failed");
|
||||||
|
let output_node = CString::new(output_node).expect("CString::new failed");
|
||||||
|
|
||||||
|
let graph: *mut mediagraph_Effect =
|
||||||
|
unsafe { mediagraph_Effect::Create(graph_config.as_ptr(), output_node.as_ptr()) };
|
||||||
|
|
||||||
|
Self { graph }
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Processes the input frame, returns a slice of landmarks if any are detected.
|
||||||
|
pub fn process(&mut self, input: &Mat) -> Mat {
|
||||||
|
let mut data = input.clone();
|
||||||
|
let out_data = unsafe {
|
||||||
|
mediagraph_Effect_Process(
|
||||||
|
self.graph as *mut std::ffi::c_void,
|
||||||
|
data.data_mut(),
|
||||||
|
data.cols(),
|
||||||
|
data.rows(),
|
||||||
|
)
|
||||||
|
};
|
||||||
|
unsafe { Mat::from_raw(out_data as *mut std::ffi::c_void) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Drop for Effect {
|
||||||
|
fn drop(&mut self) {
|
||||||
|
unsafe {
|
||||||
|
mediagraph_Effect_Effect_destructor(self.graph);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub mod pose {
|
pub mod pose {
|
||||||
//! Pose detection utilities.
|
//! Pose detection utilities.
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user