From 08e767450837074ba2a8e5ddf9eb60bd5d13d5f1 Mon Sep 17 00:00:00 2001 From: Eric Marsden Date: Thu, 25 Jul 2024 10:39:29 +0200 Subject: [PATCH] Clippy: replace array indexing by checked access methods --- src/fetch.rs | 39 +++++++++++++++++++++++++-------------- src/ffmpeg.rs | 12 +++++++----- src/media.rs | 13 ++++++------- 3 files changed, 38 insertions(+), 26 deletions(-) diff --git a/src/fetch.rs b/src/fetch.rs index 3d0aba7..ded1d55 100644 --- a/src/fetch.rs +++ b/src/fetch.rs @@ -1030,8 +1030,10 @@ fn select_preferred_adaptations<'a>( .collect(); let min_distance = distance.iter().min().unwrap_or(&0); for (i, a) in adaptations.iter().enumerate() { - if distance[i] == *min_distance { - preferred.push(a); + if let Some(di) = distance.get(i) { + if di == min_distance { + preferred.push(a); + } } } } else { @@ -1048,8 +1050,10 @@ fn select_preferred_adaptations<'a>( let role_distance_min = role_distance.iter().min().unwrap_or(&0); let mut best = Vec::new(); for (i, a) in preferred.into_iter().enumerate() { - if role_distance[i] == *role_distance_min { - best.push(a); + if let Some(rdi) = role_distance.get(i) { + if rdi == role_distance_min { + best.push(a); + } } } best @@ -1086,10 +1090,13 @@ fn select_preferred_representation<'a>( .map(|r| r.qualityRanking.unwrap_or(u8::MAX)) .collect(); ranking.sort_unstable(); - let want_ranking = ranking.get(count / 2).unwrap(); - representations.iter() - .find(|r| r.qualityRanking.unwrap_or(u8::MAX) == *want_ranking) - .copied() + if let Some(want_ranking) = ranking.get(count / 2) { + representations.iter() + .find(|r| r.qualityRanking.unwrap_or(u8::MAX) == *want_ranking) + .copied() + } else { + representations.get(0).copied() + } }, } }, @@ -1113,10 +1120,13 @@ fn select_preferred_representation<'a>( .map(|r| r.bandwidth.unwrap_or(100_000_000)) .collect(); ranking.sort_unstable(); - let want_ranking = ranking.get(count / 2).unwrap(); - representations.iter() - .find(|r| r.bandwidth.unwrap_or(100_000_000) == *want_ranking) - .copied() + if let Some(want_ranking) = ranking.get(count / 2) { + representations.iter() + .find(|r| r.bandwidth.unwrap_or(100_000_000) == *want_ranking) + .copied() + } else { + representations.get(0).copied() + } }, } }, @@ -1276,8 +1286,9 @@ async fn extract_init_pssh(downloader: &DashDownloader, init_url: Url) -> Option } let start = offset - 4; let end = start + segment_first_bytes[offset-1] as usize; - let pssh = &segment_first_bytes[start..end]; - return Some(pssh.to_vec()); + if let Some(pssh) = &segment_first_bytes.get(start..end) { + return Some(pssh.to_vec()); + } } } None diff --git a/src/ffmpeg.rs b/src/ffmpeg.rs index 0b2238b..c2a868e 100644 --- a/src/ffmpeg.rs +++ b/src/ffmpeg.rs @@ -15,13 +15,13 @@ use std::process::Command; use fs_err as fs; use fs::File; use tracing::{trace, info, warn}; +use extrasafe::isolate::Isolate; use crate::DashMpdError; use crate::fetch::{DashDownloader, partial_process_output}; use crate::media::{audio_container_type, video_container_type, container_has_video, container_has_audio}; - // ffmpeg can mux to many container types including mp4, mkv, avi #[tracing::instrument(level="trace", skip(downloader))] fn mux_audio_video_ffmpeg( @@ -1057,9 +1057,11 @@ pub(crate) fn concat_output_files_mkvmerge( args.push(&out); args.push("["); args.push(tmppath); - for p in &paths[1..] { - if let Some(ps) = p.to_str() { - args.push(ps); + if let Some(inpaths) = paths.get(1..) { + for p in inpaths { + if let Some(ps) = p.to_str() { + args.push(ps); + } } } args.push("]"); @@ -1185,7 +1187,7 @@ mod tests { #[test] fn test_concat() { use crate::fetch::DashDownloader; - use image::io::Reader as ImageReader; + use image::ImageReader; use image::Rgb; let tmpd = tempfile::tempdir().unwrap(); diff --git a/src/media.rs b/src/media.rs index bdb4a65..f9103db 100644 --- a/src/media.rs +++ b/src/media.rs @@ -100,15 +100,14 @@ fn video_container_metainfo(path: &PathBuf) -> Result