audioaggregator: Reset offset if the output rate is renegotiated
authorSebastian Dröge <sebastian@centricular.com>
Thu, 20 Aug 2020 13:31:38 +0000 (16:31 +0300)
committerSebastian Dröge <slomo@coaxion.net>
Wed, 9 Sep 2020 09:09:17 +0000 (09:09 +0000)
On next aggregation the new offset will be calculated based on the
segment position.

Without this a rate change would cause a jump forwards or backwards in
the output timeline.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/794>

gst-libs/gst/audio/gstaudioaggregator.c

index f9acc6d..ac8ee8c 100644 (file)
@@ -1099,6 +1099,9 @@ gst_audio_aggregator_negotiated_src_caps (GstAggregator * agg, GstCaps * caps)
     GST_INFO_OBJECT (aagg, "setting caps to %" GST_PTR_FORMAT, caps);
     gst_caps_replace (&aagg->current_caps, caps);
 
+    if (old_info.rate != info.rate)
+      aagg->priv->offset = -1;
+
     memcpy (&srcpad->info, &info, sizeof (info));
 
     gst_audio_aggregator_update_converters (aagg, &info, &old_info);