Skip forward reads and warm the reference frame to avoid reader restarts

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01M8GqDtmNT89ei6EJrQKWXx
This commit is contained in:
henryruhs
2026-07-22 14:45:56 +02:00
parent 1f215b8387
commit 5d1049cd8f
2 changed files with 11 additions and 0 deletions
+7
View File
@@ -50,6 +50,13 @@ def get_video_reader(video_path : str) -> VideoReader:
def conditional_set_video_reader_position(video_reader : VideoReader, frame_position : int) -> None:
skip_margin = 128
skipping = video_reader.get('position') < frame_position and frame_position - video_reader.get('position') <= skip_margin
while skipping:
has_vision_frame, vision_frame = read_video_reader_frame(video_reader)
skipping = has_vision_frame and video_reader.get('position') < frame_position
if not video_reader.get('position') == frame_position:
restart_video_reader(video_reader, frame_position)
+4
View File
@@ -97,6 +97,8 @@ def process_stream_frames() -> ErrorCode:
with tqdm(total = len(frame_range), desc = translator.get('processing'), unit = 'frame', ascii = ' =', disable = state_manager.get_item('log_level') in [ 'warn', 'error' ]) as progress:
progress.set_postfix(execution_providers = state_manager.get_item('execution_providers'))
read_static_video_frame(state_manager.get_item('target_path'), state_manager.get_item('reference_frame_number'))
with ThreadPoolExecutor(max_workers = state_manager.get_item('execution_thread_count')) as executor:
futures = []
# TODO: review - this has to be a dedicated method
@@ -235,6 +237,8 @@ def process_disk_frames() -> ErrorCode:
with tqdm(total = len(temp_frame_set), desc = translator.get('processing'), unit = 'frame', ascii = ' =', disable = state_manager.get_item('log_level') in [ 'warn', 'error' ]) as progress:
progress.set_postfix(execution_providers = state_manager.get_item('execution_providers'))
read_static_video_frame(state_manager.get_item('target_path'), state_manager.get_item('reference_frame_number'))
with ThreadPoolExecutor(max_workers = state_manager.get_item('execution_thread_count')) as executor:
futures = []