mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-30 21:51:09 +00:00
5e448921d8
This was complexifying the implementation for very little gain. Each source type should ideally have its own API. In that patch we make it so we do not have to subclass anything but instead use GESAsset to pass information about how the pipeline should look like. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-editing-services/-/merge_requests/175>
90 lines
3 KiB
Python
90 lines
3 KiB
Python
#!/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)
|