From 882a0402ef243212aea62e4a12923160d0579fae Mon Sep 17 00:00:00 2001
From: Benoit Favre <benoit.favre@lif.univ-mrs.fr>
Date: Tue, 17 Feb 2015 16:36:34 +0100
Subject: [PATCH] disable lattice generation, change partial hyp interval

---
 src/gstkaldinnet2onlinedecoder.cc | 27 +++++++++++++++++++++++++--
 1 file changed, 25 insertions(+), 2 deletions(-)

diff --git a/src/gstkaldinnet2onlinedecoder.cc b/src/gstkaldinnet2onlinedecoder.cc
index a0154aa..27a7fdd 100644
--- a/src/gstkaldinnet2onlinedecoder.cc
+++ b/src/gstkaldinnet2onlinedecoder.cc
@@ -615,6 +615,15 @@ static void gst_kaldinnet2onlinedecoder_final_result(
     int64 *tot_num_frames, double *tot_like, guint *num_words) {
   if (clat.NumStates() == 0) {
     KALDI_WARN<< "Empty lattice.";
+    // ADDED
+    int hyp_length = 0;
+    GstBuffer *buffer = gst_buffer_new_and_alloc(hyp_length + 1);
+    gst_buffer_fill(buffer, 0, "", hyp_length);
+    gst_buffer_memset(buffer, hyp_length, '\n', 1);
+    gst_pad_push(filter->srcpad, buffer);
+
+    /* Emit a signal for applications. */
+    g_signal_emit(filter, gst_kaldinnet2onlinedecoder_signals[FINAL_RESULT_SIGNAL], 0, "");
     return;
   }
   CompactLattice best_path_clat;
@@ -764,7 +773,7 @@ static void gst_kaldinnet2onlinedecoder_loop(
 
   GST_DEBUG_OBJECT(filter, "Starting decoding loop..");
 #ifndef THREADED_DECODER // used for partial result, unavailable with threading
-  BaseFloat traceback_period_secs = 1.0;
+  BaseFloat traceback_period_secs = 0.2;
 #endif
 
   int32 chunk_length = int32(filter->sample_rate * filter->chunk_length_in_secs);
@@ -810,24 +819,32 @@ static void gst_kaldinnet2onlinedecoder_loop(
 #endif
       }
 #ifndef THREADED_DECODER // the threaded decoder just starts when it gets data
+      //fprintf(stderr, "START advance_decoding ()\n");
       decoder.AdvanceDecoding();
+      //fprintf(stderr, "  END advance_decoding ()\n");
 #endif
       if (!more_data) {
+          fprintf(stderr, "BREAK !more_data\n");
         break;
       }
+      //fprintf(stderr, "do_endpointing = %d\n", filter->do_endpointing);
+      filter->do_endpointing = true;
       if (filter->do_endpointing
           && decoder.EndpointDetected(*(filter->endpoint_config))) {
 #ifdef THREADED_DECODER // must stop it (the non-threaded is already idle)
         decoder.TerminateDecoding();
 #endif
         GST_DEBUG_OBJECT(filter, "Endpoint detected!");
+          fprintf(stderr, "BREAK end_point\n");
         break;
       }
       num_seconds_decoded += filter->chunk_length_in_secs;
 #ifndef THREADED_DECODER // I think it's only relevant to the single-thread version
       if (num_seconds_decoded - last_traceback > traceback_period_secs) {
         Lattice lat;
+        //fprintf(stderr, "START get_best_path ()\n");
         decoder.GetBestPath(false, &lat);
+        //fprintf(stderr, "  END get_best_path ()\n");
         gst_kaldinnet2onlinedecoder_partial_result(filter, lat);
         last_traceback += traceback_period_secs;
       }
@@ -838,13 +855,17 @@ static void gst_kaldinnet2onlinedecoder_loop(
       decoder.Wait();
 #endif
       GST_DEBUG_OBJECT(filter, "Getting lattice..");
+      //fprintf(stderr, "START finalize_decoding ()\n");
       decoder.FinalizeDecoding();
+      //fprintf(stderr, "  END finalize_decoding ()\n");
       CompactLattice clat;
       bool end_of_utterance = true;
 #ifdef THREADED_DECODER
       decoder.GetLattice(end_of_utterance, &clat, NULL);
 #else
-      decoder.GetLattice(end_of_utterance, &clat);
+      //fprintf(stderr, "START get_lattice ()\n");
+      //decoder.GetLattice(end_of_utterance, &clat);
+      //fprintf(stderr, "  END get_lattice ()\n");
 #endif
       GST_DEBUG_OBJECT(filter, "Lattice done");
       if ((filter->lm_fst != NULL) && (filter->big_lm_const_arpa != NULL)) {
@@ -859,8 +880,10 @@ static void gst_kaldinnet2onlinedecoder_loop(
       int64 num_frames = 0;
 
       guint num_words = 0;
+      //fprintf(stderr, "START final_result ()\n");
       gst_kaldinnet2onlinedecoder_final_result(filter, clat, &num_frames,
                                                &tot_like, &num_words);
+      //fprintf(stderr, "  END final_result ()\n");
       if (num_words > 0) {
         // Only update adaptation state if the utterance was not empty
 #ifdef THREADED_DECODER
-- 
GitLab