#!/usr/bin/env python3 """ Simple script to update the children properties information for GESTrackElement-s that add children properties all the time """ import gi import os import sys import textwrap gi.require_version("Gst", "1.0") gi.require_version("GObject", "2.0") gi.require_version("GES", "1.0") from gi.repository import Gst, GES, GObject overrides = { "GstFramePositioner": False, "GstBaseTextOverlay": "timeoverlay", "GstVideoDirection": "videoflip", "GESVideoTestSource": "GESVideoTestSource", "GESVideoTransition": "GESVideoTransition", } if __name__ == "__main__": Gst.init(None) GES.init() os.chdir(os.path.realpath(os.path.dirname(__file__))) tl = GES.Timeline.new_audio_video() layer = tl.append_layer() elements = [] def add_clip(c, add=True, override_name=None): c.props.duration = Gst.SECOND c.props.start = layer.get_duration() layer.add_clip(c) if add: elements.extend(c.children) else: if override_name: elements.append((c, override_name)) else: elements.append(c) add_clip(GES.UriClipAsset.request_sync(Gst.filename_to_uri(os.path.join("../../", "tests/check/assets/audio_video.ogg"))).extract()) add_clip(GES.TestClip.new()) add_clip(GES.TitleClip.new()) add_clip(GES.SourceClip.new_time_overlay(), False, "GESTimeOverlaySourceClip") add_clip(GES.TransitionClip.new_for_nick("crossfade"), False) for element in elements: if isinstance(element, tuple): element, gtype = element else: gtype = element.__gtype__.name print(gtype) with open(gtype + '-children-props.md', 'w') as f: for prop in GES.TimelineElement.list_children_properties(element): prefix = '#### `%s`\n\n' % (prop.name) prefix_len = len(prefix) lines = textwrap.wrap(prop.blurb, width=80) doc = prefix + lines[0] if GObject.type_is_a(prop, GObject.ParamSpecEnum.__gtype__): lines += ["", "Valid values:"] for value in prop.enum_class.__enum_values__.values(): lines.append(" - **%s** (%d) – %s" % (value.value_name, int(value), value.value_nick)) else: lines += ["", "Value type: #" + prop.value_type.name] typename = overrides.get(prop.owner_type.name, None) if typename is not False: if typename is None: if GObject.type_is_a(prop.owner_type, Gst.Element): typename = GObject.new(prop.owner_type).get_factory().get_name() lines += ["", "See #%s:%s" % (typename, prop.name)] if len(lines) > 1: doc += '\n' doc += '\n'.join(lines[1:]) print(doc + "\n", file=f)