14a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/*---------------------------------------------------------------------------* 24a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * AcousticModelsImpl.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 214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#ifndef lint 224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#endif /* lint */ 234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "ESR_Session.h" 254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "IntArrayList.h" 264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "LCHAR.h" 274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "passert.h" 284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "plog.h" 294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "pmemory.h" 304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "SR_AcousticModels.h" 314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "SR_AcousticModelsImpl.h" 324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "pstdio.h" 334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "SR_EventLog.h" 344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define MTAG NULL 364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define CHKINTARRAY(rc, list, operation) rc = operation; \ 384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (rc!=ESR_SUCCESS) \ 394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { \ 404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project IntArrayListDestroy(list); \ 414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project list = NULL; \ 424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(ESR_rc2str(rc)); \ 434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; \ 444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/** 504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Initializes acoustic-models properties to default values. 514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Replaces setup_acoustic_parameters() 534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_AcousticModels_ToSession() 554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Acoustic.dimen", 16)); 594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Acoustic.skip", 5)); 604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Acoustic.stay", 5)); 614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Acoustic.whole_skip", 10)); 624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Acoustic.whole_stay", 10)); 634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Acoustic.durscale", 5)); 644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Acoustic.frame_period", 10)); 654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Acoustic.minvar", 1)); 664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Acoustic.maxvar", 64000)); 674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetBoolIfEmpty("CREC.Acoustic.load_all_at_once", ESR_FALSE)); 684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetLCHARIfEmpty("CREC.Acoustic.load_models", L("all"))); 694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/** 754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Initializes pattern properties to default values. 764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Replaces setup_pattern_parameters() 784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_AcousticModels_PatternToSession() 804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Old comment: Remember to keep "ca_pip.h" up to date with these parameters... */ 844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Pattern.dimen", 16)); 864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Pattern.whole_dimen", 0)); 874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Pattern.start", 0)); 884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetBoolIfEmpty("CREC.Pattern.chelt_imelda", ESR_FALSE)); 894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Pattern.vfrlimit", 100)); 904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Pattern.vfrthresh", 0)); 914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetFloatIfEmpty("CREC.Pattern.mix_score_scale", 0.46f)); 924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetFloatIfEmpty("CREC.Pattern.imelda_scale", 16)); 934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetFloatIfEmpty("CREC.Pattern.uni_score_scale", 0.46f)); 944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetFloatIfEmpty("CREC.Pattern.uni_score_offset", 0)); 954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Pattern.forget_speech", 40)); 964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Pattern.forget_background", 100)); 974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Pattern.rel_low", 15)); 984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Pattern.rel_high", 30)); 994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Gap: longest stop gap */ 1014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Pattern.gap_period", 16)); 1024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Click: longest isolated high-amplitude insert in silence */ 1044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Pattern.click_period", 6)); 1054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Breath: longest isolated medium amplitude */ 1074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Pattern.breath_period", 50)); 1084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Pattern.extend_annotation", 0)); 1094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Pattern.min_initial_quiet_frames", 0)); 1104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Pattern.min_annotation_frames", 0)); 1114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Pattern.max_annotation_frames", 800)); 1124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Pattern.min_segment_rel_c0", 800)); 1134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Pattern.delete_leading_segments", 0)); 1144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Pattern.leading_segment_min_frames", 0)); 1154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Pattern.leading_segment_max_frames", 20)); 1164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Pattern.leading_segment_min_silence_gap_frames", 20)); 1174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Pattern.leading_segment_accept_if_not_found", 0)); 1184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#if DO_SUBTRACTED_SEGMENTATION 1204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Pattern.snr_holdoff", 0)); 1214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Pattern.min_acceptable_snr", 0)); 1224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#endif 1234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Pattern.param", 0)); 1254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Pattern.beep_size", 0)); 1264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionSetIntIfEmpty("CREC.Pattern.beep_threshold", 0)); 1274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 1294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 1314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 1324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 1334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/** 1354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Populates legacy pattern parameters from the session. 1364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 1374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Replaces setup_pattern_parameters() 1384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 1394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_AcousticModels_LoadLegacyPatternParameters(CA_PatInputParams* params) 1404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 1414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 1424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project passert(params != NULL); 1444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project params->is_loaded = ESR_FALSE; 1454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Pattern.dimen", ¶ms->dimen)); 1464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Pattern.whole_dimen", ¶ms->whole_dimen)); 1474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Pattern.start", ¶ms->feat_start)); 1484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetFloat("CREC.Pattern.mix_score_scale", ¶ms->mix_score_scale)); 1494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetFloat("CREC.Pattern.imelda_scale", ¶ms->imelda_scale)); 1504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetFloat("CREC.Pattern.uni_score_scale", ¶ms->uni_score_scale)); 1514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetFloat("CREC.Pattern.uni_score_offset", ¶ms->uni_score_offset)); 1524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Pattern.forget_speech", ¶ms->forget_speech)); 1534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Pattern.forget_background", ¶ms->forget_background)); 1544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Pattern.rel_low", ¶ms->rel_low)); 1554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Pattern.rel_high", ¶ms->rel_high)); 1564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Pattern.gap_period", ¶ms->gap_period)); 1574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Pattern.click_period", ¶ms->click_period)); 1584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Pattern.breath_period", ¶ms->breath_period)); 1594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Pattern.extend_annotation", ¶ms->extend_annotation)); 1604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Pattern.min_initial_quiet_frames", ¶ms->min_initial_quiet_frames)); 1614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Pattern.min_annotation_frames", ¶ms->min_annotation_frames)); 1624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Pattern.max_annotation_frames", ¶ms->max_annotation_frames)); 1634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Pattern.min_segment_rel_c0", ¶ms->min_segment_rel_c0)); 1644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Pattern.delete_leading_segments", ¶ms->delete_leading_segments)); 1654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Pattern.leading_segment_min_frames", ¶ms->leading_segment_min_frames)); 1664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Pattern.leading_segment_max_frames", ¶ms->leading_segment_max_frames)); 1674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Pattern.leading_segment_min_silence_gap_frames", ¶ms->leading_segment_min_silence_gap_frames)); 1684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Pattern.leading_segment_accept_if_not_found", ¶ms->leading_segment_accept_if_not_found)); 1694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#if DO_SUBTRACTED_SEGMENTATION 1714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Pattern.snr_holdoff", ¶ms->snr_holdoff)); 1724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Pattern.min_acceptable_snr", ¶ms->min_acceptable_snr)); 1734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#endif 1744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Pattern.param", ¶ms->param)); 1764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Pattern.beep_size", ¶ms->beep_size)); 1774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Pattern.beep_threshold", ¶ms->beep_threshold)); 1784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project params->is_loaded = ESR_TRUE; 1804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 1814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 1834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 1844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 1854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/** 1874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Generate legacy AcousticModels parameter structure from ESR_Session. 1884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 1894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param params Resulting structure 1904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 1914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_AcousticModels_GetLegacyParameters(CA_AcoustInputParams* params) 1924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 1934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 1944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project size_t maxLabel = MAX_LABEL; 1954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project passert(params != NULL); 1974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project params->is_loaded = ESR_FALSE; 1984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Acoustic.dimen", ¶ms->dimen)); 1994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Acoustic.skip", ¶ms->skip_penalty)); 2004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Acoustic.stay", ¶ms->stay_penalty)); 2014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Acoustic.whole_skip", ¶ms->whole_skip_penalty)); 2024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Acoustic.whole_stay", ¶ms->whole_stay_penalty)); 2034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Acoustic.durscale", ¶ms->dur_scale)); 2044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Acoustic.frame_period", ¶ms->frame_period)); 2054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Acoustic.minvar", ¶ms->min_var)); 2064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetInt("CREC.Acoustic.maxvar", ¶ms->max_var)); 2074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetBool("CREC.Acoustic.load_all_at_once", ¶ms->load_all)); 2084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetLCHAR("CREC.Acoustic.load_models", params->load_models, &maxLabel)); 2094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project params->is_loaded = ESR_TRUE; 2104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 2114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 2124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 2134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 2144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectint LogArbdataVersion(unsigned int ver) 2164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 2174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 2184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_EventLog* eventLog; 2194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project size_t osi_log_level = 0; 2204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_BOOL exists = ESR_FALSE; 2214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionExists(&exists)); 2234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (exists) 2244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 2254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = ESR_SessionGetProperty(L("eventlog"), (void **)&eventLog, TYPES_SR_EVENTLOG); 2264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if ((rc != ESR_NO_MATCH_ERROR) && (rc != ESR_SUCCESS)) 2274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 2284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(ESR_rc2str(rc)); 2294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 2304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 2314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (eventLog) 2324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 2334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = ESR_SessionGetSize_t(L("SREC.Recognizer.osi_log_level"), &osi_log_level); 2344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if ((rc != ESR_NO_MATCH_ERROR) && (rc != ESR_SUCCESS)) 2354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 2364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(ESR_rc2str(rc)); 2374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 2384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 2394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (osi_log_level > 0) 2404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 2414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = SR_EventLogTokenSize_t(eventLog, L("VER"), ver); 2424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = SR_EventLogEvent(eventLog, L("ESRarbd")); 2434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 2444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 2454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 2464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 2474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return 0; 2484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 2494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_AcousticModelsLoad(const LCHAR* filename, SR_AcousticModels** self) 2534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 2544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int use_image; 2554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR arbfile[P_PATH_MAX]; 2564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_AcoustInputParams* acousticParams; 2574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_Acoustic* acoustic; 2584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR modelFilename[P_PATH_MAX]; 2594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_AcousticModelsImpl* impl; 2604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project size_t len; 2614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 2624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl = NEW(SR_AcousticModelsImpl, MTAG); 2644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl == NULL) 2654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 2664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(L("ESR_OUT_OF_MEMORY")); 2674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_OUT_OF_MEMORY; 2684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 2694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->Interface.destroy = &SR_AcousticModels_Destroy; 2704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->Interface.save = &SR_AcousticModels_Save; 2714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->Interface.setParameter = &SR_AcousticModels_SetParameter; 2724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->Interface.getParameter = &SR_AcousticModels_GetParameter; 2734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->Interface.getCount = &SR_AcousticModels_GetCount; 2744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->Interface.getID = &SR_AcousticModels_GetID; 2754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->Interface.setID = &SR_AcousticModels_SetID; 2764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->Interface.getArbdata = &SR_AcousticModels_GetArbdata; 2774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->setupPattern = &SR_AcousticModels_SetupPattern; 2784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->unsetupPattern = &SR_AcousticModels_UnsetupPattern; 2794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->getLegacyParameters = &SR_AcousticModels_GetLegacyParameters; 2804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->parameters = NULL; 2814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->pattern = NULL; 2824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->acoustic = NULL; 2834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->arbdata = NULL; 2844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->contents = NULL; 2854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->size = 0; 2864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project acousticParams = NULL; 2874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project acoustic = NULL; 2884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = SR_AcousticModels_PatternToSession(); 2904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (rc != ESR_SUCCESS) 2914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 2924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(ESR_rc2str(rc)); 2934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 2944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 2954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = SR_AcousticModels_ToSession(); 2964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (rc != ESR_SUCCESS) 2974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 2984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(ESR_rc2str(rc)); 2994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 3004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 3014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = ArrayListCreate(&impl->acoustic); 3024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (rc != ESR_SUCCESS) 3034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 3044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(ESR_rc2str(rc)); 3054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 3064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 3074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project acousticParams = CA_AllocateAcousticParameters(); 3094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (acousticParams == NULL) 3104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 3114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = ESR_OUT_OF_MEMORY; 3124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(ESR_rc2str(rc)); 3134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 3144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 3154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = impl->getLegacyParameters(acousticParams); 3164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (rc != ESR_SUCCESS) 3174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 3184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(ESR_rc2str(rc)); 3194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 3204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 3214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = ESR_SessionGetInt(L("cmdline.use_image"), &use_image); 3234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (rc != ESR_SUCCESS) 3244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 3254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(ESR_rc2str(rc)); 3264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 3274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 3284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project while (ESR_TRUE) 3304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 3314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int i; 3324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project // skip space to next relative pathname 3334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project while (LISSPACE(*filename)) filename++; 3344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (*filename == L('\0')) break; 3354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project // copy the relative pathname 3364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (i = 0; *filename != L('\0') && !LISSPACE(*filename); i++) 3374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 3384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project modelFilename[i] = *filename++; 3394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 3404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project modelFilename[i] = L('\0'); 3414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (LSTRLEN(modelFilename) == 0 || modelFilename[0] == '#') 3434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project continue; 3444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = lstrtrim(modelFilename); 3454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (rc != ESR_SUCCESS) 3464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 3474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(ESR_rc2str(rc)); 3484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 3494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 3504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project len = P_PATH_MAX; 3524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionPrefixWithBaseDirectory(modelFilename, &len)); 3534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project acoustic = CA_AllocateAcoustic(); 3544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (acoustic == NULL) 3554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 3564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = ESR_OUT_OF_MEMORY; 3574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(ESR_rc2str(rc)); 3584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 3594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 3604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (use_image == 1) 3614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 3624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = ESR_INVALID_STATE; 3634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(ESR_rc2str(rc)); 3644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 3654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 3664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else if (use_image == 2) 3674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 3684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (!CA_LoadAcousticSub(acoustic, modelFilename, 0)) 3694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 3704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = ESR_INVALID_STATE; 3714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(ESR_rc2str(rc)); 3724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 3734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 3744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 3754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else 3764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 3774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* TODO: Is this being used? */ 3784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (!CA_LoadAcousticSub(acoustic, modelFilename, acousticParams)) 3794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 3804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = ESR_INVALID_STATE; 3814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(ESR_rc2str(rc)); 3824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 3834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 3844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 3854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = ArrayListAdd(impl->acoustic, acoustic); 3864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (rc != ESR_SUCCESS) 3874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 3884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(ESR_rc2str(rc)); 3894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 3904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 3914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 3934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project len = P_PATH_MAX; 3944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = ESR_SessionGetLCHAR(L("cmdline.arbfile"), (LCHAR*) & arbfile, &len); 3954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (rc != ESR_SUCCESS) 3964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 3974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(ESR_rc2str(rc)); 3984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 3994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 4004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project len = P_PATH_MAX; 4014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionPrefixWithBaseDirectory(arbfile, &len)); 4024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->arbdata = CA_LoadArbdata(arbfile); 4034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->arbdata == NULL) 4044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 4054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = ESR_OUT_OF_MEMORY; 4064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 4074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 4084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project len = CA_ArbdataGetModelVersionID(impl->arbdata); 4094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LogArbdataVersion(len); 4104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 4114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_FreeAcousticParameters(acousticParams); 4124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *self = (SR_AcousticModels*) impl; 4134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 4144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 4154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 4164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (acousticParams != NULL) 4174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_FreeAcousticParameters(acousticParams); 4184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->Interface.destroy(&impl->Interface); 4194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 4204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 4214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 4224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_AcousticModels_Destroy(SR_AcousticModels* self) 4234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 4244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_AcousticModelsImpl* impl = (SR_AcousticModelsImpl*) self; 4254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_Acoustic* acoustic; 4264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 4274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project size_t size, i; 4284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 4294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->pattern != NULL) 4304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 4314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, impl->acoustic->getSize(impl->acoustic, &size)); 4324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (i = 0; i < size; ++i) 4334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 4344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, impl->acoustic->get(impl->acoustic, i, (void **)&acoustic)); 4354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_ClearPatternForAcoustic(impl->pattern, acoustic); 4364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 4374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_UnloadPattern(impl->pattern); 4384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_FreePattern(impl->pattern); 4394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->pattern = NULL; 4404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 4414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 4424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->acoustic != NULL) 4434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 4444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, impl->acoustic->getSize(impl->acoustic, &size)); 4454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (i = 0; i < size; ++i) 4464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 4474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, impl->acoustic->get(impl->acoustic, 0, (void **)&acoustic)); 4484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, impl->acoustic->removeAtIndex(impl->acoustic, 0)); 4494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 4504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Free acoustic models */ 4514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_UnloadAcoustic(acoustic); 4524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_FreeAcoustic(acoustic); 4534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 4544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 4554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, impl->acoustic->destroy(impl->acoustic)); 4564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->acoustic = NULL; 4574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 4584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 4594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->arbdata != NULL) 4604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 4614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_FreeArbdata(impl->arbdata); 4624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->arbdata = NULL; 4634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 4644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 4654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project FREE(impl); 4664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 4674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 4684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 4694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 4704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 4714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_AcousticModels_Save(SR_AcousticModels* self, const LCHAR* filename) 4724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 4734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /*SR_AcousticModelsImpl* impl = (SR_AcousticModelsImpl*) self;*/ 4744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 4754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* CA_WriteAcousticImage(impl->acoustic, filename, 0); */ 4764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 4774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 4784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 4794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_AcousticModels_SetParameter(SR_AcousticModels* self, const LCHAR* key, LCHAR* value) 4804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 4814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_AcousticModelsImpl* impl = (SR_AcousticModelsImpl*) self; 4824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR* temp; 4834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 4844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 4854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = HashMapGet(impl->parameters, key, (void **)&temp); 4864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (rc == ESR_SUCCESS) 4874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 4884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Key already exists, remove old value if necessary */ 4894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (LSTRCMP(temp, value) == 0) 4904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 4914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, HashMapRemove(impl->parameters, key)); 4924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project FREE(temp); 4934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 4944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else if (rc != ESR_NO_MATCH_ERROR) 4954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 4964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(ESR_rc2str(rc)); 4974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 4984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 4994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 5004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Allocate and put new key */ 5014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project temp = MALLOC(sizeof(LCHAR) * (LSTRLEN(value) + 1), MTAG); 5024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (temp == NULL) 5034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 5044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = ESR_OUT_OF_MEMORY; 5054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(ESR_rc2str(rc)); 5064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 5074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 5084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, impl->parameters->put(impl->parameters, key, temp)); 5094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 5104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 5114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project FREE(temp); 5124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 5134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 5144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 5154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_AcousticModels_GetParameter(SR_AcousticModels* self, const LCHAR* key, LCHAR* value, size_t* len) 5164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 5174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_AcousticModelsImpl* impl = (SR_AcousticModelsImpl*) self; 5184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR* temp; 5194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 5204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 5214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = HashMapGet(impl->parameters, key, (void **)&temp); 5224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (rc == ESR_NO_MATCH_ERROR) 5234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetLCHAR(key, value, len)); 5244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (rc != ESR_SUCCESS) 5254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 5264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(ESR_rc2str(rc)); 5274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 5284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 5294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (LSTRLEN(temp) + 1 > *len) 5304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 5314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *len = LSTRLEN(temp) + 1; 5324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(L("ESR_BUFFER_OVERFLOW")); 5334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_BUFFER_OVERFLOW; 5344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 5354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *len = LSTRLEN(temp) + 1; 5364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LSTRCPY(value, temp); 5374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 5384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 5394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 5404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 5414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 5424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_AcousticModels_GetCount(SR_AcousticModels* self, size_t* size) 5434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 5444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_AcousticModelsImpl* impl = (SR_AcousticModelsImpl*) self; 5454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 5464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 5474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ArrayListGetSize(impl->acoustic, size)); 5484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 5494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 5504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 5514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 5524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 5534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_AcousticModels_GetID(SR_AcousticModels* self, size_t index, 5544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_AcousticModelID* id, size_t* size) 5554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 5564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* TODO: complete */ 5574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 5584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 5594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 5604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_AcousticModels_SetID(SR_AcousticModels* self, size_t index, 5614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_AcousticModelID* id) 5624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 5634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* TODO: complete */ 5644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 5654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 5664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 5674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectvoid* SR_AcousticModels_GetArbdata(SR_AcousticModels* self) 5684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 5694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_AcousticModelsImpl* impl = (SR_AcousticModelsImpl*)self; 5704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return impl? (void*)impl->arbdata : NULL; 5714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 5724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 5734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/** 5744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * When AcousticModels are associated with a Recognizer, they initialize their 5754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Pattern objects using that Recognizer. 5764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 5774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param self SR_AcousticModels handle 5784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param recognizer The recognizer 5794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 5804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_AcousticModels_SetupPattern(SR_AcousticModels* self, 5814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_Recognizer* recognizer) 5824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 5834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_PatInputParams* patternParams = NULL; 5844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR mulname[P_PATH_MAX]; 5854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR ldaname[P_PATH_MAX]; 5864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_RecognizerImpl* recog; 5874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_AcousticModelsImpl* impl = (SR_AcousticModelsImpl*) self; 5884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_Acoustic* acoustic; 5894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project size_t i, size, len; 5904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int dimen; 5914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 5924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_BOOL isPatternLoaded = ESR_FALSE; 5934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 5944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (recognizer == NULL) 5954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 5964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(L("ESR_INVALID_ARGUMENT")); 5974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_INVALID_ARGUMENT; 5984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 5994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project recog = (SR_RecognizerImpl*) recognizer; 6004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 6014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->pattern = CA_AllocatePattern(); 6024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->pattern == NULL) 6034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 6044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = ESR_OUT_OF_MEMORY; 6054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(ESR_rc2str(rc)); 6064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 6074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 6084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project patternParams = CA_AllocatePatternParameters(); 6094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (patternParams == NULL) 6104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 6114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = ESR_OUT_OF_MEMORY; 6124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(ESR_rc2str(rc)); 6134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 6144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 6154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 6164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_AcousticModels_LoadLegacyPatternParameters(patternParams)); 6174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project dimen = CA_GetFrontendUtteranceDimension(recog->frontend); 6184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 6194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LSTRCPY(mulname, L("")); 6204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 6214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project len = P_PATH_MAX; 6224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionGetLCHAR(L("cmdline.lda"), (LCHAR*) &ldaname, &len)); 6234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project len = P_PATH_MAX; 6244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, ESR_SessionPrefixWithBaseDirectory(ldaname, &len)); 6254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 6264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_LoadPattern(impl->pattern, patternParams, dimen, mulname, ldaname); 6274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project isPatternLoaded = ESR_TRUE; 6284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, impl->acoustic->getSize(impl->acoustic, &size)); 6294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (i = 0; i < size; ++i) 6304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 6314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, impl->acoustic->get(impl->acoustic, i, (void **)&acoustic)); 6324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_SetupPatternForAcoustic(impl->pattern, acoustic); 6334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 6344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_FreePatternParameters(patternParams); 6354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 6364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 6374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (impl->pattern != NULL) 6384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 6394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (isPatternLoaded == ESR_TRUE) 6404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_UnloadPattern(impl->pattern); 6414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_FreePattern(impl->pattern); 6424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 6434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (patternParams != NULL) 6444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_FreePatternParameters(patternParams); 6454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 6464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 6474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 6484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/** 6494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * When AcousticModels are deassociated with a Recognizer, they deinitialize their 6504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Pattern objects. 6514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 6524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param self SR_AcousticModels handle 6534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 6544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_AcousticModels_UnsetupPattern(SR_AcousticModels* self) 6554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 6564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_AcousticModelsImpl* impl = (SR_AcousticModelsImpl*) self; 6574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_Acoustic* acoustic; 6584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project size_t i, size; 6594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 6604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 6614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, impl->acoustic->getSize(impl->acoustic, &size)); 6624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (i = 0; i < size; ++i) 6634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 6644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, impl->acoustic->get(impl->acoustic, i, (void **)&acoustic)); 6654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_ClearPatternForAcoustic(impl->pattern, acoustic); 6664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 6674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_UnloadPattern(impl->pattern); 6684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_FreePattern(impl->pattern); 6694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project impl->pattern = NULL; 6704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_SUCCESS; 6714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 6724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 6734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 674