Skip to content
This repository was archived by the owner on Jun 24, 2026. It is now read-only.

Commit 694de05

Browse files
committed
Refactor camera preview to use broadcast channel
1 parent 7c68831 commit 694de05

1 file changed

Lines changed: 6 additions & 5 deletions

File tree

apps/desktop/src-tauri/src/camera_legacy.rs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,15 @@ use tokio_util::sync::CancellationToken;
55
use crate::frame_ws::{WSFrame, create_frame_ws};
66

77
pub async fn create_camera_preview_ws() -> (Sender<FFmpegVideoFrame>, u16, CancellationToken) {
8-
let (camera_tx, mut _camera_rx) = flume::bounded::<FFmpegVideoFrame>(4);
9-
let (_camera_tx, camera_rx) = flume::bounded::<WSFrame>(4);
8+
let (camera_tx, mut camera_rx) = flume::bounded::<FFmpegVideoFrame>(4);
9+
let (frame_tx, _) = tokio::sync::broadcast::channel::<WSFrame>(4);
10+
let frame_tx_clone = frame_tx.clone();
1011
std::thread::spawn(move || {
1112
use ffmpeg::format::Pixel;
1213

1314
let mut converter: Option<(Pixel, ffmpeg::software::scaling::Context)> = None;
1415

15-
while let Ok(raw_frame) = _camera_rx.recv() {
16+
while let Ok(raw_frame) = camera_rx.recv() {
1617
let mut frame = raw_frame.inner;
1718

1819
if frame.format() != Pixel::RGBA || frame.width() > 1280 || frame.height() > 720 {
@@ -55,7 +56,7 @@ pub async fn create_camera_preview_ws() -> (Sender<FFmpegVideoFrame>, u16, Cance
5556
frame = new_frame;
5657
}
5758

58-
_camera_tx
59+
frame_tx_clone
5960
.send(WSFrame {
6061
data: frame.data(0).to_vec(),
6162
width: frame.width(),
@@ -66,7 +67,7 @@ pub async fn create_camera_preview_ws() -> (Sender<FFmpegVideoFrame>, u16, Cance
6667
}
6768
});
6869
// _shutdown needs to be kept alive to keep the camera ws running
69-
let (camera_ws_port, _shutdown) = create_frame_ws(camera_rx.clone()).await;
70+
let (camera_ws_port, _shutdown) = create_frame_ws(frame_tx).await;
7071

7172
(camera_tx, camera_ws_port, _shutdown)
7273
}

0 commit comments

Comments
 (0)