port more from osmocom
This commit is contained in:
41
cellular/src/jitter.rs
Normal file
41
cellular/src/jitter.rs
Normal file
@@ -0,0 +1,41 @@
|
||||
type Sample = f64;
|
||||
|
||||
#[derive(Clone)]
|
||||
pub struct Jitter {
|
||||
pub buffer: Vec<Sample>,
|
||||
pub read_pos: usize,
|
||||
pub write_pos: usize,
|
||||
pub size: usize,
|
||||
}
|
||||
|
||||
impl Jitter {
|
||||
pub fn new(size: usize) -> Self {
|
||||
Jitter {
|
||||
buffer: vec![0.0; size],
|
||||
read_pos: 0,
|
||||
write_pos: 0,
|
||||
size,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn write(&mut self, samples: &[Sample]) {
|
||||
for &sample in samples {
|
||||
self.buffer[self.write_pos] = sample;
|
||||
self.write_pos = (self.write_pos + 1) % self.size;
|
||||
}
|
||||
}
|
||||
|
||||
pub fn read(&mut self, output: &mut [Sample]) -> usize {
|
||||
let mut count = 0;
|
||||
for i in 0..output.len() {
|
||||
if self.read_pos != self.write_pos {
|
||||
output[i] = self.buffer[self.read_pos];
|
||||
self.read_pos = (self.read_pos + 1) % self.size;
|
||||
count += 1;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
count
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user