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

@@ -76,8 +76,9 @@ class CameraStreamer:
self._rtsp_thread: Optional[threading.Thread] = None
self._stop_streaming_event = threading.Event()
self._stop_rtsp_event = threading.Event()
self._frame_queue = queue.Queue(maxsize=5) # Buffer for latest frames
self._frame_queue = queue.Queue(maxsize=5) # Buffer for latest frames (for MJPEG streaming)
self._rtsp_frame_queue = queue.Queue(maxsize=10) # Buffer for RTSP frames (larger buffer for smoother streaming)
self._recording_frame_queue = queue.Queue(maxsize=30) # Buffer for recording frames (shared with recorder)
self._lock = threading.RLock()
# Stream settings (optimized for preview)
@@ -383,6 +384,21 @@ class CameraStreamer:
self._rtsp_frame_queue.put_nowait(frame)
except queue.Empty:
pass
# Add frame to recording queue (for concurrent recording)
# Always populate this queue - recorder will consume if needed
try:
# Put frame into recording queue (recorder can consume without affecting MJPEG/RTSP)
frame_copy = frame.copy() if hasattr(frame, 'copy') else frame
self._recording_frame_queue.put_nowait(frame_copy)
except queue.Full:
# Recording queue full - remove oldest and add new
try:
self._recording_frame_queue.get_nowait()
frame_copy = frame.copy() if hasattr(frame, 'copy') else frame
self._recording_frame_queue.put_nowait(frame_copy)
except queue.Empty:
pass
# Release buffer
mvsdk.CameraReleaseImageBuffer(self.hCamera, pRawData)