From 0fd108bc9a9f27656b0b54f73c7d37a053f3af12 Mon Sep 17 00:00:00 2001 From: PhatPhuckDave Date: Thu, 18 Sep 2025 17:31:10 +0200 Subject: [PATCH] Don't seek EVERY GOD DAMN FUCKING FRAME --- croppa/main.py | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/croppa/main.py b/croppa/main.py index 75857fb..424247f 100644 --- a/croppa/main.py +++ b/croppa/main.py @@ -65,18 +65,15 @@ class Cv2BufferedCap: # Clamp frame number to valid range frame_number = max(0, min(frame_number, self.total_frames - 1)) - # Check cache first - cached_frame = self._get_from_cache(frame_number) - if cached_frame is not None: - self.current_frame = frame_number - return cached_frame - - # Not in cache, seek to frame and read - self.cap.set(cv2.CAP_PROP_POS_FRAMES, frame_number) - ret, frame = self.cap.read() + # Optimize for sequential reading (next frame) + if frame_number == self.current_frame + 1: + ret, frame = self.cap.read() + else: + # Seek for non-sequential access + self.cap.set(cv2.CAP_PROP_POS_FRAMES, frame_number) + ret, frame = self.cap.read() if ret: - self._add_to_cache(frame_number, frame) self.current_frame = frame_number return frame else: @@ -461,7 +458,7 @@ class ProjectView: class VideoEditor: # Configuration constants - BASE_FRAME_DELAY_MS = 16 # ~60 FPS + BASE_FRAME_DELAY_MS = 1 # ~60 FPS SPEED_INCREMENT = 0.2 MIN_PLAYBACK_SPEED = 0.1 MAX_PLAYBACK_SPEED = 10.0