pub mod genlock;
pub mod timing;
use serde::{Deserialize, Serialize};
use std::time::Duration;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum SyncStatus {
Unlocked,
Locking,
Locked,
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
pub struct SyncTimestamp {
pub nanos: u64,
pub frame: u64,
}
impl SyncTimestamp {
#[must_use]
pub fn new(nanos: u64, frame: u64) -> Self {
Self { nanos, frame }
}
#[must_use]
pub fn duration_since(&self, other: &Self) -> Duration {
Duration::from_nanos(self.nanos.saturating_sub(other.nanos))
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_sync_timestamp() {
let ts1 = SyncTimestamp::new(1000, 0);
let ts2 = SyncTimestamp::new(2000, 1);
let duration = ts2.duration_since(&ts1);
assert_eq!(duration.as_nanos(), 1000);
}
}