use std::collections::VecDeque;
use naia_shared::{OwnedBitReader, Tick};
use crate::connection::tick_queue::TickQueue;
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum JitterBufferType {
Real,
Bypass,
}
pub enum JitterBuffer {
Real(TickQueue<OwnedBitReader>),
Bypass(VecDeque<(Tick, OwnedBitReader)>),
}
impl JitterBuffer {
pub fn new(jitter_buffer_type: JitterBufferType) -> Self {
match jitter_buffer_type {
JitterBufferType::Real => JitterBuffer::Real(TickQueue::new()),
JitterBufferType::Bypass => JitterBuffer::Bypass(VecDeque::new()),
}
}
pub fn add_item(&mut self, tick: Tick, item: OwnedBitReader) {
match self {
JitterBuffer::Real(queue) => {
queue.add_item(tick, item);
}
JitterBuffer::Bypass(queue) => {
queue.push_back((tick, item));
}
}
}
pub fn pop_item(&mut self, current_tick: Tick) -> Option<(Tick, OwnedBitReader)> {
match self {
JitterBuffer::Real(queue) => queue.pop_item(current_tick),
JitterBuffer::Bypass(queue) => queue.pop_front(),
}
}
}