diff --git a/src/lib.rs b/src/lib.rs index 768c293..4c1a2ff 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -320,6 +320,18 @@ pub struct Movie { } impl Movie { + fn min_pixel_count(&self) -> Option { + if self.files.is_empty() { + None + } else { + Some(self.files.iter().fold(usize::max_value(), |acc, (_, cmd)| { + let min = cmd.video.iter().fold(usize::max_value(), |acc, v| { + std::cmp::min(acc, v.width * v.height) + }); + std::cmp::min(acc, min) + })) + } + } fn min_bit_rate(&self) -> Option { if self.files.is_empty() { None @@ -390,8 +402,8 @@ impl Movies { for (_parent, mut movies) in movie_counter.into_iter() { if movies.len() > 1 { - // Sort, lowest bit_rate movie first - movies.sort_by(|a, b| a.min_bit_rate().cmp(&b.min_bit_rate())); + // Sort, lowest resolution movie first + movies.sort_by(|a, b| a.min_pixel_count().cmp(&b.min_pixel_count())); // Flip order, we care about the largest. movies.reverse(); // Take the largest image, return the rest for removal.