From 53b7baaa000a7f11e4c43bd00568699ff0a657e4 Mon Sep 17 00:00:00 2001 From: Stephen D <webmaster@scd31.com> Date: Fri, 29 Sep 2023 18:26:59 -0300 Subject: [PATCH] video buffer telemetry --- Cargo.lock | 3 ++- Cargo.toml | 3 ++- src/control.rs | 16 ++++++++++++---- src/video.rs | 11 ++++------- 4 files changed, 20 insertions(+), 13 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 26d725b..a184da6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -37,13 +37,14 @@ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" [[package]] name = "balloon_tx_monolith" -version = "0.3.0" +version = "0.3.1" dependencies = [ "anyhow", "aprs-parser", "base64", "bitvec", "crc", + "crossbeam-channel", "gstreamer", "gstreamer-app", "gstreamer-video", diff --git a/Cargo.toml b/Cargo.toml index 62d4a1c..bdf714e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "balloon_tx_monolith" -version = "0.3.0" +version = "0.3.1" edition = "2021" license = "MIT" @@ -32,3 +32,4 @@ toml = "0.7.3" gstreamer = "0.21.0" gstreamer-app = "0.21.0" gstreamer-video = "0.21.0" +crossbeam-channel = "0.5.8" diff --git a/src/control.rs b/src/control.rs index 994ada1..99572eb 100644 --- a/src/control.rs +++ b/src/control.rs @@ -31,7 +31,7 @@ impl Controller { pub fn run_forever(self) { let (img_tx, img_rx) = mpsc::sync_channel(IMAGE_PACKET_QUEUE_LENGTH); - let (vid_tx, vid_rx) = mpsc::sync_channel(VIDEO_PACKET_QUEUE_LENGTH); + let (vid_tx, vid_rx) = crossbeam_channel::bounded(VIDEO_PACKET_QUEUE_LENGTH); let (telem_tx, telem_rx) = mpsc::channel(); let (cmd_tx, cmd_rx) = mpsc::channel(); @@ -94,7 +94,7 @@ impl Controller { fn tx_thread( callsign: String, image_rx: Receiver<FecPacket>, - vid_rx: Receiver<Vec<u8>>, + vid_rx: crossbeam_channel::Receiver<Vec<u8>>, telem_rx: Receiver<Packet>, ) { let mut radio = loop { @@ -135,7 +135,7 @@ impl Controller { fn tx_thread_single_iter( callsign: &str, image_rx: &Receiver<FecPacket>, - vid_rx: &Receiver<Vec<u8>>, + vid_rx: &crossbeam_channel::Receiver<Vec<u8>>, telem_rx: &Receiver<Packet>, text_msg_id: &mut u16, last_got_temp: &mut Instant, @@ -181,7 +181,15 @@ impl Controller { let temp = radio.get_temp()?; - let packet = Packet::new_text_message(callsign, &format!("Temp: {}", temp)); + let packet = Packet::new_text_message( + callsign, + &format!( + "Temp: {}, Vbuf: {} / {}", + temp, + vid_rx.len(), + VIDEO_PACKET_QUEUE_LENGTH + ), + ); radio.send_packet(&packet.into_raw(text_msg_id).into())?; } diff --git a/src/video.rs b/src/video.rs index 4af4e30..8403ab7 100644 --- a/src/video.rs +++ b/src/video.rs @@ -1,11 +1,8 @@ -use std::{ - sync::mpsc::{SyncSender, TrySendError}, - thread, - time::Duration, -}; +use std::{thread, time::Duration}; use crate::packet::{Packet, RawPacket, VIDEO_LEN}; use anyhow::Context; +use crossbeam_channel::{Sender, TrySendError}; use gstreamer::{ element_error, prelude::{Cast, ElementExtManual, GstBinExtManual}, @@ -73,7 +70,7 @@ impl VideoPacker { } } -pub fn start_video(sender: SyncSender<Vec<u8>>) { +pub fn start_video(sender: Sender<Vec<u8>>) { thread::spawn(move || loop { match init(sender.clone()) { Ok((pipeline, bus)) => handle_pipeline(pipeline, bus), @@ -86,7 +83,7 @@ pub fn start_video(sender: SyncSender<Vec<u8>>) { }); } -fn init(sender: SyncSender<Vec<u8>>) -> anyhow::Result<(Pipeline, Bus)> { +fn init(sender: Sender<Vec<u8>>) -> anyhow::Result<(Pipeline, Bus)> { gstreamer::init()?; let src = gstreamer::ElementFactory::make("libcamerasrc") -- GitLab