#![allow(unused_imports)] extern crate byteorder; #[cfg(feature = "sys")] extern crate speexdsp; use byteorder::{BigEndian, ByteOrder}; #[cfg(feature = "sys")] use speexdsp::jitter::*; #[cfg(feature = "sys")] fn synth_in(input: &mut SpeexBufferPacket, idx: usize, span: usize) { let mut buf = [0; 4]; BigEndian::write_u32(&mut buf, idx as u32); let mut buf_i8: [i8; 4] = [0; 4]; for i in 0..3 { buf_i8[i] = buf[i] as i8; } input.create(&mut buf_i8, 32, idx * 10, span * 10, idx, 0); } #[cfg(feature = "sys")] fn jitter_fill(jb: &mut SpeexJitter) { let mut buffer: [i8; 65536] = [0; 65536]; let mut input = SpeexBufferPacket::new(); let mut output = SpeexBufferPacket::new(); output.set_data(&mut buffer); jb.buffer_reset(); for i in 0..100 { synth_in(&mut input, i, 1); jb.buffer_put(&input); output.set_len(65536); if jb.buffer_get(&mut output, 10, 0) != Error::BufferOk { eprintln!("Fill test failed iteration {}", i); } if output.timestamp() != i * 10 { println!( "Fill test expected {} got {}", i * 10, output.timestamp() ); } jb.buffer_tick(); } } #[cfg(feature = "sys")] fn main() { let mut buffer: [i8; 65536] = [0; 65536]; let mut jb = SpeexJitter::new(10).unwrap(); let mut input = SpeexBufferPacket::new(); let mut output = SpeexBufferPacket::new(); output.set_data(&mut buffer); jitter_fill(&mut jb); for _ in 0..100 { output.set_len(65536); jb.buffer_get(&mut output, 10, 0); jb.buffer_tick(); } synth_in(&mut input, 100, 1); jb.buffer_put(&input); output.set_len(65536); if jb.buffer_get(&mut output, 10, 0) != Error::BufferOk { eprintln!("Failed frozen sender resynchronize"); } else { println!("Frozen sender: Jitter {}", output.timestamp() - 100 * 10); } } #[cfg(not(feature = "sys"))] fn main() { unimplemented!(); }