from pyforms_terminal.controls.control_base import ControlBase
import types, logging
logger = logging.getLogger(__name__)
try:
from StringIO import StringIO as BufferClass
except ImportError:
from io import BytesIO as BufferClass
try:
import cv2
except:
logger.info( "cv2 not present. ControlPlayer not working")
try:
from PIL import Image
except:
logger.info( "PIL not present. ControlPlayer not working")
try:
import base64
except:
logger.info( "base64 not present. ControlPlayer not working")
[docs]class ControlPlayer(ControlBase):
_currentFrame = None
_min = 0
_max = 0
_filename = ''
_position = 0
def process_frame_event(self, frame): pass
[docs] def refresh(self): pass
[docs] def update_frame(self): pass
[docs] def double_click_event(self, event, x, y): pass
[docs] def click_event(self, event, x, y): pass
[docs] def drag_event(self, start_point, end_point): pass
[docs] def end_drag_event(self, start_point, end_point): pass
[docs] def key_release_event(self, event): pass
[docs] def process_frame_event(self, frame): pass
@property
def value(self):
return self._value
@value.setter
def value(self, value):
if value:
if isinstance( value, str ):
ControlBase.value.fset(self, cv2.VideoCapture( value ) )
self._filename = value
if isinstance( value, dict ):
ControlBase.value.fset(self, cv2.VideoCapture( value['filename'] ) )
if 'position' in value.keys(): self.video_index = int(value['position'])
self._filename = value['filename']
if isinstance(value,types.BuiltinFunctionType):
ControlBase.value.fset(self, value )
self._max = int(self._value.get(7))
else:
self._filename = None
self._value = None
@property
def video_index(self): return self._position
@video_index.setter
def video_index(self, value): self._position = value
@property
def image(self): return self._currentFrame
@image.setter
def image(self, value): pass
@property
def frame_width(self): return self._value.get(3)
@property
def frame_height(self): return self._value.get(4)
@property
def max(self): return int(self._value.get(7))
@property
def frame(self): return self._currentFrame
@property
def fps(self):
"""
Return the video frames per second
"""
return self._value.get(5)