forked from mirrors/gstreamer-rs
Add support for GstAudioLevelMeta
[Marijn: Add `GstAudioLevelMeta` to the `manual` list in `Gir.toml`]
This commit is contained in:
parent
738a07b279
commit
a6d5f6f5a5
2 changed files with 89 additions and 1 deletions
|
@ -45,6 +45,7 @@ manual = [
|
||||||
"GstAudio.AudioClippingMeta",
|
"GstAudio.AudioClippingMeta",
|
||||||
"GstAudio.AudioFormatInfo",
|
"GstAudio.AudioFormatInfo",
|
||||||
"GstAudio.AudioInfo",
|
"GstAudio.AudioInfo",
|
||||||
|
"GstAudio.AudioLevelMeta",
|
||||||
"GstAudio.AudioMeta",
|
"GstAudio.AudioMeta",
|
||||||
"GstAudio.AudioRingBufferSpec",
|
"GstAudio.AudioRingBufferSpec",
|
||||||
]
|
]
|
||||||
|
|
|
@ -219,12 +219,79 @@ impl fmt::Debug for AudioMeta {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(any(feature = "v1_20", feature = "dox"))]
|
||||||
|
#[cfg_attr(feature = "dox", doc(cfg(feature = "v1_20")))]
|
||||||
|
#[repr(transparent)]
|
||||||
|
#[doc(alias = "GstAudioLevelMeta")]
|
||||||
|
pub struct AudioLevelMeta(ffi::GstAudioLevelMeta);
|
||||||
|
|
||||||
|
#[cfg(any(feature = "v1_20", feature = "dox"))]
|
||||||
|
#[cfg_attr(feature = "dox", doc(cfg(feature = "v1_20")))]
|
||||||
|
unsafe impl Send for AudioLevelMeta {}
|
||||||
|
#[cfg(any(feature = "v1_20", feature = "dox"))]
|
||||||
|
#[cfg_attr(feature = "dox", doc(cfg(feature = "v1_20")))]
|
||||||
|
unsafe impl Sync for AudioLevelMeta {}
|
||||||
|
|
||||||
|
#[cfg(any(feature = "v1_20", feature = "dox"))]
|
||||||
|
#[cfg_attr(feature = "dox", doc(cfg(feature = "v1_20")))]
|
||||||
|
impl AudioLevelMeta {
|
||||||
|
#[doc(alias = "gst_buffer_add_audio_level_meta")]
|
||||||
|
pub fn add(
|
||||||
|
buffer: &mut gst::BufferRef,
|
||||||
|
level: u8,
|
||||||
|
voice_activity: bool,
|
||||||
|
) -> gst::MetaRefMut<Self, gst::meta::Standalone> {
|
||||||
|
skip_assert_initialized!();
|
||||||
|
unsafe {
|
||||||
|
let meta = ffi::gst_buffer_add_audio_level_meta(
|
||||||
|
buffer.as_mut_ptr(),
|
||||||
|
level,
|
||||||
|
voice_activity.into_glib(),
|
||||||
|
);
|
||||||
|
|
||||||
|
Self::from_mut_ptr(buffer, meta)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[doc(alias = "get_level")]
|
||||||
|
pub fn level(&self) -> u8 {
|
||||||
|
self.0.level
|
||||||
|
}
|
||||||
|
|
||||||
|
#[doc(alias = "get_voice_activity")]
|
||||||
|
pub fn voice_activity(&self) -> bool {
|
||||||
|
unsafe { from_glib(self.0.voice_activity) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(any(feature = "v1_20", feature = "dox"))]
|
||||||
|
#[cfg_attr(feature = "dox", doc(cfg(feature = "v1_20")))]
|
||||||
|
unsafe impl MetaAPI for AudioLevelMeta {
|
||||||
|
type GstType = ffi::GstAudioLevelMeta;
|
||||||
|
|
||||||
|
#[doc(alias = "gst_audio_level_meta_api_get_type")]
|
||||||
|
fn meta_api() -> glib::Type {
|
||||||
|
unsafe { from_glib(ffi::gst_audio_level_meta_api_get_type()) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(any(feature = "v1_20", feature = "dox"))]
|
||||||
|
#[cfg_attr(feature = "dox", doc(cfg(feature = "v1_20")))]
|
||||||
|
impl fmt::Debug for AudioLevelMeta {
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||||
|
f.debug_struct("AudioLevelMeta")
|
||||||
|
.field("level", &self.level())
|
||||||
|
.field("voice_activity", &self.voice_activity())
|
||||||
|
.finish()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_add_get_meta() {
|
fn test_add_get_audio_clipping_meta() {
|
||||||
use std::convert::TryInto;
|
use std::convert::TryInto;
|
||||||
|
|
||||||
gst::init().unwrap();
|
gst::init().unwrap();
|
||||||
|
@ -247,4 +314,24 @@ mod tests {
|
||||||
assert_eq!(cmeta.end().try_into(), Ok(gst::format::Default(Some(2))));
|
assert_eq!(cmeta.end().try_into(), Ok(gst::format::Default(Some(2))));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "v1_20")]
|
||||||
|
#[test]
|
||||||
|
fn test_add_get_audio_level_meta() {
|
||||||
|
gst::init().unwrap();
|
||||||
|
|
||||||
|
let mut buffer = gst::Buffer::with_size(1024).unwrap();
|
||||||
|
|
||||||
|
{
|
||||||
|
let cmeta = AudioLevelMeta::add(buffer.get_mut().unwrap(), 10, true);
|
||||||
|
assert_eq!(cmeta.level(), 10);
|
||||||
|
assert_eq!(cmeta.voice_activity(), true);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
let cmeta = buffer.meta::<AudioLevelMeta>().unwrap();
|
||||||
|
assert_eq!(cmeta.level(), 10);
|
||||||
|
assert_eq!(cmeta.voice_activity(), true);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue