matrice-streaming 0.1.68__py3-none-any.whl → 0.1.70__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -88,7 +88,7 @@ class AsyncCameraWorker:
88
88
  health_queue: multiprocessing.Queue,
89
89
  command_queue: Optional[multiprocessing.Queue] = None,
90
90
  response_queue: Optional[multiprocessing.Queue] = None,
91
- frame_optimizer_enabled: bool = True,
91
+ frame_optimizer_enabled: bool = False, # Disabled for ML quality
92
92
  frame_optimizer_config: Optional[Dict[str, Any]] = None,
93
93
  # ================================================================
94
94
  # SHM_MODE: New parameters for shared memory architecture
@@ -99,7 +99,7 @@ class AsyncCameraWorker:
99
99
  # ================================================================
100
100
  # PERFORMANCE: New parameters for optimized frame capture
101
101
  # ================================================================
102
- drop_stale_frames: bool = True, # Use grab()/grab()/retrieve() pattern for latest frame
102
+ drop_stale_frames: bool = False, # Disabled for ML quality
103
103
  pin_cpu_affinity: bool = True, # Pin worker to specific CPU cores
104
104
  total_workers: int = 1, # Total worker count for CPU affinity calculation
105
105
  buffer_size: int = 1, # Minimal buffer for low latency (cv2_bench uses 1)
@@ -1313,10 +1313,14 @@ def run_async_worker(
1313
1313
  # ================================================================
1314
1314
  # PERFORMANCE: New parameters for optimized frame capture
1315
1315
  # ================================================================
1316
- drop_stale_frames: bool = True,
1316
+ drop_stale_frames: bool = False, # Disabled for ML quality
1317
1317
  pin_cpu_affinity: bool = True,
1318
1318
  total_workers: int = 1,
1319
1319
  buffer_size: int = 1,
1320
+ # ================================================================
1321
+ # FRAME OPTIMIZER: Control frame similarity detection
1322
+ # ================================================================
1323
+ frame_optimizer_enabled: bool = False, # Disabled for ML quality
1320
1324
  ):
1321
1325
  """Entry point for async worker process.
1322
1326
 
@@ -1337,6 +1341,7 @@ def run_async_worker(
1337
1341
  pin_cpu_affinity: Pin worker process to specific CPU cores
1338
1342
  total_workers: Total number of workers for CPU affinity calculation
1339
1343
  buffer_size: VideoCapture buffer size (1 = minimal latency)
1344
+ frame_optimizer_enabled: Enable frame similarity detection (skip similar frames)
1340
1345
  """
1341
1346
  # Setup logging for this process
1342
1347
  logging.basicConfig(
@@ -1378,6 +1383,8 @@ def run_async_worker(
1378
1383
  pin_cpu_affinity=pin_cpu_affinity,
1379
1384
  total_workers=total_workers,
1380
1385
  buffer_size=buffer_size,
1386
+ # FRAME OPTIMIZER: Pass through frame similarity detection setting
1387
+ frame_optimizer_enabled=frame_optimizer_enabled,
1381
1388
  )
1382
1389
 
1383
1390
  # Run event loop
@@ -86,7 +86,7 @@ class AsyncFFmpegWorker:
86
86
  pin_cpu_affinity: bool = True,
87
87
  total_workers: int = 1,
88
88
  # Frame optimizer options
89
- frame_optimizer_enabled: bool = True,
89
+ frame_optimizer_enabled: bool = False, # Disabled for ML quality
90
90
  frame_optimizer_config: Optional[Dict[str, Any]] = None,
91
91
  ):
92
92
  """Initialize async FFmpeg worker.
@@ -905,7 +905,7 @@ def run_ffmpeg_worker(
905
905
  shm_frame_format: str = "BGR",
906
906
  pin_cpu_affinity: bool = True,
907
907
  total_workers: int = 1,
908
- frame_optimizer_enabled: bool = True,
908
+ frame_optimizer_enabled: bool = False, # Disabled for ML quality
909
909
  frame_optimizer_config: Optional[Dict[str, Any]] = None,
910
910
  ):
911
911
  """Entry point for FFmpeg worker process.
@@ -41,7 +41,7 @@ class CameraStreamer:
41
41
  gateway_util: StreamingGatewayUtil = None,
42
42
  connection_refresh_threshold: int = 10,
43
43
  connection_refresh_interval: float = 60.0,
44
- frame_optimizer_enabled: bool = True,
44
+ frame_optimizer_enabled: bool = False, # Disabled for ML quality
45
45
  frame_optimizer_config: Optional[Dict[str, Any]] = None,
46
46
  ):
47
47
  """Initialize CameraStreamer.
@@ -315,7 +315,7 @@ class FFmpegCameraStreamer:
315
315
  shm_slot_count: int = 1000,
316
316
  shm_frame_format: str = "BGR",
317
317
  # Frame optimizer options
318
- frame_optimizer_enabled: bool = True,
318
+ frame_optimizer_enabled: bool = False, # Disabled for ML quality
319
319
  frame_optimizer_config: Optional[Dict[str, Any]] = None,
320
320
  # CPU affinity options
321
321
  pin_cpu_affinity: bool = False,
@@ -532,7 +532,7 @@ class GStreamerCameraStreamer:
532
532
  video_codec: Optional[str] = None,
533
533
  gateway_util: StreamingGatewayUtil = None,
534
534
  gstreamer_config: Optional[GStreamerConfig] = None,
535
- frame_optimizer_enabled: bool = True,
535
+ frame_optimizer_enabled: bool = False, # Disabled for ML quality
536
536
  frame_optimizer_config: Optional[Dict[str, Any]] = None,
537
537
  ):
538
538
  """Initialize GStreamerCameraStreamer.
@@ -96,8 +96,23 @@ except (ImportError, AttributeError, RuntimeError, TypeError):
96
96
  CudaIpcRingBuffer = None
97
97
  GlobalFrameCounter = None
98
98
 
99
+ try:
100
+ from matrice_common.stream.gpu_camera_map import GpuCameraMap
101
+ GPU_CAMERA_MAP_AVAILABLE = True
102
+ except ImportError:
103
+ GPU_CAMERA_MAP_AVAILABLE = False
104
+ GpuCameraMap = None
105
+
99
106
  logger = logging.getLogger(__name__)
100
107
 
108
+ # =============================================================================
109
+ # Fixed dimensions for NV12 output - ALL cameras resize to this size
110
+ # This matches the TensorRT model input requirements (640x640)
111
+ # =============================================================================
112
+ TARGET_WIDTH = 640
113
+ TARGET_HEIGHT = 640
114
+ NV12_HEIGHT = TARGET_HEIGHT + TARGET_HEIGHT // 2 # 960 = H * 1.5 for NV12 format
115
+
101
116
  def setup_logging(quiet: bool = True):
102
117
  """Configure logging level based on quiet mode."""
103
118
  level = logging.WARNING if quiet else logging.INFO
@@ -407,6 +422,8 @@ class StreamState:
407
422
  width: int = 640
408
423
  height: int = 640
409
424
  empty_packets: int = 0
425
+ decode_errors: int = 0 # Consecutive decode errors
426
+ MAX_DECODE_ERRORS: int = 5 # Restart demuxer after this many consecutive errors
410
427
 
411
428
 
412
429
  # =============================================================================
@@ -664,18 +681,44 @@ class NVDECDecoderPool:
664
681
  break
665
682
 
666
683
  frames_before = frames_this_stream
667
- for surface in decoder.Decode(packet):
668
- tensor = surface_to_nv12(surface, target_h, target_w)
669
-
670
- if tensor is not None:
671
- decoded_frames.append((stream.camera_id, tensor))
672
- frames_this_stream += 1
673
- stream.frames_decoded += 1
674
- total_frames += 1
675
- stream.empty_packets = 0
676
684
 
677
- if frames_this_stream >= frames_per_stream:
678
- break
685
+ # Wrap decode loop in try/except to catch decode errors
686
+ try:
687
+ for surface in decoder.Decode(packet):
688
+ tensor = surface_to_nv12(surface, target_h, target_w)
689
+
690
+ if tensor is not None:
691
+ decoded_frames.append((stream.camera_id, tensor))
692
+ frames_this_stream += 1
693
+ stream.frames_decoded += 1
694
+ total_frames += 1
695
+ stream.empty_packets = 0
696
+ stream.decode_errors = 0 # Reset on success
697
+
698
+ if frames_this_stream >= frames_per_stream:
699
+ break
700
+
701
+ except Exception as decode_err:
702
+ # Handle decode errors - these can happen with corrupted packets
703
+ stream.decode_errors += 1
704
+ if stream.decode_errors == 1:
705
+ # Only log first error per stream to avoid spam
706
+ logger.warning(f"{stream.camera_id}: Decode error: {decode_err}")
707
+
708
+ if stream.decode_errors >= stream.MAX_DECODE_ERRORS:
709
+ # Too many consecutive errors - restart demuxer
710
+ logger.warning(
711
+ f"{stream.camera_id}: {stream.decode_errors} consecutive decode errors, "
712
+ f"restarting demuxer"
713
+ )
714
+ try:
715
+ stream.demuxer = nvc.CreateDemuxer(stream.video_path)
716
+ stream.decode_errors = 0
717
+ stream.empty_packets = 0
718
+ logger.info(f"{stream.camera_id}: Demuxer restarted successfully")
719
+ except Exception as restart_err:
720
+ logger.error(f"{stream.camera_id}: Failed to restart demuxer: {restart_err}")
721
+ break # Exit this stream's loop
679
722
 
680
723
  if frames_this_stream == frames_before:
681
724
  stream.empty_packets += 1
@@ -683,7 +726,17 @@ class NVDECDecoderPool:
683
726
  stream.demuxer = nvc.CreateDemuxer(stream.video_path)
684
727
  stream.empty_packets = 0
685
728
 
686
- except Exception:
729
+ except Exception as demux_err:
730
+ # Handle demux errors
731
+ logger.warning(f"{stream.camera_id}: Demux error: {demux_err}")
732
+ stream.decode_errors += 1
733
+ if stream.decode_errors >= stream.MAX_DECODE_ERRORS:
734
+ try:
735
+ stream.demuxer = nvc.CreateDemuxer(stream.video_path)
736
+ stream.decode_errors = 0
737
+ logger.info(f"{stream.camera_id}: Demuxer restarted after demux errors")
738
+ except Exception:
739
+ pass
687
740
  break
688
741
 
689
742
  if frames_this_stream >= frames_per_stream:
@@ -778,16 +831,28 @@ def nvdec_pool_worker(
778
831
 
779
832
  try:
780
833
  with cuda_stream:
834
+ # Always use fixed TARGET dimensions to ensure consistent NV12 output
781
835
  num_frames, decoded_frames = pool.decode_round(
782
836
  decoder_idx,
783
837
  frames_per_stream=burst_size,
784
- target_h=target_h,
785
- target_w=target_w
838
+ target_h=TARGET_HEIGHT, # Always 640
839
+ target_w=TARGET_WIDTH # Always 640
786
840
  )
787
841
 
788
842
  for cam_id, tensor in decoded_frames:
789
843
  if cam_id in ring_buffers:
790
844
  try:
845
+ # Validate frame shape matches expected NV12 dimensions
846
+ expected_shape = (NV12_HEIGHT, TARGET_WIDTH, 1) # (960, 640, 1)
847
+ if tensor.shape != expected_shape:
848
+ local_errors += 1
849
+ if local_errors <= 5:
850
+ logger.error(
851
+ f"Worker {worker_id} shape mismatch for {cam_id}: "
852
+ f"got {tensor.shape}, expected {expected_shape}"
853
+ )
854
+ continue # Skip this frame
855
+
791
856
  ring_buffers[cam_id].write_frame_fast(tensor, sync=False)
792
857
  local_frames += 1
793
858
  frames_since_counter_update += 1
@@ -932,30 +997,64 @@ def nvdec_pool_process(
932
997
  })
933
998
  return
934
999
 
935
- # Create NV12 ring buffers: (H + H/2, W, 1) = 0.6 MB/frame
1000
+ # Create NV12 ring buffers with FIXED dimensions (640x640 -> 960x640 for NV12)
1001
+ # ALL cameras resize to TARGET_WIDTH x TARGET_HEIGHT regardless of source resolution
936
1002
  ring_buffers: Dict[str, CudaIpcRingBuffer] = {}
937
- frame_size_mb = target_h * target_w * 1.5 / 1e6
1003
+ frame_size_mb = TARGET_WIDTH * NV12_HEIGHT * 1 / 1e6 # 640 * 960 * 1 channel
938
1004
 
939
1005
  try:
1006
+ # Initialize GPU camera map (producer side) - process 0 creates, others connect
1007
+ gpu_map = None
1008
+ if GPU_CAMERA_MAP_AVAILABLE:
1009
+ gpu_map = GpuCameraMap(is_producer=True)
1010
+ if process_id == 0:
1011
+ if gpu_map.initialize():
1012
+ logger.info(f"Process {process_id}: GpuCameraMap initialized")
1013
+ else:
1014
+ logger.warning(f"Process {process_id}: Failed to initialize GpuCameraMap")
1015
+ gpu_map = None
1016
+ else:
1017
+ # Wait for process 0 to initialize
1018
+ for retry in range(50):
1019
+ if gpu_map.connect():
1020
+ logger.info(f"Process {process_id}: Connected to GpuCameraMap")
1021
+ break
1022
+ time.sleep(0.1)
1023
+ else:
1024
+ logger.warning(f"Process {process_id}: Failed to connect to GpuCameraMap")
1025
+ gpu_map = None
1026
+
1027
+ # Collect GPU mappings for bulk write
1028
+ gpu_mappings = {}
1029
+
940
1030
  for i, config in enumerate(camera_configs):
1031
+ # Use fixed dimensions - ALL cameras output 640x640 (960x640 for NV12)
941
1032
  rb = CudaIpcRingBuffer.create_producer(
942
1033
  config.camera_id,
943
1034
  gpu_id=config.gpu_id,
944
1035
  num_slots=num_slots,
945
- width=config.width,
946
- height=config.height + config.height // 2, # H * 1.5 for NV12
1036
+ width=TARGET_WIDTH, # Always 640
1037
+ height=NV12_HEIGHT, # Always 960 (640 * 1.5 for NV12)
947
1038
  channels=1,
948
1039
  )
949
1040
  ring_buffers[config.camera_id] = rb
950
1041
 
1042
+ # Track GPU assignment for this camera
1043
+ gpu_mappings[config.camera_id] = config.gpu_id
1044
+
951
1045
  pool.assign_stream(
952
1046
  stream_id=i,
953
1047
  camera_id=config.camera_id,
954
1048
  video_path=config.video_path,
955
- width=config.width,
956
- height=config.height
1049
+ width=TARGET_WIDTH, # Use fixed width
1050
+ height=TARGET_HEIGHT # Use fixed height
957
1051
  )
958
1052
 
1053
+ # Write all GPU mappings at once
1054
+ if gpu_map and gpu_mappings:
1055
+ gpu_map.set_bulk_mapping(gpu_mappings)
1056
+ logger.info(f"Process {process_id}: Wrote {len(gpu_mappings)} camera-GPU mappings")
1057
+
959
1058
  logger.info(f"Process {process_id}: {pool.actual_pool_size} decoders, "
960
1059
  f"{len(camera_configs)} streams, NV12 ({frame_size_mb:.1f} MB/frame)")
961
1060
 
@@ -43,9 +43,13 @@ class WorkerManager:
43
43
  # ================================================================
44
44
  # PERFORMANCE: New parameters for optimized frame capture
45
45
  # ================================================================
46
- drop_stale_frames: bool = True, # Use grab()/grab()/retrieve() for latest frame
46
+ drop_stale_frames: bool = False, # Use grab()/grab()/retrieve() for latest frame (disabled for ML quality)
47
47
  pin_cpu_affinity: bool = True, # Pin workers to specific CPU cores
48
48
  buffer_size: int = 1, # VideoCapture buffer size (1 = minimal latency)
49
+ # ================================================================
50
+ # FRAME OPTIMIZER: Control frame similarity detection
51
+ # ================================================================
52
+ frame_optimizer_enabled: bool = False, # Enable frame similarity detection (disabled for ML quality)
49
53
  ):
50
54
  """Initialize worker manager with dynamic CPU-based scaling.
51
55
 
@@ -62,6 +66,7 @@ class WorkerManager:
62
66
  drop_stale_frames: Use grab()/grab()/retrieve() pattern for latest frame
63
67
  pin_cpu_affinity: Pin worker processes to specific CPU cores for cache locality
64
68
  buffer_size: VideoCapture buffer size (1 = minimal latency)
69
+ frame_optimizer_enabled: Enable frame similarity detection (skip similar frames for bandwidth saving)
65
70
  """
66
71
  self.camera_configs = camera_configs
67
72
  self.stream_config = stream_config
@@ -122,14 +127,28 @@ class WorkerManager:
122
127
  self.pin_cpu_affinity = pin_cpu_affinity
123
128
  self.buffer_size = buffer_size
124
129
 
125
- if drop_stale_frames or pin_cpu_affinity:
130
+ # ================================================================
131
+ # FRAME OPTIMIZER: Store frame similarity detection configuration
132
+ # ================================================================
133
+ self.frame_optimizer_enabled = frame_optimizer_enabled
134
+
135
+ if frame_optimizer_enabled:
126
136
  self.logger.info(
127
- f"PERFORMANCE OPTIMIZATIONS ENABLED: "
128
- f"drop_stale_frames={drop_stale_frames}, "
129
- f"pin_cpu_affinity={pin_cpu_affinity}, "
130
- f"buffer_size={buffer_size}"
137
+ "FRAME OPTIMIZER ENABLED: Similar frames will be skipped (may reduce ML quality)"
131
138
  )
132
139
 
140
+ if drop_stale_frames:
141
+ self.logger.info(
142
+ "DROP STALE FRAMES ENABLED: Using grab/grab/retrieve pattern (may reduce ML quality)"
143
+ )
144
+
145
+ self.logger.info(
146
+ f"Worker config: frame_optimizer={frame_optimizer_enabled}, "
147
+ f"drop_stale_frames={drop_stale_frames}, "
148
+ f"pin_cpu_affinity={pin_cpu_affinity}, "
149
+ f"buffer_size={buffer_size}"
150
+ )
151
+
133
152
  # Note: Batch parameters are calculated per-worker in _start_worker()
134
153
  # based on each worker's camera count, not the global total.
135
154
  # This ensures optimal batching when cameras are distributed across workers.
@@ -291,6 +310,8 @@ class WorkerManager:
291
310
  self.pin_cpu_affinity,
292
311
  self.num_workers, # Total workers for CPU affinity calculation
293
312
  self.buffer_size,
313
+ # FRAME OPTIMIZER: Pass frame similarity detection setting
314
+ self.frame_optimizer_enabled,
294
315
  ),
295
316
  name=f"AsyncWorker-{worker_id}",
296
317
  daemon=False # Non-daemon so we can properly wait for shutdown
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: matrice_streaming
3
- Version: 0.1.68
3
+ Version: 0.1.70
4
4
  Summary: Common server utilities for Matrice.ai services
5
5
  Author-email: "Matrice.ai" <dipendra@matrice.ai>
6
6
  License-Expression: MIT
@@ -19,27 +19,27 @@ matrice_streaming/streaming_gateway/streaming_gateway_utils.py,sha256=6kNYgl3f7H
19
19
  matrice_streaming/streaming_gateway/streaming_status_listener.py,sha256=RgbW0xYbbpmO6ZjkVlh6fg8iqkpRaIShR2dQ3SMVFUw,3161
20
20
  matrice_streaming/streaming_gateway/camera_streamer/ARCHITECTURE.md,sha256=kngsqiS1PdNYhihBoMtoiIf3THJ4OM33E_hxExqzKqY,9980
21
21
  matrice_streaming/streaming_gateway/camera_streamer/__init__.py,sha256=nwVY-ySnKvOedeDXakyR_6KPHSz3yzSeaO_4IFMMP4I,2219
22
- matrice_streaming/streaming_gateway/camera_streamer/async_camera_worker.py,sha256=Bg7yfkCn2RofLqviq22eKRhdxMYtqaeTFJC2no94_lI,59278
23
- matrice_streaming/streaming_gateway/camera_streamer/async_ffmpeg_worker.py,sha256=isBYJnnbdxefkRrV2BsizCSZe1ZDPn5wfoTSOTtObsU,37007
24
- matrice_streaming/streaming_gateway/camera_streamer/camera_streamer.py,sha256=1BzWnwfPEWPVQ6gBW7uZFvykq2zEvygd5LWE6uqVRhY,39085
22
+ matrice_streaming/streaming_gateway/camera_streamer/async_camera_worker.py,sha256=06fw1wLBls2SOljc8H73QyWTPEhQMzG9S271nwdVCIM,59804
23
+ matrice_streaming/streaming_gateway/camera_streamer/async_ffmpeg_worker.py,sha256=cD3XocWqamkBE9TlkG757OK6tl_Op45r-cMd-ZgJXaA,37063
24
+ matrice_streaming/streaming_gateway/camera_streamer/camera_streamer.py,sha256=zv6tWUKQf2uXAxqtSlfwAVDb9N483VCRApPogUWJ9e8,39113
25
25
  matrice_streaming/streaming_gateway/camera_streamer/device_detection.py,sha256=9F4rsbMpIexOIlX8aCj7Q6PFG01kOS1wtgAIQBG0FaM,18463
26
26
  matrice_streaming/streaming_gateway/camera_streamer/encoder_manager.py,sha256=guWqNtgGZQBVBxeDlAVnLWTP-hsleWmKYuVcnd0Hvn0,6962
27
27
  matrice_streaming/streaming_gateway/camera_streamer/encoding_pool_manager.py,sha256=kYfHu-B8bw9wTFxociAYLVvk-UOC-KqcaFdZ1TQuah4,4222
28
- matrice_streaming/streaming_gateway/camera_streamer/ffmpeg_camera_streamer.py,sha256=sCeSTVqaYy-XK2fW7ZSMmGYMCTHrSiFCMizHTzMMJyo,37646
28
+ matrice_streaming/streaming_gateway/camera_streamer/ffmpeg_camera_streamer.py,sha256=6y1S20yED-UoZregwN_apAL4UmonvNGTeAd2H8rXpPU,37674
29
29
  matrice_streaming/streaming_gateway/camera_streamer/ffmpeg_config.py,sha256=fbogEMtmqw4Fae4MS7vL1oQeFy3FkQbJlRGRF_BxIIo,6156
30
30
  matrice_streaming/streaming_gateway/camera_streamer/ffmpeg_worker_manager.py,sha256=pzeDcgST8dHZs18Q4PgnR0-4Up8PU1oAOo8Daos_Y2o,17396
31
31
  matrice_streaming/streaming_gateway/camera_streamer/frame_processor.py,sha256=UPifhOr7wYpA1ACU4xGzC3A4lmbr2FvohcG371O6FHQ,2255
32
- matrice_streaming/streaming_gateway/camera_streamer/gstreamer_camera_streamer.py,sha256=Y_X_luPlvcqMzOn0qodS5opJ6BWjwUYOWWunUEX_10o,54289
32
+ matrice_streaming/streaming_gateway/camera_streamer/gstreamer_camera_streamer.py,sha256=tLZIfpqVGMoCuzjKe9iJyAMF2mbAlkGWr8wTTjsXz0A,54317
33
33
  matrice_streaming/streaming_gateway/camera_streamer/gstreamer_worker.py,sha256=AqKNJ6q_BxFphOlJ2GaS4WpoLCHXLEu5JVvoKQNrGV0,42822
34
34
  matrice_streaming/streaming_gateway/camera_streamer/gstreamer_worker_manager.py,sha256=jlKwIWWMXpztdyKiyremGmkVyw9mf2AxEmT7154xnrc,22002
35
35
  matrice_streaming/streaming_gateway/camera_streamer/message_builder.py,sha256=W295q6cIm05ReF1ooQus3rsKgZOG3EldZplbQco-OyM,10231
36
- matrice_streaming/streaming_gateway/camera_streamer/nvdec.py,sha256=Y3zhycfTpZ_bF5-Ef55J0iFi9wTLTv4Xxmw-woV1occ,53118
36
+ matrice_streaming/streaming_gateway/camera_streamer/nvdec.py,sha256=A94bIwBC9rX7AJUdNYm9KRoKgiVEgSI5z_0zMpeQZ7g,58503
37
37
  matrice_streaming/streaming_gateway/camera_streamer/nvdec_worker_manager.py,sha256=KlcwKFUPVZTQ3J1VIuhPev8Xv9BNw4dj2iLGHrREQCQ,16035
38
38
  matrice_streaming/streaming_gateway/camera_streamer/platform_pipelines.py,sha256=UNjsYYWbUJteOq2tzxISFAbWMa2e9GUExSS6fWc2Aow,27303
39
39
  matrice_streaming/streaming_gateway/camera_streamer/retry_manager.py,sha256=d8tlGoWoeSlgpCgXbUHTM61ekCQZki7TO1HzL2yPVzk,3607
40
40
  matrice_streaming/streaming_gateway/camera_streamer/stream_statistics.py,sha256=VC1S6ogiHUTlzTqn2wGOC1ClOEjvDgWm9Ydi9sWj-Do,18951
41
41
  matrice_streaming/streaming_gateway/camera_streamer/video_capture_manager.py,sha256=ySnbihdkpFPcBdFK_OFcHE-MgjG2YirUUYgEJHhvTxo,16899
42
- matrice_streaming/streaming_gateway/camera_streamer/worker_manager.py,sha256=JDckHyqer0ka4TbVzICEoXePSwRcT2y1YnChnfuK78c,27901
42
+ matrice_streaming/streaming_gateway/camera_streamer/worker_manager.py,sha256=LIx6Qt2bTRZDjWw5l5YSIdif-UVxJs_0umu3p2VDF4Y,29086
43
43
  matrice_streaming/streaming_gateway/debug/README.md,sha256=6GeHClMjJbmVuSKbJ8yOIDqpeAPnLNrHXMFtmubZz0E,11343
44
44
  matrice_streaming/streaming_gateway/debug/__init__.py,sha256=_RtvH0Y12HFiDoKK8BEsMwy6k_iAFjmYYNzMawbOfeQ,2026
45
45
  matrice_streaming/streaming_gateway/debug/benchmark.py,sha256=65la9K2mjiiuADCBSnYpPr9uYFnM89clgw-KHkjSkAU,25563
@@ -49,8 +49,8 @@ matrice_streaming/streaming_gateway/debug/debug_streaming_gateway.py,sha256=ZiDg
49
49
  matrice_streaming/streaming_gateway/debug/debug_utils.py,sha256=jWcSBgrk_YVt1QzSyw6geX17YBnTvgVdA5ubqO531a0,10477
50
50
  matrice_streaming/streaming_gateway/debug/example_debug_streaming.py,sha256=-gS8zNDswAoj6oss66QQWYZhY24usfLiMH0FFK06vV0,7994
51
51
  matrice_streaming/streaming_gateway/debug/test_videoplayback.py,sha256=s_dgWkoESiuJHlUAf_iv4d7OGmAhwocwDZmIcFUZzvo,11093
52
- matrice_streaming-0.1.68.dist-info/licenses/LICENSE.txt,sha256=_uQUZpgO0mRYL5-fPoEvLSbNnLPv6OmbeEDCHXhK6Qc,1066
53
- matrice_streaming-0.1.68.dist-info/METADATA,sha256=vSC8p6EEAKwozRFvArLlVcJoipCaAe9KX7S_H9vyJ8I,2477
54
- matrice_streaming-0.1.68.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
55
- matrice_streaming-0.1.68.dist-info/top_level.txt,sha256=PM_trIe8f4JLc90J871rNMYGVM3Po9Inx4As5LrCFUU,18
56
- matrice_streaming-0.1.68.dist-info/RECORD,,
52
+ matrice_streaming-0.1.70.dist-info/licenses/LICENSE.txt,sha256=_uQUZpgO0mRYL5-fPoEvLSbNnLPv6OmbeEDCHXhK6Qc,1066
53
+ matrice_streaming-0.1.70.dist-info/METADATA,sha256=TkM7S1ddGBeBaOtn_gcuXdZ8kHwpJjb_t5fcDip60OM,2477
54
+ matrice_streaming-0.1.70.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
55
+ matrice_streaming-0.1.70.dist-info/top_level.txt,sha256=PM_trIe8f4JLc90J871rNMYGVM3Po9Inx4As5LrCFUU,18
56
+ matrice_streaming-0.1.70.dist-info/RECORD,,