mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-20 07:16:55 +00:00
timeline: emit snapping-started with new valid time
Only emit snapping-ended if we have a valid snap time. Moreover, we should emit a new snapping-started even if we are snapping at the same location. This is because a new snap will always correspond to a new edit, possibly involving different snapping elements, which a user would want to know about. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-editing-services/-/merge_requests/169>
This commit is contained in:
parent
39097f5574
commit
cda1cfa0df
2 changed files with 14 additions and 17 deletions
|
@ -1048,22 +1048,15 @@ ges_timeline_emit_snapping (GESTimeline * timeline, GESTrackElement * elem1,
|
||||||
|
|
||||||
g_assert (elem1 != elem2);
|
g_assert (elem1 != elem2);
|
||||||
|
|
||||||
if (last_snap_ts != snap_time) {
|
if (GST_CLOCK_TIME_IS_VALID (last_snap_ts))
|
||||||
g_signal_emit (timeline, ges_timeline_signals[SNAPING_ENDED], 0,
|
g_signal_emit (timeline, ges_timeline_signals[SNAPING_ENDED], 0,
|
||||||
priv->last_snaped1, priv->last_snaped2, (last_snap_ts));
|
priv->last_snaped1, priv->last_snaped2, (last_snap_ts));
|
||||||
|
|
||||||
/* We want the snap start signal to be emited anyway */
|
priv->last_snaped1 = elem1;
|
||||||
timeline->priv->last_snap_ts = GST_CLOCK_TIME_NONE;
|
priv->last_snaped2 = elem2;
|
||||||
}
|
timeline->priv->last_snap_ts = snap_time;
|
||||||
|
g_signal_emit (timeline, ges_timeline_signals[SNAPING_STARTED], 0,
|
||||||
if (!GST_CLOCK_TIME_IS_VALID (timeline->priv->last_snap_ts)) {
|
elem1, elem2, snap_time);
|
||||||
priv->last_snaped1 = elem1;
|
|
||||||
priv->last_snaped2 = elem2;
|
|
||||||
timeline->priv->last_snap_ts = snap_time;
|
|
||||||
g_signal_emit (timeline, ges_timeline_signals[SNAPING_STARTED], 0,
|
|
||||||
elem1, elem2, snap_time);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Accept @self == NULL, making it use default framerate */
|
/* Accept @self == NULL, making it use default framerate */
|
||||||
|
|
|
@ -366,6 +366,7 @@ class TestEditing(common.GESSimpleTimelineTest):
|
||||||
]
|
]
|
||||||
])
|
])
|
||||||
|
|
||||||
|
# snap to 20
|
||||||
clip.props.start = 18
|
clip.props.start = 18
|
||||||
self.assertTimelineTopology([
|
self.assertTimelineTopology([
|
||||||
[ # Unique layer
|
[ # Unique layer
|
||||||
|
@ -375,6 +376,7 @@ class TestEditing(common.GESSimpleTimelineTest):
|
||||||
])
|
])
|
||||||
self.assertEqual(self.snapped_at, [20])
|
self.assertEqual(self.snapped_at, [20])
|
||||||
|
|
||||||
|
# no snapping
|
||||||
clip.props.start = 30
|
clip.props.start = 30
|
||||||
self.assertTimelineTopology([
|
self.assertTimelineTopology([
|
||||||
[ # Unique layer
|
[ # Unique layer
|
||||||
|
@ -384,6 +386,7 @@ class TestEditing(common.GESSimpleTimelineTest):
|
||||||
])
|
])
|
||||||
self.assertEqual(self.snapped_at, [20, Gst.CLOCK_TIME_NONE])
|
self.assertEqual(self.snapped_at, [20, Gst.CLOCK_TIME_NONE])
|
||||||
|
|
||||||
|
# snap to 20
|
||||||
clip.props.start = 18
|
clip.props.start = 18
|
||||||
self.assertTimelineTopology([
|
self.assertTimelineTopology([
|
||||||
[ # Unique layer
|
[ # Unique layer
|
||||||
|
@ -391,8 +394,8 @@ class TestEditing(common.GESSimpleTimelineTest):
|
||||||
(GES.TestClip, 20, 10),
|
(GES.TestClip, 20, 10),
|
||||||
]
|
]
|
||||||
])
|
])
|
||||||
self.assertEqual(self.snapped_at, [20, Gst.CLOCK_TIME_NONE,
|
self.assertEqual(self.snapped_at, [20, Gst.CLOCK_TIME_NONE, 20])
|
||||||
Gst.CLOCK_TIME_NONE, 20])
|
# snap to 20 again
|
||||||
clip.props.start = 19
|
clip.props.start = 19
|
||||||
self.assertTimelineTopology([
|
self.assertTimelineTopology([
|
||||||
[ # Unique layer
|
[ # Unique layer
|
||||||
|
@ -400,8 +403,9 @@ class TestEditing(common.GESSimpleTimelineTest):
|
||||||
(GES.TestClip, 20, 10),
|
(GES.TestClip, 20, 10),
|
||||||
]
|
]
|
||||||
])
|
])
|
||||||
self.assertEqual(self.snapped_at, [20, Gst.CLOCK_TIME_NONE,
|
self.assertEqual(
|
||||||
Gst.CLOCK_TIME_NONE, 20])
|
self.snapped_at,
|
||||||
|
[20, Gst.CLOCK_TIME_NONE, 20, Gst.CLOCK_TIME_NONE, 20])
|
||||||
|
|
||||||
def test_rippling_snaps(self):
|
def test_rippling_snaps(self):
|
||||||
self.timeline.props.auto_transition = True
|
self.timeline.props.auto_transition = True
|
||||||
|
|
Loading…
Reference in a new issue