sphinx-speech-engine: implementing buffer duplication
authorJanos Kovacs <jankovac503@gmail.com>
Thu, 6 Jun 2013 13:42:30 +0000 (16:42 +0300)
committerKrisztian Litkey <krisztian.litkey@intel.com>
Thu, 6 Jun 2013 13:56:27 +0000 (16:56 +0300)
src/plugins/sphinx-speech-engine/filter-buffer.c
src/plugins/sphinx-speech-engine/filter-buffer.h

index a363aaf..0e3e952 100644 (file)
@@ -243,6 +243,25 @@ void filter_buffer_utter(context_t *ctx, bool full_utterance)
     }
 }
 
+int16_t *filter_buffer_dup(context_t *ctx, int32_t start, int32_t end)
+{
+    filter_buf_t *filtbuf;
+    int16_t *dup;
+    size_t len;
+
+    if (!ctx || !(filtbuf = ctx->filtbuf))
+        return NULL;
+
+    if (start < 0 || end < 0 || start >= end || start >= filtbuf->len)
+        return NULL;
+
+    len = (end - start) * sizeof(int16_t);
+
+    if ((dup = mrp_alloc(len)))
+        memcpy(dup, filtbuf + start, len);
+
+    return dup;
+}
 
 
 
index 5639a99..bc9f3d4 100644 (file)
@@ -7,7 +7,7 @@ struct filter_buf_s {
     int16_t *buf;
     int32_t max;     /* maximum buffer size of filtered data (in samples) */
     int32_t hwm;     /* high-water mark (in samples) */
-    int32_t len;     /* length of data in filter buffer (inn samples) */
+    int32_t len;     /* length of data in filter buffer (in samples) */
     int32_t frlen;   /* frame length in samples */
     int32_t silen;   /* minimum samples to declare silence */
     int32_t ts;      /* time stamp (in samples actually) */
@@ -25,6 +25,8 @@ void filter_buffer_purge(context_t *ctx, int32_t length);
 void filter_buffer_process_data(context_t *ctx);
 void filter_buffer_utter(context_t *ctx, bool full_utterance);
 
+int16_t *filter_buffer_dup(context_t *ctx, int32_t start, int32_t end);
+
 #endif /* __SRS_POCKET_SPHINX_FILTER_BUFFER_H__ */
 
 /*