return 0;
}
+void input_buffer_purge(context_t *ctx)
+{
+ input_buf_t *inpbuf;
+
+ if (!ctx || !!(inpbuf = ctx->inpbuf))
+ return;
+
+ inpbuf->len = 0;
+}
void input_buffer_process_data(context_t *ctx, const void *buf, size_t len)
{
int input_buffer_initialize(context_t *ctx, size_t size, size_t minreq);
+void input_buffer_purge(context_t *ctx);
+
void input_buffer_process_data(context_t *ctx, const void *buf, size_t len);
}
}
+void pulse_interface_cork_input_stream(context_t *ctx, bool cork)
+{
+ pulse_interface_t *pulseif;
+
+ if (!ctx || !(pulseif = ctx->pulseif))
+ return;
+
+ if ((cork && !pulseif->corked) || (!cork && pulseif->corked)) {
+ pulseif->corked = cork;
+
+ if (pulseif->stream && pulseif->conup)
+ pa_stream_cork(pulseif->stream, cork, NULL, NULL);
+ }
+
+ return;
+}
static void connect_to_server(context_t *ctx)
{
pa_stream_peek(stream, &data, &size);
- if (data && size)
+ if (data && size && !pulseif->corked)
input_buffer_process_data(ctx, data, size);
if (size)
pa_context *pactx;
pa_stream *stream;
bool conup;
+ bool corked;
};
int pulse_interface_create(context_t *ctx, pa_mainloop *mloop);
void pulse_interface_destroy(context_t *ctx);
+void pulse_interface_cork_input_stream(context_t *ctx, bool cork);
#endif /* __SRS_POCKET_SPHINX_PULSE_INTERFACE_H__ */
mrp_log_info("Activating CMU Sphinx backend.");
+ pulse_interface_cork_input_stream(ctx, false);
+
return TRUE;
}
MRP_UNUSED(ctx);
mrp_log_info("Deactivating CMU Sphinx backend.");
+
+ pulse_interface_cork_input_stream(ctx, true);
+ filter_buffer_purge(ctx, -1);
+ input_buffer_purge(ctx);
}
static int create_sphinx(srs_plugin_t *plugin)
{
srs_srec_api_t api = {
- activate: activate,
- deactivate: deactivate,
- flush: flush,
- rescan: rescan,
- sampledup: sampledup,
- check_decoder: check_decoder,
- select_decoder: select_decoder,
- active_decoder: active_decoder,
+ activate: activate,
+ deactivate: deactivate,
+ flush: flush,
+ rescan: rescan,
+ sampledup: sampledup,
+ check_decoder: check_decoder,
+ select_decoder: select_decoder,
+ active_decoder: active_decoder,
};
srs_context_t *srs = plugin->srs;