gstreamer_audio/
audio_aggregator.rs
1#[cfg(feature = "v1_18")]
2use std::mem::transmute;
3
4#[cfg(feature = "v1_18")]
5use glib::object::Cast;
6#[cfg(feature = "v1_18")]
7use glib::signal::{connect_raw, SignalHandlerId};
8use glib::translate::*;
9use gst::prelude::*;
10
11use crate::{ffi, AudioAggregator, AudioAggregatorPad};
12
13pub trait AudioAggregatorExtManual: IsA<AudioAggregator> + 'static {
14 #[doc(alias = "gst_audio_aggregator_set_sink_caps")]
15 fn set_sink_caps(&self, pad: &impl IsA<AudioAggregatorPad>, caps: &gst::CapsRef) {
16 unsafe {
17 ffi::gst_audio_aggregator_set_sink_caps(
18 self.as_ref().to_glib_none().0,
19 pad.as_ref().to_glib_none().0,
20 caps.as_mut_ptr(),
21 );
22 }
23 }
24
25 #[cfg(feature = "v1_18")]
26 #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
27 #[doc(alias = "output-buffer-duration-fraction")]
28 fn output_buffer_duration_fraction(&self) -> gst::Fraction {
29 ObjectExt::property(self.as_ref(), "output-buffer-duration-fraction")
30 }
31
32 #[cfg(feature = "v1_18")]
33 #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
34 #[doc(alias = "output-buffer-duration-fraction")]
35 fn set_output_buffer_duration_fraction(&self, output_buffer_duration_fraction: gst::Fraction) {
36 ObjectExt::set_property(
37 self.as_ref(),
38 "output-buffer-duration-fraction",
39 output_buffer_duration_fraction,
40 )
41 }
42
43 #[cfg(feature = "v1_18")]
44 #[cfg_attr(docsrs, doc(cfg(feature = "v1_18")))]
45 #[doc(alias = "output-buffer-duration-fraction")]
46 fn connect_output_buffer_duration_fraction_notify<F: Fn(&Self) + Send + Sync + 'static>(
47 &self,
48 f: F,
49 ) -> SignalHandlerId {
50 unsafe extern "C" fn notify_output_buffer_duration_fraction_trampoline<
51 P: IsA<AudioAggregator>,
52 F: Fn(&P) + Send + Sync + 'static,
53 >(
54 this: *mut ffi::GstAudioAggregator,
55 _param_spec: glib::ffi::gpointer,
56 f: glib::ffi::gpointer,
57 ) {
58 let f: &F = &*(f as *const F);
59 f(AudioAggregator::from_glib_borrow(this).unsafe_cast_ref())
60 }
61 unsafe {
62 let f: Box<F> = Box::new(f);
63 connect_raw(
64 self.as_ptr() as *mut _,
65 b"notify::output-buffer-duration-fraction\0".as_ptr() as *const _,
66 Some(transmute::<*const (), unsafe extern "C" fn()>(
67 notify_output_buffer_duration_fraction_trampoline::<Self, F> as *const (),
68 )),
69 Box::into_raw(f),
70 )
71 }
72 }
73
74 fn current_caps(&self) -> Option<gst::Caps> {
75 unsafe {
76 let ptr = self.as_ptr() as *mut ffi::GstAudioAggregator;
77 let _guard = self.as_ref().object_lock();
78 from_glib_none((*ptr).current_caps)
79 }
80 }
81
82 fn current_audio_info(&self) -> Option<crate::AudioInfo> {
83 self.current_caps()
84 .and_then(|caps| crate::AudioInfo::from_caps(&caps).ok())
85 }
86}
87
88impl<O: IsA<AudioAggregator>> AudioAggregatorExtManual for O {}