diff options
author | Thibault Saunier <tsaunier@igalia.com> | 2020-07-12 13:49:36 -0400 |
---|---|---|
committer | Thibault Saunier <tsaunier@igalia.com> | 2020-07-31 21:36:43 -0400 |
commit | a3a4fb1a3dfe3fa4405a0bfe50a7b1e0f536feec (patch) | |
tree | b8034d2c2b97fcaee76ad19e050280614c4fa9a2 | |
parent | c834ce5bc4c4888a2a2420ea28827269826d3195 (diff) |
ges:validate: Allow setting keyframes using the clips directly
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-editing-services/-/merge_requests/204>
-rw-r--r-- | ges/ges-structured-interface.c | 14 | ||||
-rw-r--r-- | ges/ges-validate.c | 16 |
2 files changed, 27 insertions, 3 deletions
diff --git a/ges/ges-structured-interface.c b/ges/ges-structured-interface.c index ce4e2a42..94f6c6d4 100644 --- a/ges/ges-structured-interface.c +++ b/ges/ges-structured-interface.c @@ -171,7 +171,19 @@ _ges_add_remove_keyframe_from_struct (GESTimeline * timeline, GET_AND_CHECK ("timestamp", GST_TYPE_CLOCK_TIME, ×tamp, done); element = - GES_TRACK_ELEMENT (ges_timeline_get_element (timeline, element_name)); + (GESTrackElement *) ges_timeline_get_element (timeline, element_name); + + if (GES_IS_CLIP (element)) { + GList *tmp; + for (tmp = GES_CONTAINER_CHILDREN (element); tmp; tmp = tmp->next) { + if (ges_timeline_element_lookup_child (tmp->data, property_name, NULL, + NULL)) { + gst_object_replace ((GstObject **) & element, tmp->data); + + break; + } + } + } if (!GES_IS_TRACK_ELEMENT (element)) { *error = diff --git a/ges/ges-validate.c b/ges/ges-validate.c index 42d8523c..07670ef9 100644 --- a/ges/ges-validate.c +++ b/ges/ges-validate.c @@ -895,9 +895,21 @@ GES_START_VALIDATE_ACTION (_set_control_source) TRY_GET ("interpolation-mode", G_TYPE_STRING, &interpolation_mode, NULL); element = - GES_TRACK_ELEMENT (ges_timeline_get_element (timeline, element_name)); + (GESTrackElement *) (ges_timeline_get_element (timeline, element_name)); + if (GES_IS_CLIP (element)) { + GList *tmp; + for (tmp = GES_CONTAINER_CHILDREN (element); tmp; tmp = tmp->next) { + if (ges_timeline_element_lookup_child (tmp->data, property_name, NULL, + NULL)) { + gst_object_replace ((GstObject **) & element, tmp->data); + + break; + } + } + } REPORT_UNLESS (GES_IS_TRACK_ELEMENT (element), beach, - "Could not find element %s", element_name); + "Could not find track element element %s (got %" GST_PTR_FORMAT ")", + element_name, element); if (!binding_type) binding_type = g_strdup ("direct"); |