- SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Default engine is NULL");
- return STTD_ERROR_ENGINE_NOT_FOUND;
- }
-
- g_agent_init = true;
-
- return 0;
-}
-
-sttengine_info_s* __engine_agent_get_engine_by_id(int engine_id)
-{
- GSList *iter = NULL;
- sttengine_info_s *data = NULL;
-
- iter = g_slist_nth(g_engine_list, 0);
-
- while (NULL != iter) {
-
- data = iter->data;
-
- if (data->engine_id == engine_id)
- return data;
-
- iter = g_slist_next(iter);
- }
-
- return NULL;
-}
-
-sttengine_info_s* __engine_agent_get_engine_by_uuid(const char* engine_uuid)
-{
- GSList *iter = NULL;
- sttengine_info_s *data = NULL;
-
- iter = g_slist_nth(g_engine_list, 0);
-
- while (NULL != iter) {
-
- data = iter->data;
-
- if (0 == strcmp(data->engine_uuid, engine_uuid))
- return data;
-
- iter = g_slist_next(iter);
- }
-
- return NULL;
-}
-
-sttengine_client_s* __engine_agent_get_client(int uid)
-{
- GSList *iter = NULL;
- sttengine_client_s *data = NULL;
-
- if (0 < g_slist_length(g_engine_client_list)) {
- iter = g_slist_nth(g_engine_client_list, 0);
-
- while (NULL != iter) {
- /* Get handle data from list */
- data = iter->data;
-
- if (uid == data->uid)
- return data;
-
- iter = g_slist_next(iter);
- }
- }
-
- return NULL;
-}
-
-sttengine_info_s* __engine_agent_get_engine_by_uid(int uid)
-{
- sttengine_client_s *data;
-
- data = __engine_agent_get_client(uid);
- if (NULL != data)
- return __engine_agent_get_engine_by_id(data->engine_id);
-
- return NULL;
-}
-
-int __engine_agent_check_engine_unload(int engine_id)
-{
- /* Check the count of client to use this engine */
- GSList *iter = NULL;
- int client_count = 0;
- sttengine_client_s *data = NULL;
-
- if (0 < g_slist_length(g_engine_client_list)) {
- iter = g_slist_nth(g_engine_client_list, 0);
-
- while (NULL != iter) {
- /* Get handle data from list */
- data = iter->data;
-
- if (data->engine_id == engine_id)
- client_count++;
-
- iter = g_slist_next(iter);
- }
- }
-
- if (0 == client_count) {
- sttengine_info_s* engine = NULL;
- engine = __engine_agent_get_engine_by_id(engine_id);
- if (NULL == engine) {
- SECURE_SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Fail to get engine from client(%d)", engine_id);
- } else {
- if (engine->is_loaded) {
- /* unload engine */
-#ifndef AUDIO_CREATE_ON_START
- SECURE_SLOG(LOG_DEBUG, TAG_STTD, "[Engine Agent] Destroy recorder");
- if (0 != sttd_recorder_destroy(engine->engine_id))
- SECURE_SLOG(LOG_WARN, TAG_STTD, "[Engine Agent] Fail to destroy recorder(%d)", engine->engine_id);
-#endif
- SECURE_SLOG(LOG_DEBUG, TAG_STTD, "[Engine Agent] Unload engine id(%d)", engine_id);
- if (0 != stt_engine_deinitialize(engine->engine_id))
- SECURE_SLOG(LOG_WARN, TAG_STTD, "[Engine Agent] Fail to deinitialize engine id(%d)", engine->engine_id);
-
- if (0 != stt_engine_unload(engine->engine_id))
- SECURE_SLOG(LOG_WARN, TAG_STTD, "[Engine Agent] Fail to unload engine id(%d)", engine->engine_id);
-
- engine->is_loaded = false;
- }
- }
- }
-
- return 0;
-}
-
-int sttd_engine_agent_load_current_engine(int uid, const char* engine_uuid)
-{
- if (false == g_agent_init) {
- SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Not Initialized");
- return STTD_ERROR_OPERATION_FAILED;
- }
-
- sttengine_client_s* client = NULL;
- sttengine_info_s* engine = NULL;
- int before_engine = -1;
-
- client = __engine_agent_get_client(uid);
-
- if (NULL == client) {
- client = (sttengine_client_s*)calloc(1, sizeof(sttengine_client_s));
- if (NULL == client) {
- SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Fail to allocate memory");
- return STTD_ERROR_OUT_OF_MEMORY;
- }
-
- /* initialize */
- client->uid = uid;
- client->engine_id = -1;
-
- g_engine_client_list = g_slist_append(g_engine_client_list, client);
-
- SECURE_SLOG(LOG_DEBUG, TAG_STTD, "[Engine Agent] Registered client(%d)", uid);
- }
-
- if (NULL == engine_uuid) {
- /* Set default engine */
- engine = __engine_agent_get_engine_by_id(g_default_engine_id);
-
- if (NULL == engine) {
- SECURE_SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Fail to get default engine : %d", g_default_engine_id);
- return STTD_ERROR_OPERATION_FAILED;
- }
- before_engine = client->engine_id;
-
- client->engine_id = engine->engine_id;
- client->use_default_engine = true;
- } else {
- /* Set engine by uid */
- engine = __engine_agent_get_engine_by_uuid(engine_uuid);
-
- if (NULL == engine) {
- SECURE_SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Fail to get engine : %s", engine_uuid);
- return STTD_ERROR_OPERATION_FAILED;
- }
- before_engine = client->engine_id;
-
- client->engine_id = engine->engine_id;
- client->use_default_engine = false;
- }
-
- if (-1 != before_engine) {
- /* Unload engine if reference count is 0 */
- __engine_agent_check_engine_unload(before_engine);
- }
-
- if (true == engine->is_loaded) {
- SECURE_SLOG(LOG_DEBUG, TAG_STTD, "[Engine] engine id(%d) is already loaded", engine->engine_id);
- return 0;