From 04e79fd0e30e50d51910eb722730b1c224d662bf Mon Sep 17 00:00:00 2001 From: Kevin Harwell Date: Thu, 21 Oct 2021 12:49:44 -0500 Subject: [PATCH] res_speech: Add a type conversion, and new engine unregister methods Add a new function that converts a speech results type to a string. Also add another function to unregister an engine, but returns a pointer to the unregistered engine object instead of a success/fail integer. Change-Id: I0f7de17cb411021c09fb03988bc2b904e1380192 --- include/asterisk/speech.h | 6 ++++++ res/res_speech.c | 27 ++++++++++++++++++++++----- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/include/asterisk/speech.h b/include/asterisk/speech.h index 7af7e998de..681c536019 100644 --- a/include/asterisk/speech.h +++ b/include/asterisk/speech.h @@ -47,6 +47,9 @@ enum ast_speech_results_type { AST_SPEECH_RESULTS_TYPE_NBEST, }; +/*! \brief Convert a speech results type to a string */ +const char *ast_speech_results_type_to_string(enum ast_speech_results_type type); + /* Speech structure */ struct ast_speech { /*! Structure lock */ @@ -152,6 +155,9 @@ int ast_speech_change_state(struct ast_speech *speech, int state); int ast_speech_register(struct ast_speech_engine *engine); /*! \brief Unregister a speech recognition engine */ int ast_speech_unregister(const char *engine_name); +/*! \brief Unregister a speech recognition engine */ +struct ast_speech_engine *ast_speech_unregister2(const char *engine_name); + #if defined(__cplusplus) || defined(c_plusplus) } diff --git a/res/res_speech.c b/res/res_speech.c index 57f6fa61e9..d425fde181 100644 --- a/res/res_speech.c +++ b/res/res_speech.c @@ -280,6 +280,19 @@ int ast_speech_change_state(struct ast_speech *speech, int state) return res; } +const char *ast_speech_results_type_to_string(enum ast_speech_results_type type) +{ + switch (type) { + case AST_SPEECH_RESULTS_TYPE_NORMAL: + return "normal"; + case AST_SPEECH_RESULTS_TYPE_NBEST: + return "nbest"; + default: + ast_assert(0); + return "unknown"; + } +} + /*! \brief Change the type of results we want */ int ast_speech_change_results_type(struct ast_speech *speech, enum ast_speech_results_type results_type) { @@ -321,12 +334,17 @@ int ast_speech_register(struct ast_speech_engine *engine) /*! \brief Unregister a speech recognition engine */ int ast_speech_unregister(const char *engine_name) +{ + return ast_speech_unregister2(engine_name) == NULL ? -1 : 0; +} + +struct ast_speech_engine *ast_speech_unregister2(const char *engine_name) { struct ast_speech_engine *engine = NULL; - int res = -1; - if (ast_strlen_zero(engine_name)) - return -1; + if (ast_strlen_zero(engine_name)) { + return NULL; + } AST_RWLIST_WRLOCK(&engines); AST_RWLIST_TRAVERSE_SAFE_BEGIN(&engines, engine, list) { @@ -339,14 +357,13 @@ int ast_speech_unregister(const char *engine_name) } ast_verb(2, "Unregistered speech recognition engine '%s'\n", engine_name); /* All went well */ - res = 0; break; } } AST_RWLIST_TRAVERSE_SAFE_END; AST_RWLIST_UNLOCK(&engines); - return res; + return engine; } static int unload_module(void)