gstreamer_pbutils/
audio_visualizer.rs
1use gst::prelude::*;
4
5use crate::{ffi, subclass::AudioVisualizerSetupToken, AudioVisualizer};
6
7mod sealed {
8 pub trait Sealed {}
9 impl<T: super::IsA<super::AudioVisualizer>> Sealed for T {}
10}
11
12pub trait AudioVisualizerExtManual:
13 sealed::Sealed + IsA<AudioVisualizer> + IsA<gst::Element> + 'static
14{
15 fn req_spf(&self) -> u32 {
18 let sinkpad = self.static_pad("sink").expect("sink pad presence");
19 let _stream_lock = sinkpad.stream_lock();
20
21 let ptr = self.as_ptr() as *mut ffi::GstAudioVisualizer;
22 unsafe { (*ptr).req_spf }
23 }
24
25 fn set_req_spf(&self, spf: u32, token: &AudioVisualizerSetupToken) {
29 assert_eq!(
30 self.as_ptr() as *mut ffi::GstAudioVisualizer,
31 token.0.as_ptr()
32 );
33
34 let sinkpad = self.static_pad("sink").expect("sink pad presence");
35 let _stream_lock = sinkpad.stream_lock();
36
37 let ptr = self.as_ptr() as *mut ffi::GstAudioVisualizer;
38 unsafe {
39 (*ptr).req_spf = spf;
40 }
41 }
42
43 fn audio_info(&self) -> gst_audio::AudioInfo {
44 let sinkpad = self.static_pad("sink").expect("sink pad presence");
45 let _stream_lock = sinkpad.stream_lock();
46
47 let ptr = self.as_ptr() as *mut ffi::GstAudioVisualizer;
48 unsafe {
49 let info = &(*ptr).ainfo;
50 glib::translate::from_glib_none(glib::translate::mut_override(
51 info as *const gst_audio::ffi::GstAudioInfo,
52 ))
53 }
54 }
55
56 fn video_info(&self) -> gst_video::VideoInfo {
57 let srcpad = self.static_pad("src").expect("src pad presence");
58 let _stream_lock = srcpad.stream_lock();
59
60 let ptr = self.as_ptr() as *mut ffi::GstAudioVisualizer;
61 unsafe {
62 let info = &(*ptr).vinfo;
63 glib::translate::from_glib_none(glib::translate::mut_override(
64 info as *const gst_video::ffi::GstVideoInfo,
65 ))
66 }
67 }
68}
69
70impl<O: IsA<AudioVisualizer> + IsA<gst::Element>> AudioVisualizerExtManual for O {}