ci: satisfy rust 1.92 clippy gate

This commit is contained in:
Brad Stein 2026-05-16 17:47:58 -03:00
parent 42e58fcd03
commit e5261cb323
12 changed files with 49 additions and 66 deletions

View File

@ -212,7 +212,6 @@ impl LesavkaClientApp {
let initial_camera_profile = initial_camera_profile.clone(); let initial_camera_profile = initial_camera_profile.clone();
let active_camera_source = active_camera_source.clone(); let active_camera_source = active_camera_source.clone();
let active_camera_profile = active_camera_profile.clone(); let active_camera_profile = active_camera_profile.clone();
let active_camera_codec = active_camera_codec;
std::thread::spawn(move || { std::thread::spawn(move || {
let mut waiting_for_hevc_keyframe = false; let mut waiting_for_hevc_keyframe = false;
while !stop.load(Ordering::Relaxed) { while !stop.load(Ordering::Relaxed) {
@ -273,8 +272,6 @@ impl LesavkaClientApp {
let media_controls = media_controls.clone(); let media_controls = media_controls.clone();
let initial_microphone_source = initial_microphone_source.clone(); let initial_microphone_source = initial_microphone_source.clone();
let active_microphone_source = active_microphone_source.clone(); let active_microphone_source = active_microphone_source.clone();
let active_audio_codec = active_audio_codec;
let active_noise_suppression = active_noise_suppression;
let active_camera_requested = camera_requested; let active_camera_requested = camera_requested;
std::thread::spawn(move || { std::thread::spawn(move || {
while !stop.load(Ordering::Relaxed) { while !stop.load(Ordering::Relaxed) {

View File

@ -153,7 +153,7 @@ impl OpusPacketEncoder {
.iter() .iter()
.position(|packet| packet.pts == pts_us) .position(|packet| packet.pts == pts_us)
{ {
return self.pending_packets.drain(..=index).last(); return self.pending_packets.drain(..=index).next_back();
} }
self.pending_packets.pop_front() self.pending_packets.pop_front()
} }

View File

@ -73,12 +73,8 @@ impl CameraCapture {
return Self::new_ffmpeg_hevc_nvenc( return Self::new_ffmpeg_hevc_nvenc(
&dev_label, &dev_label,
source_profile, source_profile,
capture_width, (capture_width, capture_height, capture_fps),
capture_height, (width, height, fps),
capture_fps,
width,
height,
fps,
keyframe_interval, keyframe_interval,
camera_preview_tap_path(), camera_preview_tap_path(),
); );
@ -301,16 +297,14 @@ impl CameraCapture {
fn new_ffmpeg_hevc_nvenc( fn new_ffmpeg_hevc_nvenc(
dev_label: &str, dev_label: &str,
source_profile: CameraSourceProfile, source_profile: CameraSourceProfile,
capture_width: u32, capture_profile: (u32, u32, u32),
capture_height: u32, output_profile: (u32, u32, u32),
capture_fps: u32,
width: u32,
height: u32,
fps: u32,
keyframe_interval: u32, keyframe_interval: u32,
preview_tap_path: Option<PathBuf>, preview_tap_path: Option<PathBuf>,
) -> anyhow::Result<Self> { ) -> anyhow::Result<Self> {
let bitrate_kbit = env_u32("LESAVKA_CAM_HEVC_KBIT", 3000).max(250); let bitrate_kbit = env_u32("LESAVKA_CAM_HEVC_KBIT", 3000).max(250);
let (capture_width, capture_height, capture_fps) = capture_profile;
let (width, height, fps) = output_profile;
let fps = fps.max(1); let fps = fps.max(1);
let capture_fps = capture_fps.max(1); let capture_fps = capture_fps.max(1);
let keyframe_interval = keyframe_interval.max(1); let keyframe_interval = keyframe_interval.max(1);

View File

@ -241,11 +241,11 @@ fn preview_decoder_candidates() -> Vec<String> {
} }
candidates.sort(); candidates.sort();
candidates.dedup(); candidates.dedup();
if let Some(preferred) = preferred { if let Some(preferred) = preferred
if let Some(pos) = candidates.iter().position(|name| name == &preferred) { && let Some(pos) = candidates.iter().position(|name| name == &preferred)
let decoder = candidates.remove(pos); {
candidates.insert(0, decoder); let decoder = candidates.remove(pos);
} candidates.insert(0, decoder);
} }
candidates candidates
} }

View File

@ -77,14 +77,13 @@ fn remember_active_audio_capture(generation: u64, pipeline: &gst::Pipeline) {
}; };
if let Some((previous_generation, previous_pipeline)) = if let Some((previous_generation, previous_pipeline)) =
active.replace((generation, pipeline.clone())) active.replace((generation, pipeline.clone()))
&& previous_generation != generation
{ {
if previous_generation != generation { warn!(
warn!( previous_generation,
previous_generation, generation, "🔊 replacing overlapping downstream audio capture"
generation, "🔊 replacing overlapping downstream audio capture" );
); let _ = previous_pipeline.set_state(gst::State::Null);
let _ = previous_pipeline.set_state(gst::State::Null);
}
} }
} }
@ -228,7 +227,7 @@ fn level_message_looks_like_digital_silence(structure: &gst::StructureRef) -> bo
fn log_remote_speaker_silence_hint() { fn log_remote_speaker_silence_hint() {
static SILENCE_MESSAGES: AtomicU64 = AtomicU64::new(0); static SILENCE_MESSAGES: AtomicU64 = AtomicU64::new(0);
let count = SILENCE_MESSAGES.fetch_add(1, Ordering::Relaxed) + 1; let count = SILENCE_MESSAGES.fetch_add(1, Ordering::Relaxed) + 1;
if count <= 3 || count % 30 == 0 { if count <= 3 || count.is_multiple_of(30) {
warn!( warn!(
count, count,
"🔇 downstream UAC speaker capture is digital silence; Lesavka audio path is open, but the RCT/host is not currently feeding audible audio into the USB speaker endpoint" "🔇 downstream UAC speaker capture is digital silence; Lesavka audio path is open, but the RCT/host is not currently feeding audible audio into the USB speaker endpoint"

View File

@ -121,7 +121,7 @@ impl OpusPacketDecoder {
.iter() .iter()
.position(|packet| packet.pts == pts_us) .position(|packet| packet.pts == pts_us)
{ {
return self.pending_packets.drain(..=index).last(); return self.pending_packets.drain(..=index).next_back();
} }
self.pending_packets.pop_front() self.pending_packets.pop_front()
} }

View File

@ -324,14 +324,11 @@ fn synthetic_rgb_frame(width: usize, height: usize, sequence: u64) -> Vec<u8> {
for y in 0..height { for y in 0..height {
for x in 0..width { for x in 0..width {
let mut value = synthetic_luma( let mut value = synthetic_luma(
width, (width, height),
height,
x, x,
y, y,
sequence, sequence,
moving_period, (moving_period, moving_width, moving_offset),
moving_width,
moving_offset,
); );
if y >= height / 2 && (((x / 32) + (y / 24) + sequence as usize) & 1) == 0 { if y >= height / 2 && (((x / 32) + (y / 24) + sequence as usize) & 1) == 0 {
value /= 3; value /= 3;
@ -347,15 +344,14 @@ fn synthetic_rgb_frame(width: usize, height: usize, sequence: u64) -> Vec<u8> {
} }
fn synthetic_luma( fn synthetic_luma(
width: usize, frame_size: (usize, usize),
height: usize,
x: usize, x: usize,
y: usize, y: usize,
sequence: u64, sequence: u64,
moving_period: usize, moving_bar: (usize, usize, usize),
moving_width: usize,
moving_offset: usize,
) -> u8 { ) -> u8 {
let (width, height) = frame_size;
let (moving_period, moving_width, moving_offset) = moving_bar;
let mut value = ((x as u64 * 3 + y as u64 * 5 + sequence.saturating_mul(11)) & 0xff) as u8; let mut value = ((x as u64 * 3 + y as u64 * 5 + sequence.saturating_mul(11)) & 0xff) as u8;
let moving = (x + moving_offset) % moving_period; let moving = (x + moving_offset) % moving_period;
if moving < moving_width { if moving < moving_width {

View File

@ -488,14 +488,13 @@ impl UvcVideoStream {
return; return;
}; };
let now = Instant::now(); let now = Instant::now();
if let Some(deadline) = self.next_queue_at { if let Some(deadline) = self.next_queue_at
if let Some(delay) = deadline.checked_duration_since(now) { && let Some(delay) = deadline.checked_duration_since(now)
if !delay.is_zero() { && !delay.is_zero()
thread::sleep(delay); {
self.stats.paced_sleeps += 1; thread::sleep(delay);
self.stats.paced_sleep_ms += delay.as_millis().min(u128::from(u64::MAX)) as u64; self.stats.paced_sleeps += 1;
} self.stats.paced_sleep_ms += delay.as_millis().min(u128::from(u64::MAX)) as u64;
}
} }
self.next_queue_at = Some(Instant::now() + period); self.next_queue_at = Some(Instant::now() + period);
} }

View File

@ -44,12 +44,11 @@ impl EyeHub {
} }
fn shutdown(&self) { fn shutdown(&self) {
if self.running.swap(false, Ordering::AcqRel) { if self.running.swap(false, Ordering::AcqRel)
if let Ok(mut task) = self.task.try_lock() && let Ok(mut task) = self.task.try_lock()
&& let Some(task) = task.take() && let Some(task) = task.take()
{ {
task.abort(); task.abort();
}
} }
} }

View File

@ -359,14 +359,14 @@ impl Handler {
outcome = if outcome == "aborted" { "closed" } else { outcome }; outcome = if outcome == "aborted" { "closed" } else { outcome };
drop(audio_handoff_tx); drop(audio_handoff_tx);
drop(video_handoff_tx); drop(video_handoff_tx);
if let Some(audio_worker) = audio_worker { if let Some(audio_worker) = audio_worker
if let Err(err) = audio_worker.await { && let Err(err) = audio_worker.await
warn!( {
rpc_id, warn!(
session_id = camera_lease.session_id, rpc_id,
"📦 v2 audio handoff worker join failed: {err}" session_id = camera_lease.session_id,
); "📦 v2 audio handoff worker join failed: {err}"
} );
} }
if let Err(err) = video_worker.await { if let Err(err) = video_worker.await {
warn!( warn!(

View File

@ -135,7 +135,7 @@ fn uvc_bulk_transfer_enabled() -> bool {
return false; return false;
} }
let base = Path::new(CONFIGFS_UVC_BASE); let base = Path::new(CONFIGFS_UVC_BASE);
!(base.exists() && !base.join("streaming_bulk").exists()) !base.exists() || base.join("streaming_bulk").exists()
} }
fn uvc_streaming_maxpacket(bulk: bool) -> u32 { fn uvc_streaming_maxpacket(bulk: bool) -> u32 {

View File

@ -127,8 +127,7 @@ fn looks_like_annex_b_hevc(data: &[u8]) -> bool {
fn uvc_hevc_freshness_queue_buffers() -> u32 { fn uvc_hevc_freshness_queue_buffers() -> u32 {
positive_u64_env("LESAVKA_UVC_HEVC_FRESHNESS_QUEUE_BUFFERS", 2) positive_u64_env("LESAVKA_UVC_HEVC_FRESHNESS_QUEUE_BUFFERS", 2)
.min(4) .clamp(1, 4) as u32
.max(1) as u32
} }
fn uvc_hevc_decode_miss_limit() -> u64 { fn uvc_hevc_decode_miss_limit() -> u64 {
@ -1078,7 +1077,7 @@ impl WebcamSink {
.fetch_add(1, std::sync::atomic::Ordering::Relaxed) .fetch_add(1, std::sync::atomic::Ordering::Relaxed)
+ 1; + 1;
let limit = u64::from(hevc_mjpeg_guard::direct_mjpeg_normalize_miss_limit()); let limit = u64::from(hevc_mjpeg_guard::direct_mjpeg_normalize_miss_limit());
if misses == 1 || misses % 30 == 0 { if misses == 1 || misses.is_multiple_of(30) {
warn!( warn!(
target:"lesavka_server::video", target:"lesavka_server::video",
misses, misses,