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