gstreamer_base/
flow_combiner.rs

1// Take a look at the license at the top of the repository in the LICENSE file.
2
3use crate::ffi;
4use glib::{prelude::*, translate::*};
5
6glib::wrapper! {
7    #[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
8    #[doc(alias = "GstFlowCombiner")]
9    pub struct FlowCombiner(Shared<ffi::GstFlowCombiner>);
10
11    match fn {
12        ref => |ptr| ffi::gst_flow_combiner_ref(ptr),
13        unref => |ptr| ffi::gst_flow_combiner_unref(ptr),
14        type_ => || ffi::gst_flow_combiner_get_type(),
15    }
16}
17
18impl FlowCombiner {
19    #[doc(alias = "gst_flow_combiner_new")]
20    pub fn new() -> Self {
21        assert_initialized_main_thread!();
22        unsafe { from_glib_full(ffi::gst_flow_combiner_new()) }
23    }
24
25    #[doc(alias = "gst_flow_combiner_add_pad")]
26    pub fn add_pad<P: IsA<gst::Pad>>(&self, pad: &P) {
27        unsafe {
28            ffi::gst_flow_combiner_add_pad(self.to_glib_none().0, pad.as_ref().to_glib_none().0);
29        }
30    }
31
32    #[doc(alias = "gst_flow_combiner_clear")]
33    pub fn clear(&self) {
34        unsafe {
35            ffi::gst_flow_combiner_clear(self.to_glib_none().0);
36        }
37    }
38
39    #[doc(alias = "gst_flow_combiner_remove_pad")]
40    pub fn remove_pad<P: IsA<gst::Pad>>(&self, pad: &P) {
41        unsafe {
42            ffi::gst_flow_combiner_remove_pad(self.to_glib_none().0, pad.as_ref().to_glib_none().0);
43        }
44    }
45
46    #[doc(alias = "gst_flow_combiner_reset")]
47    pub fn reset(&self) {
48        unsafe {
49            ffi::gst_flow_combiner_reset(self.to_glib_none().0);
50        }
51    }
52
53    #[doc(alias = "gst_flow_combiner_update_flow")]
54    pub fn update_flow<FRet: Into<gst::FlowReturn>>(
55        &self,
56        fret: FRet,
57    ) -> Result<gst::FlowSuccess, gst::FlowError> {
58        let fret: gst::FlowReturn = fret.into();
59        unsafe {
60            try_from_glib(ffi::gst_flow_combiner_update_flow(
61                self.to_glib_none().0,
62                fret.into_glib(),
63            ))
64        }
65    }
66
67    #[doc(alias = "gst_flow_combiner_update_pad_flow")]
68    pub fn update_pad_flow<P: IsA<gst::Pad>, FRet: Into<gst::FlowReturn>>(
69        &self,
70        pad: &P,
71        fret: FRet,
72    ) -> Result<gst::FlowSuccess, gst::FlowError> {
73        let fret: gst::FlowReturn = fret.into();
74        unsafe {
75            try_from_glib(ffi::gst_flow_combiner_update_pad_flow(
76                self.to_glib_none().0,
77                pad.as_ref().to_glib_none().0,
78                fret.into_glib(),
79            ))
80        }
81    }
82}
83
84impl Default for FlowCombiner {
85    fn default() -> Self {
86        Self::new()
87    }
88}
89
90#[derive(Debug)]
91pub struct UniqueFlowCombiner(FlowCombiner);
92
93unsafe impl Sync for UniqueFlowCombiner {}
94unsafe impl Send for UniqueFlowCombiner {}
95
96impl UniqueFlowCombiner {
97    pub fn new() -> Self {
98        Self(FlowCombiner::new())
99    }
100
101    pub fn add_pad<P: IsA<gst::Pad>>(&mut self, pad: &P) {
102        self.0.add_pad(pad);
103    }
104
105    pub fn clear(&mut self) {
106        self.0.clear();
107    }
108
109    pub fn remove_pad<P: IsA<gst::Pad>>(&mut self, pad: &P) {
110        self.0.remove_pad(pad);
111    }
112
113    pub fn reset(&mut self) {
114        self.0.reset();
115    }
116
117    pub fn update_flow(
118        &mut self,
119        fret: Result<gst::FlowSuccess, gst::FlowError>,
120    ) -> Result<gst::FlowSuccess, gst::FlowError> {
121        self.0.update_flow(fret)
122    }
123
124    pub fn update_pad_flow<P: IsA<gst::Pad>>(
125        &mut self,
126        pad: &P,
127        fret: Result<gst::FlowSuccess, gst::FlowError>,
128    ) -> Result<gst::FlowSuccess, gst::FlowError> {
129        self.0.update_pad_flow(pad, fret)
130    }
131}
132
133impl Default for UniqueFlowCombiner {
134    fn default() -> Self {
135        Self::new()
136    }
137}