From 15aef1ce1385f373801ed7e5968ec6f4e1699af5 Mon Sep 17 00:00:00 2001 From: vangel76 Date: Tue, 13 Oct 2026 20:04:39 +0200 Subject: [PATCH] mpegts/avi: drop redundant PES header length check and doubled frame_info call Refs #1706 Co-Authored-By: Claude Sonnet 5.5 --- crates/codecs/src/avi.rs | 5 +++-- crates/mpegts/src/ts.rs | 7 +++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/crates/codecs/src/avi.rs b/crates/codecs/src/avi.rs index 659524427..b331c6aae 100644 --- a/crates/codecs/src/avi.rs +++ b/crates/codecs/src/avi.rs @@ -186,10 +186,11 @@ fn split_frames( let Some(here) = win.get(pos - base..) else { break }; match filmcraft_mpegts::frame_bytes(ts, here) { Some(n) if pos + n <= total => { + let fi = filmcraft_mpegts::frame_info(ts, here); if info.is_none() { - info = filmcraft_mpegts::frame_info(ts, here); + info = fi; } - let k = filmcraft_mpegts::frame_info(ts, here).map_or(0, |f| f.samples); + let k = fi.map_or(0, |f| f.samples); first.push(pieces.len()); let mut p = pos; while p < pos + n { diff --git a/crates/mpegts/src/ts.rs b/crates/mpegts/src/ts.rs index b8865aba4..b5a307286 100644 --- a/crates/mpegts/src/ts.rs +++ b/crates/mpegts/src/ts.rs @@ -114,11 +114,10 @@ impl PesAsm { } let before = self.hdr.len(); self.hdr.extend_from_slice(payload); - if let Some(h) = pes::parse(&self.hdr) - && self.hdr.len() >= h.header_len - { + // `pes::parse` only succeeds once the whole header (`header_len` bytes) is buffered + if let Some(h) = pes::parse(&self.hdr) { self.waiting = false; - let skip = (h.header_len - before).min(payload.len()); + let skip = h.header_len.saturating_sub(before).min(payload.len()); return (Some(h), &payload[skip..]); } if self.hdr.len() > 1024 || (self.hdr.len() >= 6 && !(self.hdr[0] == 0 && self.hdr[1] == 0 && self.hdr[2] == 1)) {