From 918945fd2a4ebcd60e28aa751bf5dad70e663a59 Mon Sep 17 00:00:00 2001
From: tanel <alumae@gmail.com>
Date: Wed, 10 Sep 2014 16:19:40 +0300
Subject: [PATCH] Guard against EOS when not yet decoding

---
 src/gstkaldinnet2onlinedecoder.cc | 11 +++++++++--
 src/gstkaldinnet2onlinedecoder.h  |  1 +
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/src/gstkaldinnet2onlinedecoder.cc b/src/gstkaldinnet2onlinedecoder.cc
index 8494c33..6b6604a 100644
--- a/src/gstkaldinnet2onlinedecoder.cc
+++ b/src/gstkaldinnet2onlinedecoder.cc
@@ -249,6 +249,7 @@ static void gst_kaldinnet2onlinedecoder_init(
   // will be set later
   filter->feature_info = NULL;
   filter->sample_rate = 0;
+  filter->decoding = false;
 
   // init properties from various Kaldi Opts
   GstElementClass * klass = GST_ELEMENT_GET_CLASS(filter);
@@ -603,6 +604,7 @@ static void gst_kaldinnet2onlinedecoder_loop(
   gst_pad_pause_task(filter->srcpad);
   delete filter->audio_source;
   filter->audio_source = new GstBufferSource();
+  filter->decoding = false;
 }
 
 /* GstElement vmethod implementations */
@@ -653,8 +655,8 @@ static gboolean gst_kaldinnet2onlinedecoder_sink_event(GstPad * pad,
 
   switch (GST_EVENT_TYPE(event)) {
     case GST_EVENT_SEGMENT: {
-
       GST_DEBUG_OBJECT(filter, "Starting decoding task");
+      filter->decoding = true;
       gst_pad_start_task(filter->srcpad,
                          (GstTaskFunction) gst_kaldinnet2onlinedecoder_loop,
                          filter, NULL);
@@ -670,7 +672,12 @@ static gboolean gst_kaldinnet2onlinedecoder_sink_event(GstPad * pad,
     case GST_EVENT_EOS: {
       /* end-of-stream, we should close down all stream leftovers here */
       GST_DEBUG_OBJECT(filter, "EOS received");
-      filter->audio_source->SetEnded(true);
+      if (filter->decoding) {
+        filter->audio_source->SetEnded(true);
+      } else {
+        GST_DEBUG_OBJECT(filter, "EOS received while not decoding, pushing EOS out");
+        gst_pad_push_event(filter->srcpad, gst_event_new_eos());
+      }
       ret = TRUE;
       break;
     }
diff --git a/src/gstkaldinnet2onlinedecoder.h b/src/gstkaldinnet2onlinedecoder.h
index 01fceb8..d77bcac 100644
--- a/src/gstkaldinnet2onlinedecoder.h
+++ b/src/gstkaldinnet2onlinedecoder.h
@@ -105,6 +105,7 @@ struct _Gstkaldinnet2onlinedecoder
   fst::Fst<fst::StdArc> *decode_fst;
   fst::SymbolTable *word_syms;
   int sample_rate;
+  gboolean decoding;
 };
 
 struct _Gstkaldinnet2onlinedecoderClass 
-- 
GitLab