diff options
author | Benny Prijono <bennylp@teluu.com> | 2009-04-18 14:29:28 +0000 |
---|---|---|
committer | Benny Prijono <bennylp@teluu.com> | 2009-04-18 14:29:28 +0000 |
commit | 345cd27b4a25e0c326ed1efc6f7f8372bde4ed6b (patch) | |
tree | 23f45ad5fcde6553d7d0dcfa5065b22c94edc790 /third_party/g7221/common/stl-files/count.c | |
parent | a1af7e95f02cb3744d53b17671ce52cfb5edc7f8 (diff) |
More ticket #774: optimization for siren7/siren14 codecs
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@2616 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'third_party/g7221/common/stl-files/count.c')
-rw-r--r-- | third_party/g7221/common/stl-files/count.c | 303 |
1 files changed, 0 insertions, 303 deletions
diff --git a/third_party/g7221/common/stl-files/count.c b/third_party/g7221/common/stl-files/count.c deleted file mode 100644 index 17ce4b32..00000000 --- a/third_party/g7221/common/stl-files/count.c +++ /dev/null @@ -1,303 +0,0 @@ -/* - *************************************************************************** - * - * This file contains functions for the automatic complexity calculation - * $Id $ - *************************************************************************** -*/ - -#include <stdlib.h> -#include <stdio.h> -#include <string.h> -#include "typedef.h" -#include "count.h" - -/* Global counter variable for calculation of complexity weight */ - -BASIC_OP multiCounter[MAXCOUNTERS]; -int currCounter=0; /* Zero equals global counter */ - -/*BASIC_OP counter;*/ -const BASIC_OP op_weight = -{ - /* G.729 & G.723.1 common operators */ - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 3, 3, 3, 4, 15, 18, 30, 1, 2, 1, 2, 2, - /* G.723.1 exclusives */ - 6, 1, 1, - /* shiftless 32-bit operators */ - 1, 1, 1, - /* G.722.1 exclusives */ - 1, 1 -}; - -/* function prototypes */ -Word32 TotalWeightedOperation (void); -Word32 DeltaWeightedOperation (void); - -/* local variable */ -#if WMOPS - -/* Counters for separating counting for different objects */ -static int maxCounter=0; -static char* objectName[MAXCOUNTERS+1]; -static Word16 fwc_corr[MAXCOUNTERS+1]; - -#define NbFuncMax 1024 - -static Word16 funcid[MAXCOUNTERS], nbframe[MAXCOUNTERS]; -static Word32 glob_wc[MAXCOUNTERS], wc[MAXCOUNTERS][NbFuncMax]; -static float total_wmops[MAXCOUNTERS]; - -static Word32 LastWOper[MAXCOUNTERS]; - -static char* my_strdup(const char *s) -/* - * duplicates UNIX function strdup() which is not ANSI standard: - * -- malloc() memory area big enough to hold the string s - * -- copy string into new area - * -- return pointer to new area - * - * returns NULL if either s==NULL or malloc() fails - */ -{ - char *dup; - - if (s == NULL) - return NULL; - - /* allocate memory for copy of ID string (including string terminator) */ - /* NOTE: the ID strings will never be deallocated because there is no - way to "destroy" a counter that is not longer needed */ - if ((dup = (char *) malloc(strlen(s)+1)) == NULL) - return NULL; - - return strcpy(dup, s); -} - -#endif - -int getCounterId(char *objectNameArg) -{ -#if WMOPS - if(maxCounter>=MAXCOUNTERS-1) return 0; - objectName[++maxCounter]=my_strdup(objectNameArg); - return maxCounter; -#else - return 0; /* Dummy */ -#endif -} - -void setCounter(int counterId) -{ -#if WMOPS - if(counterId>maxCounter || counterId<0) - { - currCounter=0; - return; - } - currCounter=counterId; -#endif -} - -#if WMOPS -static Word32 WMOPS_frameStat() -/* calculate the WMOPS seen so far and update the global - per-frame maximum (glob_wc) - */ -{ - Word32 tot; - - tot = TotalWeightedOperation (); - if (tot > glob_wc[currCounter]) - glob_wc[currCounter] = tot; - - /* check if fwc() was forgotten at end of last frame */ - if (tot > LastWOper[currCounter]) { - if (!fwc_corr[currCounter]) { - fprintf(stderr, - "count: operations counted after last fwc() for '%s'; " - "-> fwc() called\n", - objectName[currCounter]?objectName[currCounter]:""); - } - fwc(); - } - - return tot; -} - -static void WMOPS_clearMultiCounter() -{ - Word16 i; - - Word32 *ptr = (Word32 *) &multiCounter[currCounter]; - for (i = 0; i < (sizeof (multiCounter[currCounter])/ sizeof (Word32)); i++) - { - *ptr++ = 0; - } -} -#endif - -Word32 TotalWeightedOperation () -{ -#if WMOPS - Word16 i; - Word32 tot, *ptr, *ptr2; - - tot = 0; - ptr = (Word32 *) &multiCounter[currCounter]; - ptr2 = (Word32 *) &op_weight; - for (i = 0; i < (sizeof (multiCounter[currCounter])/ sizeof (Word32)); i++) - { - tot += ((*ptr++) * (*ptr2++)); - } - - return ((Word32) tot); -#else - return 0; /* Dummy */ -#endif -} - -Word32 DeltaWeightedOperation () -{ -#if WMOPS - Word32 NewWOper, delta; - - NewWOper = TotalWeightedOperation (); - delta = NewWOper - LastWOper[currCounter]; - LastWOper[currCounter] = NewWOper; - return (delta); -#else - return 0; /* Dummy */ -#endif -} - -void move16 (void) -{ -#if WMOPS - multiCounter[currCounter].DataMove16++; -#endif -} - -void move32 (void) -{ -#if WMOPS - multiCounter[currCounter].DataMove32++; -#endif -} - -void test (void) -{ -#if WMOPS - multiCounter[currCounter].Test++; -#endif -} - -void logic16 (void) -{ -#if WMOPS - multiCounter[currCounter].Logic16++; -#endif -} - -void logic32 (void) -{ -#if WMOPS - multiCounter[currCounter].Logic32++; -#endif -} - -void Init_WMOPS_counter (void) -{ -#if WMOPS - Word16 i; - - /* reset function weight operation counter variable */ - - for (i = 0; i < NbFuncMax; i++) - wc[currCounter][i] = (Word32) 0; - glob_wc[currCounter] = 0; - nbframe[currCounter] = 0; - total_wmops[currCounter] = 0.0; - - /* initially clear all counters */ - WMOPS_clearMultiCounter(); - LastWOper[currCounter] = 0; - funcid[currCounter] = 0; -#endif -} - - -void Reset_WMOPS_counter (void) -{ -#if WMOPS - Word32 tot = WMOPS_frameStat(); - - /* increase the frame counter --> a frame is counted WHEN IT BEGINS */ - nbframe[currCounter]++; - /* add wmops used in last frame to count, then reset counter */ - /* (in first frame, this is a no-op */ - total_wmops[currCounter] += ((float) tot) * 0.00005; - - /* clear counter before new frame starts */ - WMOPS_clearMultiCounter(); - LastWOper[currCounter] = 0; - funcid[currCounter] = 0; /* new frame, set function id to zero */ -#endif -} - -Word32 fwc (void) /* function worst case */ -{ -#if WMOPS - Word32 tot; - - tot = DeltaWeightedOperation (); - if (tot > wc[currCounter][funcid[currCounter]]) - wc[currCounter][funcid[currCounter]] = tot; - - funcid[currCounter]++; - - return (tot); -#else - return 0; /* Dummy */ -#endif -} - -void WMOPS_output (Word16 dtx_mode) -{ -#if WMOPS - Word16 i; - Word32 tot, tot_wm, tot_wc; - - /* get operations since last reset (or init), - but do not update the counters (except the glob_wc[] maximum) - so output CAN be called in each frame without problems. - The frame counter is NOT updated! - */ - tot = WMOPS_frameStat(); - tot_wm = total_wmops[currCounter] + ((float) tot) * 0.00005; - - fprintf (stdout, "%10s:WMOPS=%.3f", - objectName[currCounter]?objectName[currCounter]:"", - ((float) tot) * 0.00005); - - if (nbframe[currCounter] != 0) - fprintf (stdout, " Average=%.3f", - tot_wm / (float) nbframe[currCounter]); - - fprintf (stdout, " WorstCase=%.3f", - ((float) glob_wc[currCounter]) * 0.00005); - - /* Worst worst case printed only when not in DTX mode */ - if (dtx_mode == 0) - { - tot_wc = 0L; - for (i = 0; i < funcid[currCounter]; i++) - tot_wc += wc[currCounter][i]; - fprintf (stdout, " WorstWC=%.3f", ((float) tot_wc) * 0.00005); - } - fprintf (stdout, " (%d frames)\n", nbframe[currCounter]); - -#endif -} |