gstreamer/bindings/python/gi/overrides/GES.py
Thibault Saunier e41a6b6fac ges: Rework the way we ensure core elements are not wrongly moved between clips
Instead of focusing on the instances of the clips and their children,
we relax the check to allow moving track element clip between clips
that share a common asset. This makes it as correct conceptually but
more flexible, and the code becomes simpler.
2020-04-08 14:35:28 +01:00

98 lines
3.3 KiB
Python

# -*- Mode: Python; py-indent-offset: 4 -*-
# vim: tabstop=4 shiftwidth=4 expandtab
#
# GES.py
#
# Copyright (C) 2012 Thibault Saunier <thibault.saunier@collabora.com>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this program; if not, write to the
# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
# Boston, MA 02111-1307, USA.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3, or (at your option)
# any later version.
import sys
from ..overrides import override
from ..importer import modules
from gi.repository import GObject
if sys.version_info >= (3, 0):
_basestring = str
_callable = lambda c: hasattr(c, '__call__')
else:
_basestring = basestring
_callable = callable
GES = modules['GES']._introspection_module
__all__ = []
if GES._version == '0.10':
import warnings
warn_msg = "You have imported the GES 0.10 module. Because GES 0.10 \
was not designed for use with introspection some of the \
interfaces and API will fail. As such this is not supported \
by the GStreamer development team and we encourage you to \
port your app to GES 1 or greater. static python bindings is the recomended \
python module to use with GES 0.10"
warnings.warn(warn_msg, RuntimeWarning)
def __timeline_element__repr__(self):
return "%s [%s (%s) %s]" % (
self.props.name,
Gst.TIME_ARGS(self.props.start),
Gst.TIME_ARGS(self.props.in_point),
Gst.TIME_ARGS(self.props.duration),
)
__prev_set_child_property = GES.TimelineElement.set_child_property
def __timeline_element_set_child_property(self, prop_name, prop_value):
res, _, pspec = GES.TimelineElement.lookup_child(self, prop_name)
if not res:
return res
v = GObject.Value()
v.init(pspec.value_type)
v.set_value(prop_value)
return __prev_set_child_property(self, prop_name, v)
GES.TimelineElement.__repr__ = __timeline_element__repr__
GES.TimelineElement.set_child_property = __timeline_element_set_child_property
GES.TrackElement.set_child_property = GES.TimelineElement.set_child_property
GES.Container.edit = GES.TimelineElement.edit
__prev_asset_repr = GES.Asset.__repr__
def __asset__repr__(self):
return "%s(%s)" % (__prev_asset_repr(self), self.props.id)
GES.Asset.__repr__ = __asset__repr__
def __timeline_iter_clips(self):
"""Iterate all clips in a timeline"""
for layer in self.get_layers():
for clip in layer.get_clips():
yield clip
GES.Timeline.iter_clips = __timeline_iter_clips
try:
from gi.repository import Gst
Gst
except:
raise RuntimeError("GSt couldn't be imported, make sure you have gst-python installed")