Enable the video stream for input (camera/file) or output (file/display). Initializes the OpenCV VideoCapture or VideoWriter as needed. Handles both new and existing files, and sets up frame dropping if input FPS > requested FPS. Returns: None
(self)
| 302 | return 0 |
| 303 | |
| 304 | def _enableStream(self): |
| 305 | """ |
| 306 | Enable the video stream for input (camera/file) or output (file/display). |
| 307 | |
| 308 | Initializes the OpenCV VideoCapture or VideoWriter as needed. |
| 309 | Handles both new and existing files, and sets up frame dropping if input FPS > requested FPS. |
| 310 | Returns: |
| 311 | None |
| 312 | """ |
| 313 | if self.active: |
| 314 | logger.info("_enableStream: stream already active") |
| 315 | return |
| 316 | |
| 317 | self.eos = False |
| 318 | self.frame_ratio = 0 |
| 319 | self.frame_drop = 0 |
| 320 | |
| 321 | if self.stream is not None: |
| 322 | self.stream.release() |
| 323 | self.stream = None |
| 324 | |
| 325 | if self.filename == None: |
| 326 | self.video = True |
| 327 | |
| 328 | if self.video: |
| 329 | if self.mode == MODE_VIDEO_INPUT: |
| 330 | # Input mode: read from camera or video file |
| 331 | if self.filename == None: |
| 332 | # No filename specified: use camera interface |
| 333 | logger.debug("_enableStream: use camera interface for input streaming") |
| 334 | self.stream = cv2.VideoCapture(self.device) |
| 335 | |
| 336 | if not self.stream.isOpened(): |
| 337 | logger.error("_enableStream: failed to open Camera interface") |
| 338 | return |
| 339 | else: |
| 340 | # Filename specified: use video file |
| 341 | logger.debug("_enableStream: use file interface for input streaming") |
| 342 | self.stream = cv2.VideoCapture(self.filename) |
| 343 | |
| 344 | # Display stream properties |
| 345 | logger.info(f"_enableStream: source stream properties: width={self.stream.get(cv2.CAP_PROP_FRAME_WIDTH)}, height={self.stream.get(cv2.CAP_PROP_FRAME_HEIGHT)}, fps={self.stream.get(cv2.CAP_PROP_FPS)}") |
| 346 | |
| 347 | # Get the video stream FPS |
| 348 | video_fps = self.stream.get(cv2.CAP_PROP_FPS) |
| 349 | |
| 350 | if video_fps > self.frame_rate: |
| 351 | self.frame_ratio = video_fps / self.frame_rate |
| 352 | logger.debug(f"_enableStream: source/target frame ratio={self.frame_ratio}") |
| 353 | |
| 354 | if self.mode == MODE_VIDEO_OUTPUT: |
| 355 | # Output mode: write to video file or display window |
| 356 | if self.filename != None: |
| 357 | # Filename specified: output to file |
| 358 | logger.debug("_enableStream: output stream to a file") |
| 359 | |
| 360 | extension = self.filename.suffix.lstrip('.').lower() |
| 361 | fourcc = cv2.VideoWriter_fourcc(*f'{video_fourcc[extension]}') |