Don't seek EVERY GOD DAMN FUCKING FRAME
This commit is contained in:
@@ -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
|
||||||
|
Reference in New Issue
Block a user