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