Source code for traitsui.editors.video_editor

# (C) Copyright 2004-2023 Enthought, Inc., Austin, TX
# All rights reserved.
#
# This software is provided without warranty under the terms of the BSD
# license included in LICENSE.txt and may be redistributed only under
# the conditions described in the aforementioned license. The license
# is also available online at http://www.enthought.com/licenses/BSD.txt
#
# Thanks for using Enthought open source!

"""Traits UI 'display only' video editor."""

from traits.api import Bool, Callable, Enum, Float, Instance, Property, Range

from traitsui.context_value import ContextValue, CVType
from traitsui.basic_editor_factory import BasicEditorFactory
from traitsui.toolkit import toolkit_object

AspectRatio = Enum('keep', 'ignore', 'expand')
PlayerState = Enum('stopped', 'playing', 'paused')
MediaStatus = Enum(
    'unknown',
    'no_media',
    'loading',
    'loaded',
    'stalled',
    'buffering',
    'buffered',
    'end',
    'invalid',
)


[docs]class VideoEditor(BasicEditorFactory): """Traits UI 'display only' video editor. This editor only displays the video stream, and does not attempt to provide UI elements for controlling playback. It does provide a rich set of trait references that can be synchronised with the internal state of the video player. """ #: The editor class to be created: klass = Property() #: The behaviour of the video display when the widget aspect ratio #: doesn't match the aspect ratio of the video stream. aspect_ratio = AspectRatio() #: True if the audio is muted, False otherwise muted = CVType(Bool, default_value=False, sync_value='from') #: Audio volume on a logarithmic scale volume = CVType(Range(0.0, 100.0), default_value=75.0, sync_value='from') #: The playback speed of the video. Negative values are allowed but may not #: be supported by the underlying implementation. playback_rate = CVType(Float, default_value=1.0, sync_value='from') #: The state (stopped, playing, paused) of the player state = CVType(PlayerState, default_value='stopped', sync_value='both') #: The current position, in seconds, in the video. position = CVType(Float, default_value=0.0, sync_value='both') #: Duration of the loaded video in seconds duration = Instance( ContextValue, args=('',), allow_none=False, sync_value='to' ) #: The status of the loaded video (see ``MediaStatus``) media_status = Instance( ContextValue, args=('',), allow_none=False, sync_value='to' ) #: An integer percentage representing how much of the player's buffer #: is filled. buffer = Instance( ContextValue, args=('',), allow_none=False, sync_value='to' ) #: A string describing an error encountered by the player video_error = Instance( ContextValue, args=('',), allow_none=False, sync_value='to' ) #: Callable to apply to video frames. Takes ref to new frame and a size #: tuple. Must return a QImage and a numpy array. image_func = CVType(Callable, sync_value='from') #: The name of a trait to synchronise with the player's notify interval. #: The referenced trait should be a Float representing time in seconds. notify_interval = CVType(Float, default_value=1.0, sync_value='from') def _get_klass(self): """Returns the editor class to be instantiated.""" return toolkit_object('video_editor:VideoEditor')