use anyhow::Result;
use std::sync::Arc;
use tokio::sync::broadcast;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ImageFormat {
Jpeg,
Rgb,
}
#[derive(Debug, Clone)]
pub struct CameraFrame {
pub camera_id: String,
pub width: u32,
pub height: u32,
pub timestamp: u64,
pub image_bytes: Arc<Vec<u8>>,
pub format: ImageFormat,
}
pub struct FrameBroadcaster {
tx: broadcast::Sender<CameraFrame>,
}
impl FrameBroadcaster {
pub fn new(capacity: usize) -> Self {
let (tx, _) = broadcast::channel(capacity);
Self { tx }
}
pub fn broadcast(&self, frame: CameraFrame) -> Result<()> {
let _ = self.tx.send(frame);
Ok(())
}
pub fn subscribe(&self) -> broadcast::Receiver<CameraFrame> {
self.tx.subscribe()
}
}