From fd2c43ce4157e5775535bc8625884f0b4a9efd39 Mon Sep 17 00:00:00 2001
From: Cody Messick <cody.messick@ligo.org>
Date: Thu, 28 Feb 2019 19:04:19 -0800
Subject: [PATCH] interpolator: fix bug where interpolator was pushing out
 nongap buffers when it received gap buffers (chads patch)

---
 gstlal-ugly/gst/lal/gstlal_interpolator.c | 11 ++++++++---
 gstlal-ugly/gst/lal/gstlal_interpolator.h |  1 +
 2 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/gstlal-ugly/gst/lal/gstlal_interpolator.c b/gstlal-ugly/gst/lal/gstlal_interpolator.c
index 320fb65417..78cb02d658 100644
--- a/gstlal-ugly/gst/lal/gstlal_interpolator.c
+++ b/gstlal-ugly/gst/lal/gstlal_interpolator.c
@@ -501,6 +501,7 @@ static void gstlal_interpolator_init(GSTLALInterpolator *element)
 	/* Always initialize with a discont */
 	element->need_discont = TRUE;
 	element->need_pretend = TRUE;
+	element->last_gap_state = FALSE;
 
 	element->adapter = g_object_new(GST_TYPE_AUDIOADAPTER, NULL);
 }
@@ -802,10 +803,14 @@ static void set_metadata(GSTLALInterpolator *element, GstBuffer *buf, guint64 ou
 		GST_BUFFER_FLAG_SET(buf, GST_BUFFER_FLAG_DISCONT);
 		element->need_discont = FALSE;
 	}
-	if(gap)
+	if(gap) {
 		GST_BUFFER_FLAG_SET(buf, GST_BUFFER_FLAG_GAP);
-	else
+		element->last_gap_state = TRUE;
+	}
+	else {
 		GST_BUFFER_FLAG_UNSET(buf, GST_BUFFER_FLAG_GAP);
+		element->last_gap_state = FALSE;
+	}
 	GST_INFO_OBJECT(element, "%s%s output_buffer %p spans %" GST_BUFFER_BOUNDARIES_FORMAT, gap ? "gap" : "nongap", GST_BUFFER_FLAG_IS_SET(buf, GST_BUFFER_FLAG_DISCONT) ? "+discont" : "", buf, GST_BUFFER_BOUNDARIES_ARGS(buf));
 }
 
@@ -872,7 +877,7 @@ static GstFlowReturn transform(GstBaseTransform *trans, GstBuffer *inbuf, GstBuf
 	output_length = gst_buffer_get_size(outbuf) / element->unitsize;
 
 	if (gst_buffer_get_size(outbuf) == 0)
-		set_metadata(element, outbuf, 0, FALSE);
+		set_metadata(element, outbuf, 0, element->last_gap_state);
 	else {
 
 		if (element->width == 32) {
diff --git a/gstlal-ugly/gst/lal/gstlal_interpolator.h b/gstlal-ugly/gst/lal/gstlal_interpolator.h
index e408d47561..87449821ea 100644
--- a/gstlal-ugly/gst/lal/gstlal_interpolator.h
+++ b/gstlal-ugly/gst/lal/gstlal_interpolator.h
@@ -87,6 +87,7 @@ struct _GSTLALInterpolator {
 	GstClockTime next_output_timestamp;
 	gboolean need_discont;
 	gboolean need_pretend;
+	gboolean last_gap_state;
 
 	/* Variables to control the size of transforms */
 	gsize unitsize;
-- 
GitLab