Enhance camera recording functionality with streamer integration

- Updated CameraRecorder to support frame sharing from CameraStreamer, allowing for more efficient video recording.
- Modified CameraManager to ensure streamer references are correctly assigned to recorders.
- Enhanced CameraStreamer to include a recording frame queue for concurrent access during recording.
- Improved logging for better tracking of recording states and streamer activity.
- Updated API tests to include new functionality for retrieving video lists.
This commit is contained in:
salirezav
2025-11-01 13:49:16 -04:00
parent 3cb6a8e76e
commit 43e1dace8c
4 changed files with 156 additions and 47 deletions

View File

@@ -167,7 +167,9 @@ class CameraManager:
continue
# Create recorder (uses lazy initialization - camera will be initialized when recording starts)
recorder = CameraRecorder(camera_config=camera_config, device_info=device_info, state_manager=self.state_manager, event_system=self.event_system)
# Get corresponding streamer for frame sharing
streamer = self.camera_streamers.get(camera_config.name)
recorder = CameraRecorder(camera_config=camera_config, device_info=device_info, state_manager=self.state_manager, event_system=self.event_system, streamer=streamer)
# Add recorder to the list (camera will be initialized lazily when needed)
self.camera_recorders[camera_config.name] = recorder
@@ -291,6 +293,13 @@ class CameraManager:
self.logger.error(f"Camera not found: {camera_name}")
return False
# Ensure streamer reference is set (in case recorder was created before streamer)
if not recorder.streamer:
streamer = self.camera_streamers.get(camera_name)
if streamer:
recorder.streamer = streamer
self.logger.debug(f"Updated streamer reference for recorder {camera_name}")
# Update camera settings if provided
if exposure_ms is not None or gain is not None or fps is not None:
settings_updated = recorder.update_camera_settings(exposure_ms=exposure_ms, gain=gain, target_fps=fps)
@@ -444,7 +453,9 @@ class CameraManager:
return False
# Create new recorder (uses lazy initialization)
recorder = CameraRecorder(camera_config=camera_config, device_info=device_info, state_manager=self.state_manager, event_system=self.event_system)
# Get corresponding streamer for frame sharing
streamer = self.camera_streamers.get(camera_config.name)
recorder = CameraRecorder(camera_config=camera_config, device_info=device_info, state_manager=self.state_manager, event_system=self.event_system, streamer=streamer)
# Success - add to recorders (camera will be initialized lazily when needed)
self.camera_recorders[camera_name] = recorder
@@ -481,6 +492,13 @@ class CameraManager:
# Add streamer to the list
self.camera_streamers[camera_config.name] = streamer
# Update recorder's streamer reference if recorder already exists
recorder = self.camera_recorders.get(camera_config.name)
if recorder:
recorder.streamer = streamer
self.logger.debug(f"Updated streamer reference for recorder {camera_config.name}")
self.logger.info(f"Successfully created streamer for camera: {camera_config.name}")
except Exception as e: