gstreamer: Add getters/setters for BinFlags and fix flags API for PadFlags

The BinFlags API was accidentally used for PadFlags, allowing to set
BinFlags on pads which is not very useful.
This commit is contained in:
Sebastian Dröge 2020-01-06 17:23:39 +02:00
parent 8aac047af5
commit 775c5bfe27
2 changed files with 38 additions and 7 deletions

View file

@ -7,6 +7,7 @@
// except according to those terms. // except according to those terms.
use Bin; use Bin;
use BinFlags;
use Element; use Element;
use LoggableError; use LoggableError;
@ -48,6 +49,12 @@ pub trait GstBinExtManual: 'static {
details: ::DebugGraphDetails, details: ::DebugGraphDetails,
file_name: Q, file_name: Q,
); );
fn set_bin_flags(&self, flags: BinFlags);
fn unset_bin_flags(&self, flags: BinFlags);
fn get_bin_flags(&self) -> BinFlags;
} }
impl<O: IsA<Bin>> GstBinExtManual for O { impl<O: IsA<Bin>> GstBinExtManual for O {
@ -170,6 +177,30 @@ impl<O: IsA<Bin>> GstBinExtManual for O {
) { ) {
::debug_bin_to_dot_file_with_ts(self, details, file_name) ::debug_bin_to_dot_file_with_ts(self, details, file_name)
} }
fn set_bin_flags(&self, flags: BinFlags) {
unsafe {
let ptr: *mut gst_sys::GstObject = self.as_ptr() as *mut _;
let _guard = ::utils::MutexGuard::lock(&(*ptr).lock);
(*ptr).flags |= flags.to_glib();
}
}
fn unset_bin_flags(&self, flags: BinFlags) {
unsafe {
let ptr: *mut gst_sys::GstObject = self.as_ptr() as *mut _;
let _guard = ::utils::MutexGuard::lock(&(*ptr).lock);
(*ptr).flags &= !flags.to_glib();
}
}
fn get_bin_flags(&self) -> BinFlags {
unsafe {
let ptr: *mut gst_sys::GstObject = self.as_ptr() as *mut _;
let _guard = ::utils::MutexGuard::lock(&(*ptr).lock);
from_glib((*ptr).flags)
}
}
} }
unsafe extern "C" fn do_latency_trampoline< unsafe extern "C" fn do_latency_trampoline<

View file

@ -7,7 +7,6 @@
// except according to those terms. // except according to those terms.
use miniobject::MiniObject; use miniobject::MiniObject;
use BinFlags;
use Buffer; use Buffer;
use BufferList; use BufferList;
use Event; use Event;
@ -19,6 +18,7 @@ use FormattedValue;
use GenericFormattedValue; use GenericFormattedValue;
use LoggableError; use LoggableError;
use Pad; use Pad;
use PadFlags;
use PadLinkCheck; use PadLinkCheck;
use PadLinkError; use PadLinkError;
use PadLinkReturn; use PadLinkReturn;
@ -261,11 +261,11 @@ pub trait PadExtManual: 'static {
fn store_sticky_event(&self, event: &Event) -> Result<FlowSuccess, FlowError>; fn store_sticky_event(&self, event: &Event) -> Result<FlowSuccess, FlowError>;
fn set_bin_flags(&self, flags: BinFlags); fn set_pad_flags(&self, flags: PadFlags);
fn unset_bin_flags(&self, flags: BinFlags); fn unset_pad_flags(&self, flags: PadFlags);
fn get_bin_flags(&self) -> BinFlags; fn get_pad_flags(&self) -> PadFlags;
} }
impl<O: IsA<Pad>> PadExtManual for O { impl<O: IsA<Pad>> PadExtManual for O {
@ -992,7 +992,7 @@ impl<O: IsA<Pad>> PadExtManual for O {
ret.into_result() ret.into_result()
} }
fn set_bin_flags(&self, flags: BinFlags) { fn set_pad_flags(&self, flags: PadFlags) {
unsafe { unsafe {
let ptr: *mut gst_sys::GstObject = self.as_ptr() as *mut _; let ptr: *mut gst_sys::GstObject = self.as_ptr() as *mut _;
let _guard = ::utils::MutexGuard::lock(&(*ptr).lock); let _guard = ::utils::MutexGuard::lock(&(*ptr).lock);
@ -1000,7 +1000,7 @@ impl<O: IsA<Pad>> PadExtManual for O {
} }
} }
fn unset_bin_flags(&self, flags: BinFlags) { fn unset_pad_flags(&self, flags: PadFlags) {
unsafe { unsafe {
let ptr: *mut gst_sys::GstObject = self.as_ptr() as *mut _; let ptr: *mut gst_sys::GstObject = self.as_ptr() as *mut _;
let _guard = ::utils::MutexGuard::lock(&(*ptr).lock); let _guard = ::utils::MutexGuard::lock(&(*ptr).lock);
@ -1008,7 +1008,7 @@ impl<O: IsA<Pad>> PadExtManual for O {
} }
} }
fn get_bin_flags(&self) -> BinFlags { fn get_pad_flags(&self) -> PadFlags {
unsafe { unsafe {
let ptr: *mut gst_sys::GstObject = self.as_ptr() as *mut _; let ptr: *mut gst_sys::GstObject = self.as_ptr() as *mut _;
let _guard = ::utils::MutexGuard::lock(&(*ptr).lock); let _guard = ::utils::MutexGuard::lock(&(*ptr).lock);