Don't seek EVERY GOD DAMN FUCKING FRAME

This commit is contained in:
2025-09-18 17:31:10 +02:00
parent 83ef71934b
commit 0fd108bc9a

View File

@@ -65,18 +65,15 @@ class Cv2BufferedCap:
# Clamp frame number to valid range # Clamp frame number to valid range
frame_number = max(0, min(frame_number, self.total_frames - 1)) frame_number = max(0, min(frame_number, self.total_frames - 1))
# Check cache first # Optimize for sequential reading (next frame)
cached_frame = self._get_from_cache(frame_number) if frame_number == self.current_frame + 1:
if cached_frame is not None: ret, frame = self.cap.read()
self.current_frame = frame_number else:
return cached_frame # Seek for non-sequential access
self.cap.set(cv2.CAP_PROP_POS_FRAMES, frame_number)
# Not in cache, seek to frame and read ret, frame = self.cap.read()
self.cap.set(cv2.CAP_PROP_POS_FRAMES, frame_number)
ret, frame = self.cap.read()
if ret: if ret:
self._add_to_cache(frame_number, frame)
self.current_frame = frame_number self.current_frame = frame_number
return frame return frame
else: else:
@@ -461,7 +458,7 @@ class ProjectView:
class VideoEditor: class VideoEditor:
# Configuration constants # Configuration constants
BASE_FRAME_DELAY_MS = 16 # ~60 FPS BASE_FRAME_DELAY_MS = 1 # ~60 FPS
SPEED_INCREMENT = 0.2 SPEED_INCREMENT = 0.2
MIN_PLAYBACK_SPEED = 0.1 MIN_PLAYBACK_SPEED = 0.1
MAX_PLAYBACK_SPEED = 10.0 MAX_PLAYBACK_SPEED = 10.0