14a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/*---------------------------------------------------------------------------*
24a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  rec_basi.c  *
34a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *                                                                           *
44a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  Copyright 2007, 2008 Nuance Communciations, Inc.                               *
54a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *                                                                           *
64a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  Licensed under the Apache License, Version 2.0 (the 'License');          *
74a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  you may not use this file except in compliance with the License.         *
84a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *                                                                           *
94a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  You may obtain a copy of the License at                                  *
104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0                           *
114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *                                                                           *
124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  Unless required by applicable law or agreed to in writing, software      *
134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  distributed under the License is distributed on an 'AS IS' BASIS,        *
144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  See the License for the specific language governing permissions and      *
164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  limitations under the License.                                           *
174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *                                                                           *
184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *---------------------------------------------------------------------------*/
194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include <stdlib.h>
214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include <string.h>
224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#ifndef _RTT
234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include <stdio.h>
244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#endif
254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#ifdef unix
274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include <unistd.h>
284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#endif
294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include <assert.h>
304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "simapi.h"
334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "portable.h"
344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic const char rec_basi[] = "$Id: rec_basi.c,v 1.13.6.7 2007/10/15 18:06:24 dahan Exp $";
364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/*chopped - chopped a lot of stuff out of this file - all the references to the
384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstuff within the rec structure.  It seems like this should not be at this level.  If
394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectwe leave it below here, we can change the search (with a new rec type) without
404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projecthaving to change this level*/
414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCA_Recog *CA_AllocateRecognition()
434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CA_Recog *hRecog = NULL;
454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#ifdef SREC_ENGINE_VERBOSE_LOGGING
474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  PLogMessage("in CA_AllocateRecognition\n");
484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#endif
494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  TRY_CA_EXCEPT
514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  /* CREC_SET_SIGNATURE must be 'tied' to the
544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project   * actual creation of the recog_info structure.
554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project   * Any methods which take 'recog_info' as an argument,
564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project   * even 'destroy_recognition()' will test the signature!
574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project   */
584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  hRecog = (CA_Recog *) CALLOC_CLR(1, sizeof(CA_Recog), "ca.hRecog");
594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  hRecog->setup_count = 0;
614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  hRecog->is_running = False;
624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  hRecog->is_configured = False;
634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  hRecog->is_resultBlocked = False;
644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  hRecog->ca_rtti = CA_RECOGNIZER_SIGNATURE;
654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  hRecog->recm = (multi_srec*)CALLOC_CLR(1, sizeof(multi_srec), "ca.hRecog.srec");
674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return (hRecog);
684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  BEG_CATCH_CA_EXCEPT
704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  END_CATCH_CA_EXCEPT(hRecog)
714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectint CA_ConfigureRecognition(CA_Recog *hRecog, CA_RecInputParams *hRecInput)
744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  int rc = 0;
764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  TRY_CA_EXCEPT
774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (hRecog->is_configured == True)
794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    SERVICE_ERROR(RECOGNIZER_ALREADY_CONFIGURED);
804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  rc = allocate_recognition(hRecog->recm,
824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project                            hRecInput->viterbi_prune_thresh,
834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project                            hRecInput->max_hmm_tokens,
844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project                            hRecInput->max_fsmnode_tokens,
854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project                            hRecInput->max_word_tokens,
864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project                            hRecInput->max_altword_tokens,
874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project                            hRecInput->num_wordends_per_frame,
884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project                            hRecInput->max_fsm_nodes,
894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project                            hRecInput->max_fsm_arcs,
904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project                            hRecInput->max_frames,
914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project                            hRecInput->max_model_states,
924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project                            hRecInput->max_searches);
934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (rc) return rc;
944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  /*rc =*/
964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  srec_eosd_allocate(&hRecog->eosd_parms,
974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project                     hRecInput->eou_threshold,
984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project                     hRecInput->eou_threshold,
994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project                     hRecInput->terminal_timeout,
1004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project                     hRecInput->optional_terminal_timeout,
1014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project                     hRecInput->non_terminal_timeout,
1024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project                     hRecInput->max_frames);
1034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (rc) return rc;
1044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  hRecog->is_configured = True;
1064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  BEG_CATCH_CA_EXCEPT
1084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  END_CATCH_CA_EXCEPT(hRecog)
1094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return 0;
1104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
1114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectvoid CA_UnconfigureRecognition(CA_Recog *hRecog)
1134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
1144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  TRY_CA_EXCEPT
1154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (hRecog->is_configured == False)
1174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    SERVICE_ERROR(RECOGNIZER_NOT_CONFIGURED);
1184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (hRecog->is_running == True)
1204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    SERVICE_ERROR(RECOGNIZER_ALREADY_STARTED);
1214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  srec_eosd_destroy(hRecog->eosd_parms);
1234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  free_recognition(hRecog->recm);
1244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  hRecog->is_configured = False;
1254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  BEG_CATCH_CA_EXCEPT
1274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  END_CATCH_CA_EXCEPT(hRecog)
1284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
1294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectvoid CA_FreeRecognition(CA_Recog *hRecog)
1334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
1344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  TRY_CA_EXCEPT
1354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ASSERT(hRecog);
1364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (hRecog->is_configured == True)
1384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    SERVICE_ERROR(RECOGNIZER_ALREADY_CONFIGURED);
1394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  /* CREC_CLEAR_SIGNATURE must be 'tied' to the
1414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project   * actual destruction of the recog_info structure.
1424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project   * Any methods which take 'recog_info' as an argument,
1434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project   * even 'destroy_recognition()' will test the signature!
1444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project   */
1454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  FREE(hRecog->recm);
1464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  FREE(hRecog);
1474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return;
1494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  BEG_CATCH_CA_EXCEPT
1514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  END_CATCH_CA_EXCEPT(hRecog)
1524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
1534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectvoid CA_BeginRecognition(CA_Recog *hRecog, CA_Syntax *hSyntax,
1564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project                         int first_syntax_node, CA_RecInputParams *hRecInput)
1574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
1584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  TRY_CA_EXCEPT
1594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  /*ASSERT (hSyntax);*/
1604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ASSERT(hRecog);
1614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ASSERT(hRecInput);
1624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (hRecog->is_running == True)
1634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    SERVICE_ERROR(RECOGNIZER_ALREADY_STARTED);
1644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (hRecog->is_configured == False)
1664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    SERVICE_ERROR(RECOGNIZER_NOT_CONFIGURED);
1674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  begin_recognition(hRecog->recm, first_syntax_node);
1694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  hRecog->is_running = True;
1704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return;
1724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  BEG_CATCH_CA_EXCEPT
1744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  END_CATCH_CA_EXCEPT(hRecog)
1754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
1764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectvoid CA_AdvanceRecognitionByFrame(CA_Recog *hRecog, CA_Pattern *hPattern,
1794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project                                  CA_Utterance *hUtterance)
1804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
1814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  int rc;
1824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  TRY_CA_EXCEPT
1834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ASSERT(hRecog);
1844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ASSERT(hPattern);
1854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ASSERT(hUtterance);
1864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (hRecog->is_running == False)
1874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    SERVICE_ERROR(RECOGNIZER_NOT_STARTED);
1884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (hPattern->is_loaded == False)
1894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    SERVICE_ERROR(PATTERN_NOT_LOADED);
1904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  //if (0 && hPattern->setup_sub == NULL && hPattern->setup_whole == NULL)
1914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    //SERVICE_ERROR(PATTERN_NOT_SETUP);
1924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  rc = multi_srec_viterbi(hRecog->recm,
1944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project                          hRecog->eosd_parms,
1954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project                          &hPattern->data,
1964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project                          &hUtterance->data);
1974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return;
1984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  BEG_CATCH_CA_EXCEPT
2004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  END_CATCH_CA_EXCEPT(hRecog)
2014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
2024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectint CA_EndRecognition(CA_Recog *hRecog, CA_Pattern *hPattern,
2054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project                      CA_Utterance *hUtterance)
2064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
2074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  TRY_CA_EXCEPT
2084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  int terminated;
2094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ASSERT(hRecog);
2114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ASSERT(hPattern);
2124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  ASSERT(hUtterance);
2134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (hRecog->is_running == False)
2144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    SERVICE_ERROR(RECOGNIZER_NOT_STARTED);
2154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (hPattern->is_loaded == False)
2164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    SERVICE_ERROR(PATTERN_NOT_LOADED);
2174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  //if (0 && hPattern->setup_sub == NULL && hPattern->setup_whole == NULL)
2184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    //SERVICE_ERROR(PATTERN_NOT_SETUP);
2194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  terminated = 1;
2214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  end_recognition(hRecog->recm);
2224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (terminated && hUtterance->data.gen_utt.do_channorm)
2244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  {
2254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if (!inherit_recognition_statistics(&hUtterance->data, hRecog->recm,
2264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project                                        hUtterance->data.gen_utt.channorm->dim))
2274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project      SERVICE_ERROR(UNEXPECTED_DATA_ERROR); /* TODO: find a suitable error code */
2284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
2294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (terminated) hPattern->recog_terminated = True;
2314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  hRecog->is_running = False;
2324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return (terminated);
2334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  BEG_CATCH_CA_EXCEPT
2354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  END_CATCH_CA_EXCEPT(hRecog)
2364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
237