]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - tiesr/tiesr.git/commitdiff
[#1317] allocate arrays for Sym2PosType structure dynamically from user memory pool.
authorlnetsch <lnetsch@mycompany.com>
Mon, 28 Feb 2011 22:38:32 +0000 (22:38 +0000)
committerlnetsch <lnetsch@mycompany.com>
Mon, 28 Feb 2011 22:38:32 +0000 (22:38 +0000)
git-svn-id: https://gforge.ti.com/svn/tiesr/trunk@36 469fd053-429d-4955-9e4c-93c0d7a8ff27

TIesrEngine/src/gmhmm.h
TIesrEngine/src/search.cpp
TIesrEngine/src/siinit.cpp

index ac5830e4cde4da97e2291d900dc67dfc57061c32..5b57db785ef6d003c73f97b54bf91a3145158ea1 100644 (file)
@@ -154,13 +154,12 @@ typedef struct {             /* peak usage statistics */
   PosType      time;         /* time cell (backtrace) statistics */
 } EvalStat;
 
-#define MAX_NUM_SYMS 8000
-
 typedef struct {
   unsigned short max_nbr_syms; /* maximum number of symbols */
   short nbr_syms; /* number of accessed symbols */
-  short sym2pos[MAX_NUM_SYMS];  // [15]: 1 : previous time ; 0 : current time
-  unsigned short syms[MAX_NUM_SYMS]; 
+  /* [15]: 1 : previous time ; 0 : current time */
+  short *sym2pos;
+  unsigned short *syms;
 } Sym2PosType; 
 
 typedef struct {
index 9696613c4ef388900585736ac60cdf8b7d821193..e1d9c3dfc445944930095664459056269e3bdb68 100755 (executable)
@@ -123,7 +123,6 @@ TIESRENGINECOREAPI_API void set_search_space
 #endif
 
   gv->sym2pos_map.nbr_syms = 0;
-  gv->sym2pos_map.max_nbr_syms = gv->trans->n_sym * NSYM + 1; 
   for (k=gv->sym2pos_map.max_nbr_syms-1;k>=0;k--)
     gv->sym2pos_map.sym2pos[k] = -1; 
 
@@ -261,7 +260,7 @@ allocate_eval_cell(EvalIdx *eval_idx, unsigned short sym, short n_state, short c
   /* have the symbol lists */
   /* get the sym2pos mapping */
   mapidx = gv->sym2pos_map.nbr_syms;
-  if ((mapidx < gv->sym2pos_map.max_nbr_syms) && (mapidx >= 0) && (sym < gv->sym2pos_map.max_nbr_syms) && (mapidx < MAX_NUM_SYMS) && (sym < MAX_NUM_SYMS)){
+  if ((mapidx < gv->sym2pos_map.max_nbr_syms) && (mapidx >= 0) && (sym < gv->sym2pos_map.max_nbr_syms) ){
     gv->sym2pos_map.syms[mapidx] = sym; 
     gv->sym2pos_map.nbr_syms++;
     gv->sym2pos_map.sym2pos[sym] = eval_idx->cur_state; 
@@ -321,7 +320,7 @@ find_state_cell(EvalIdx *eval_idx, unsigned short idx, unsigned short sym, unsig
   short i_pos = -1; 
   StateCell *pstate = NULL; 
 
-  if (sym < gv->sym2pos_map.max_nbr_syms && sym < MAX_NUM_SYMS)
+  if (sym < gv->sym2pos_map.max_nbr_syms )
     i_pos = gv->sym2pos_map.sym2pos[sym]; 
   if (i_pos >= 0 )
     pstate = STATE_CELL(gv->statecell_base, i_pos, n_state, idx, gv->max_state_cell);
index f4b429e9eded88557fae9d66791cf1efa0823e06..af8e3addbab71485bbb8c3ca4ef2622f3401793d 100755 (executable)
@@ -248,9 +248,11 @@ static TIesrEngineStatusType AllocateTIesrMemory( short* memoryPool,
      if( curt_mem & 0x1 )
        curt_mem++;
 
-     strcpy( gv->chpr_Model_Dir, ptr_model_file_path );
-
      stt_mem += curt_mem;
+     if( stt_mem >= gv->total_words )
+        return eTIesrEngineSearchMemorySize;
+
+     strcpy( gv->chpr_Model_Dir, ptr_model_file_path );
   }
   else
   {
@@ -280,21 +282,30 @@ static TIesrEngineStatusType AllocateTIesrMemory( short* memoryPool,
   stt_mem += curt_mem;
   display_size("SBC structure memory", curt_mem, stt_mem,  gv->total_words);
 
+  if( stt_mem >= gv->total_words )
+     return eTIesrEngineSearchMemorySize;
+
   /* Construction initialization */
   sbc_open( gv->sbcState );
 
 #endif
 
   gv->pConf = NULL;
+
 #ifdef USE_CONFIDENCE
   gv->pConf = memoryPool + stt_mem; 
   /* size for the confidence measures */
   curt_mem = ( sizeof ( ConfType ) + 1) >> 1; 
-  if (cm_open( (ConfType*)gv->pConf, gv) == eTIesrEngineCMMemorySize) 
-    return eTIesrEngineCMMemorySize; 
+  stt_mem += curt_mem;
 
-  stt_mem += curt_mem; 
   display_size("Confidence measure data structure memory", curt_mem, stt_mem,  gv->total_words);
+
+  if( stt_mem >= gv->total_words )
+     return eTIesrEngineSearchMemorySize;
+
+  if( cm_open( (ConfType*) gv->pConf, gv ) == eTIesrEngineCMMemorySize )
+     return eTIesrEngineCMMemorySize;
+
 #endif
 
   /* noise supression structure, if used */
@@ -306,6 +317,10 @@ static TIesrEngineStatusType AllocateTIesrMemory( short* memoryPool,
   /* size of noise spectral subtraction state structure */
   curt_mem = ( sizeof( NssType ) + 1 ) >> 1;
   stt_mem += curt_mem;
+
+  if( stt_mem >= gv->total_words )
+     return eTIesrEngineSearchMemorySize;
+
   display_size("Noise supression structure memory", curt_mem, stt_mem,  gv->total_words);
 
   /* Construction initialization */
@@ -320,16 +335,32 @@ static TIesrEngineStatusType AllocateTIesrMemory( short* memoryPool,
   gv->offline_vq = memoryPool + stt_mem ;
   /* size of cluster-dependent JAC structure and data */
   curt_mem = ( sizeof( OFFLINE_VQ_HMM_type ) + 10 ) >> 1 ;
+  stt_mem += curt_mem;
+
+  if( stt_mem >= gv->total_words )
+     return eTIesrEngineSearchMemorySize;
+
+  display_size("Cluster-dependent JAC data structure memory", curt_mem, stt_mem,  gv->total_words);
+
   /* Initialize vq cluster info and variables for rapid JAC calculations */
   if (rj_open( u_rj_perc_core,  u_rj_perc_inte , gv) == eTIesrEngineVQHMMMemorySize)
     return eTIesrEngineVQHMMMemorySize;
-  stt_mem += curt_mem;
-  display_size("Cluster-dependent JAC data structure memory", curt_mem, stt_mem,  gv->total_words);
+
 #endif
 
-  /* check space is enough for sym2pos mapping */
-  if (gv->trans->n_sym * NSYM >= MAX_NUM_SYMS)
-    return eTIesrEngineSym2PosMapSize;
+  /* Allocate for sym2pos map arrays */
+  gv->sym2pos_map.syms = (unsigned short *)(memoryPool + stt_mem);
+  curt_mem = gv->trans->n_sym * gv->trans->n_set + 1;
+  stt_mem += curt_mem;
+  if( stt_mem >= gv->total_words )
+     return eTIesrEngineSym2PosMapSize;
+
+  gv->sym2pos_map.sym2pos = memoryPool + stt_mem;
+  stt_mem += curt_mem;
+  if( stt_mem >= gv->total_words )
+     return eTIesrEngineSym2PosMapSize;
+
+  gv->sym2pos_map.max_nbr_syms = curt_mem;
 
   /* Allocate space to hold HMM codes and start/stop frames mapped to each
    HMM in the best recognition result. Assume no more than MAX_NBR_SEGS
@@ -339,7 +370,10 @@ static TIesrEngineStatusType AllocateTIesrMemory( short* memoryPool,
   gv->hmm_code = (ushort *)( memoryPool + stt_mem );
   curt_mem = MAX_NBR_SEGS * 3;
   stt_mem += curt_mem;
+
   display_size("segmental information",curt_mem, stt_mem, gv->total_words);
+  if( stt_mem >= gv->total_words )
+     return eTIesrEngineSearchMemorySize;
 
   gv->stt =  gv->hmm_code +  MAX_NBR_SEGS;
   gv->stp =  gv->hmm_code +  MAX_NBR_SEGS * 2;
@@ -350,6 +384,9 @@ static TIesrEngineStatusType AllocateTIesrMemory( short* memoryPool,
   stt_mem += curt_mem;
   display_size("answer word list memory",curt_mem, stt_mem, gv->total_words);
 
+  if( stt_mem >= gv->total_words )
+     return eTIesrEngineSearchMemorySize;
+
   gv->max_frame_nbr = max_frm; /* modifier */
 
 
@@ -366,7 +403,8 @@ static TIesrEngineStatusType AllocateTIesrMemory( short* memoryPool,
   curt_mem = mfcc_memory_size;
   stt_mem += curt_mem;
   display_size("MFCC memory",curt_mem, stt_mem, gv->total_words);
-
+  if( stt_mem >= gv->total_words )
+     return eTIesrEngineSearchMemorySize;
 
   /* Remainder of memory pool used for search. */
   total_words = gv->total_words - stt_mem;