Home | History | Annotate | Download | only in image_processing
      1 # Copyright 2014 The Chromium Authors. All rights reserved.
      2 # Use of this source code is governed by a BSD-style license that can be
      3 # found in the LICENSE file.
      4 
      5 import abc
      6 
      7 
      8 class FrameReadError(Exception):
      9   pass
     10 
     11 
     12 class FrameGenerator(object):
     13   """ Defines an interface for reading input frames.
     14 
     15   Attributes:
     16     _generator: A reference to the created generator.
     17   """
     18   __metaclass__ = abc.ABCMeta
     19 
     20   def __init__(self):
     21     """ Initializes the FrameGenerator object. """
     22     self._generator = self._CreateGenerator()
     23 
     24   @abc.abstractmethod
     25   def _CreateGenerator(self):
     26     """ Creates a new generator.
     27 
     28     Implemented in derived classes.
     29 
     30     Raises:
     31       FrameReadError: A error occurred in reading the frame.
     32     """
     33     raise NotImplementedError
     34 
     35   @property
     36   def Generator(self):
     37     """ Returns:
     38           A reference to the created generator.
     39     """
     40     return self._generator
     41 
     42   @abc.abstractproperty
     43   def CurrentTimestamp(self):
     44     """ Returns:
     45           float, The timestamp of the current frame in milliseconds.
     46     """
     47     raise NotImplementedError
     48 
     49   @abc.abstractproperty
     50   def CurrentFrameNumber(self):
     51     """ Returns:
     52           int, The frame index of the current frame.
     53     """
     54     raise NotImplementedError
     55 
     56   @abc.abstractproperty
     57   def Dimensions(self):
     58     """ Returns:
     59           The dimensions of the frame sequence as a tuple int (width, height).
     60           This value should be constant across frames.
     61     """
     62     raise NotImplementedError
     63