1 // Copyright (c) 2019 Vivia Nikolaidou <vivia@ahiru.eu> 2 // 3 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or 4 // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license 5 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your 6 // option. This file may not be copied, modified, or distributed 7 // except according to those terms. 8 9 use glib::translate::*; 10 use glib::IsA; 11 12 use PipelineFlags; 13 14 pub trait GstPipelineExtManual: 'static { set_pipeline_flags(&self, flags: PipelineFlags)15 fn set_pipeline_flags(&self, flags: PipelineFlags); 16 unset_pipeline_flags(&self, flags: PipelineFlags)17 fn unset_pipeline_flags(&self, flags: PipelineFlags); 18 get_pipeline_flags(&self) -> PipelineFlags19 fn get_pipeline_flags(&self) -> PipelineFlags; 20 } 21 22 impl<O: IsA<::Pipeline>> GstPipelineExtManual for O { set_pipeline_flags(&self, flags: PipelineFlags)23 fn set_pipeline_flags(&self, flags: PipelineFlags) { 24 unsafe { 25 let ptr: *mut gst_sys::GstObject = self.as_ptr() as *mut _; 26 let _guard = ::utils::MutexGuard::lock(&(*ptr).lock); 27 (*ptr).flags |= flags.to_glib(); 28 } 29 } 30 unset_pipeline_flags(&self, flags: PipelineFlags)31 fn unset_pipeline_flags(&self, flags: PipelineFlags) { 32 unsafe { 33 let ptr: *mut gst_sys::GstObject = self.as_ptr() as *mut _; 34 let _guard = ::utils::MutexGuard::lock(&(*ptr).lock); 35 (*ptr).flags &= !flags.to_glib(); 36 } 37 } 38 get_pipeline_flags(&self) -> PipelineFlags39 fn get_pipeline_flags(&self) -> PipelineFlags { 40 unsafe { 41 let ptr: *mut gst_sys::GstObject = self.as_ptr() as *mut _; 42 let _guard = ::utils::MutexGuard::lock(&(*ptr).lock); 43 from_glib((*ptr).flags) 44 } 45 } 46 } 47