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