mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer-rs.git
synced 2025-02-16 11:05:20 +00:00
Cleanup pad probes examples a bit
This commit is contained in:
parent
2915bfa299
commit
945d136acb
1 changed files with 13 additions and 17 deletions
|
@ -3,8 +3,6 @@ use gst::*;
|
|||
|
||||
use std::u64;
|
||||
use std::i16;
|
||||
use std::env;
|
||||
use std::mem;
|
||||
|
||||
fn main() {
|
||||
gst::init().unwrap();
|
||||
|
@ -15,21 +13,19 @@ fn main() {
|
|||
let src = pipeline.clone().dynamic_cast::<Bin>().unwrap().get_by_name("src").unwrap();
|
||||
let src_pad = src.get_static_pad("src").unwrap();
|
||||
src_pad.add_probe(PAD_PROBE_TYPE_BUFFER, |_, probe_info| {
|
||||
if let Some(ref probe_data) = probe_info.data {
|
||||
match *probe_data {
|
||||
PadProbeData::Buffer(ref buffer) => {
|
||||
let map = buffer.map_read().unwrap();
|
||||
let data = map.as_slice();
|
||||
let sum: f64 = data.chunks(2).map(|sample| {
|
||||
let u: u16 = ((sample[0] as u16) << 8) | (sample[1] as u16);
|
||||
let f = (u as i16 as f64) / (i16::MAX as f64);
|
||||
f * f
|
||||
}).sum();
|
||||
let rms = (sum / ((data.len() / 2) as f64)).sqrt();
|
||||
println!("rms: {}", rms);
|
||||
},
|
||||
_ => (),
|
||||
}
|
||||
match probe_info.data {
|
||||
Some(PadProbeData::Buffer(ref buffer)) => {
|
||||
let map = buffer.map_read().unwrap();
|
||||
let data = map.as_slice();
|
||||
let sum: f64 = data.chunks(2).map(|sample| {
|
||||
let u: u16 = ((sample[0] as u16) << 8) | (sample[1] as u16);
|
||||
let f = (u as i16 as f64) / (i16::MAX as f64);
|
||||
f * f
|
||||
}).sum();
|
||||
let rms = (sum / ((data.len() / 2) as f64)).sqrt();
|
||||
println!("rms: {}", rms);
|
||||
},
|
||||
_ => (),
|
||||
}
|
||||
|
||||
PadProbeReturn::Ok
|
||||
|
|
Loading…
Reference in a new issue