gstreamer_audio/
audio_filter.rs

1// Take a look at the license at the top of the repository in the LICENSE file.
2
3use glib::{prelude::*, translate::*};
4use gst_base::prelude::*;
5
6use crate::{ffi, AudioFilter, AudioInfo};
7
8pub trait AudioFilterExtManual: IsA<AudioFilter> + 'static {
9    fn audio_info(&self) -> Option<AudioInfo> {
10        unsafe {
11            let ptr: &ffi::GstAudioFilter = &*(self.as_ptr() as *const _);
12            let sinkpad = self.as_ref().sink_pad();
13            let _guard = sinkpad.stream_lock();
14
15            let info = &ptr.info;
16
17            if !info.finfo.is_null() && info.channels > 0 && info.rate > 0 && info.bpf > 0 {
18                return None;
19            }
20            Some(from_glib_none(info as *const ffi::GstAudioInfo))
21        }
22    }
23}
24
25impl<O: IsA<AudioFilter>> AudioFilterExtManual for O {}