libobs_wrapper\sources/
filter.rs1use libobs::{obs_scene_t, obs_source_t};
2
3use crate::{
4 data::ImmutableObsData,
5 forward_obs_object_impl, forward_obs_source_impl, impl_obs_drop,
6 macros::impl_eq_of_ptr,
7 runtime::ObsRuntime,
8 sources::ObsSourceRef,
9 unsafe_send::SmartPointerSendable,
10 utils::{ObsDropGuard, ObsError, ObsString},
11};
12
13#[derive(Debug, Clone)]
14pub struct ObsFilterRef {
17 inner: ObsSourceRef,
18}
19
20impl ObsFilterRef {
21 pub fn new<T: Into<ObsString> + Sync + Send, K: Into<ObsString> + Sync + Send>(
24 id: T,
25 name: K,
26 settings: Option<ImmutableObsData>,
27 hotkey_data: Option<ImmutableObsData>,
28 runtime: ObsRuntime,
29 ) -> Result<Self, ObsError> {
30 let inner = ObsSourceRef::new(id, name, settings, hotkey_data, runtime)?;
31 Ok(Self { inner })
32 }
33}
34
35#[derive(Debug)]
36pub(crate) struct _ObsRemoveFilterOnDrop {
37 source: SmartPointerSendable<*mut obs_source_t>,
38 filter: SmartPointerSendable<*mut obs_source_t>,
39 _additional_ptr: Option<SmartPointerSendable<*mut obs_scene_t>>,
41 runtime: ObsRuntime,
42}
43
44impl _ObsRemoveFilterOnDrop {
45 pub fn new(
46 source: SmartPointerSendable<*mut obs_source_t>,
47 filter: SmartPointerSendable<*mut obs_source_t>,
48 additional_ptr: Option<SmartPointerSendable<*mut obs_scene_t>>,
49 runtime: ObsRuntime,
50 ) -> Self {
51 Self {
52 source,
53 filter,
54 _additional_ptr: additional_ptr,
55 runtime,
56 }
57 }
58}
59
60impl ObsDropGuard for _ObsRemoveFilterOnDrop {}
61impl_obs_drop!(_ObsRemoveFilterOnDrop, (source, filter), move || unsafe {
62 libobs::obs_source_filter_remove(source.get_ptr(), filter.get_ptr());
64});
65
66forward_obs_object_impl!(ObsFilterRef, inner, *mut libobs::obs_source_t);
67forward_obs_source_impl!(ObsFilterRef, inner);
68
69impl_eq_of_ptr!(ObsFilterRef);