// Copyright (C) 2017 Sebastian Dröge // // Licensed under the Apache License, Version 2.0 or the MIT license // , at your // option. This file may not be copied, modified, or distributed // except according to those terms. use glib::object::IsA; use glib::translate::*; use gobject_sys; use gst; use gst_base_sys; glib_wrapper! { #[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] pub struct FlowCombiner(Shared); match fn { ref => |ptr| gobject_sys::g_boxed_copy(gst_base_sys::gst_flow_combiner_get_type(), ptr as *mut _), unref => |ptr| gobject_sys::g_boxed_free(gst_base_sys::gst_flow_combiner_get_type(), ptr as *mut _), get_type => || gst_base_sys::gst_flow_combiner_get_type(), } } impl FlowCombiner { pub fn new() -> FlowCombiner { assert_initialized_main_thread!(); unsafe { from_glib_full(gst_base_sys::gst_flow_combiner_new()) } } pub fn add_pad>(&self, pad: &P) { unsafe { gst_base_sys::gst_flow_combiner_add_pad( self.to_glib_none().0, pad.as_ref().to_glib_none().0, ); } } pub fn clear(&self) { unsafe { gst_base_sys::gst_flow_combiner_clear(self.to_glib_none().0); } } pub fn remove_pad>(&self, pad: &P) { unsafe { gst_base_sys::gst_flow_combiner_remove_pad( self.to_glib_none().0, pad.as_ref().to_glib_none().0, ); } } pub fn reset(&self) { unsafe { gst_base_sys::gst_flow_combiner_reset(self.to_glib_none().0); } } pub fn update_flow>( &self, fret: FRet, ) -> Result { let fret: gst::FlowReturn = fret.into(); let ret: gst::FlowReturn = unsafe { from_glib(gst_base_sys::gst_flow_combiner_update_flow( self.to_glib_none().0, fret.to_glib(), )) }; ret.into_result() } pub fn update_pad_flow, FRet: Into>( &self, pad: &P, fret: FRet, ) -> Result { let fret: gst::FlowReturn = fret.into(); let ret: gst::FlowReturn = unsafe { from_glib(gst_base_sys::gst_flow_combiner_update_pad_flow( self.to_glib_none().0, pad.as_ref().to_glib_none().0, fret.to_glib(), )) }; ret.into_result() } } impl Default for FlowCombiner { fn default() -> Self { Self::new() } } #[derive(Debug)] pub struct UniqueFlowCombiner(FlowCombiner); unsafe impl Sync for UniqueFlowCombiner {} unsafe impl Send for UniqueFlowCombiner {} impl UniqueFlowCombiner { pub fn new() -> UniqueFlowCombiner { UniqueFlowCombiner(FlowCombiner::new()) } pub fn add_pad>(&mut self, pad: &P) { self.0.add_pad(pad); } pub fn clear(&mut self) { self.0.clear(); } pub fn remove_pad>(&mut self, pad: &P) { self.0.remove_pad(pad); } pub fn reset(&mut self) { self.0.reset(); } pub fn update_flow( &mut self, fret: Result, ) -> Result { self.0.update_flow(fret) } pub fn update_pad_flow>( &mut self, pad: &P, fret: Result, ) -> Result { self.0.update_pad_flow(pad, fret) } } impl Default for UniqueFlowCombiner { fn default() -> Self { Self::new() } }