| Index: tools/telemetry/telemetry/internal/image_processing/video_file_frame_generator.py
|
| diff --git a/tools/telemetry/telemetry/internal/image_processing/video_file_frame_generator.py b/tools/telemetry/telemetry/internal/image_processing/video_file_frame_generator.py
|
| deleted file mode 100644
|
| index dc209b43fbb414be4638dfcc19d79235ba7c5fff..0000000000000000000000000000000000000000
|
| --- a/tools/telemetry/telemetry/internal/image_processing/video_file_frame_generator.py
|
| +++ /dev/null
|
| @@ -1,95 +0,0 @@
|
| -# Copyright 2014 The Chromium Authors. All rights reserved.
|
| -# Use of this source code is governed by a BSD-style license that can be
|
| -# found in the LICENSE file.
|
| -
|
| -from telemetry.internal.image_processing import frame_generator
|
| -from telemetry.internal.util import external_modules
|
| -
|
| -cv2 = external_modules.ImportRequiredModule('cv2')
|
| -
|
| -
|
| -class VideoFileFrameGenerator(frame_generator.FrameGenerator):
|
| - """Provides a Frame Generator for a video file.
|
| -
|
| - Sample Usage:
|
| - generator = VideoFileFrameGenerator(sys.argv[1]).GetGenerator()
|
| - for frame in generator:
|
| - # Do something
|
| -
|
| - Attributes:
|
| - _capture: The openCV video capture.
|
| - _frame_count: The number of frames in the video capture.
|
| - _frame_index: The frame number of the current frame.
|
| - _timestamp: The timestamp of the current frame.
|
| - _dimensions: The dimensions of the video capture."""
|
| - def __init__(self, video_filename, start_frame_index=0):
|
| - """Initializes the VideoFileFrameGenerator object.
|
| -
|
| - Args:
|
| - video_filename: str, The path to the video file.
|
| - start_frame_index: int, The number of frames to skip at the start of the
|
| - file.
|
| -
|
| - Raises:
|
| - FrameReadError: A read error occurred during initialization."""
|
| - self._capture = cv2.VideoCapture(video_filename)
|
| - self._frame_count = int(self._capture.get(cv2.cv.CV_CAP_PROP_FRAME_COUNT))
|
| - self._frame_index = -1
|
| - self._timestamp = 0
|
| - width = self._capture.get(cv2.cv.CV_CAP_PROP_FRAME_WIDTH)
|
| - height = self._capture.get(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT)
|
| - self._dimensions = (int(width), int(height))
|
| - if self._frame_count <= start_frame_index:
|
| - raise frame_generator.FrameReadError('Not enough frames in capture.')
|
| - while self._frame_index < start_frame_index - 1:
|
| - self._ReadFrame(True)
|
| -
|
| - super(self.__class__, self).__init__()
|
| -
|
| - def _ReadFrame(self, skip_decode=False):
|
| - """Reads the next frame, updates attributes.
|
| -
|
| - Args:
|
| - skip_decode: Whether or not to skip decoding. Useful for seeking.
|
| -
|
| - Returns:
|
| - The frame if not EOF, 'None' if EOF.
|
| -
|
| - Raises:
|
| - FrameReadError: Unexpectedly failed to read a frame from the capture."""
|
| - if self._frame_index >= self._frame_count - 1:
|
| - return None
|
| - self._timestamp = self._capture.get(cv2.cv.CV_CAP_PROP_POS_MSEC)
|
| - if skip_decode:
|
| - ret = self._capture.grab()
|
| - frame = None
|
| - else:
|
| - ret, frame = self._capture.read()
|
| - if not ret:
|
| - raise frame_generator.FrameReadError(
|
| - 'Failed to read frame from capture.')
|
| - self._frame_index += 1
|
| - return frame
|
| -
|
| - # OVERRIDE
|
| - def _CreateGenerator(self):
|
| - while True:
|
| - frame = self._ReadFrame()
|
| - if frame is None:
|
| - break
|
| - yield frame
|
| -
|
| - # OVERRIDE
|
| - @property
|
| - def CurrentTimestamp(self):
|
| - return self._timestamp
|
| -
|
| - # OVERRIDE
|
| - @property
|
| - def CurrentFrameNumber(self):
|
| - return self._frame_index
|
| -
|
| - # OVERRIDE
|
| - @property
|
| - def Dimensions(self):
|
| - return self._dimensions
|
|
|