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:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user