⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 count.c

📁 最新的ITU-T的宽带语音编解码标准G.729.1,是对原先的G.729的最好的调整.码流输出速率可以进行自适应调整.满足未来通信要求.希望对大家有所帮助.
💻 C
📖 第 1 页 / 共 2 页
字号:
/*  ===========================================================================   File: COUNT.C                                         v.2.1 - March 2006  ===========================================================================            ITU-T   STL   BASIC   OPERATORS            COMPLEXITY EVALUATION FUNCTIONS   History:   15 Nov 04   v2.0     L_mls() weight of 5.						div_l() weight of 32.						i_mult() weight of 3.   03 Nov 04   v2.0     Incorporation of new 32-bit / 40-bit / control                        operators for the ITU-T Standard Tool Library as                         described in Geneva, 20-30 January 2004 WP 3/16 Q10/16                        TD 11 document and subsequent discussions on the                        wp3audio@yahoogroups.com email reflector.                        norm_s()      weight reduced from 15 to 1.                        norm_l()      weight reduced from 30 to 1.                        L_abs()       weight reduced from  2 to 1.                        L_add()       weight reduced from  2 to 1.                        L_negate()    weight reduced from  2 to 1.                        L_shl()       weight reduced from  2 to 1.                        L_shr()       weight reduced from  2 to 1.                        L_sub()       weight reduced from  2 to 1.                        mac_r()       weight reduced from  2 to 1.                        msu_r()       weight reduced from  2 to 1.                        mult_r()      weight reduced from  2 to 1.                        L_deposit_h() weight reduced from  2 to 1.                        L_deposit_l() weight reduced from  2 to 1.   March 06    v2.1     Changed to improve portability.  ============================================================================*//***************************************************************************** * * This file contains functions for the automatic complexity calculation * *****************************************************************************/#include <stdlib.h> #include <stdio.h>#include <string.h> #include "stl.h"#ifdef WMOPS/* Global counter variable for calculation of complexity weight */BASIC_OP multiCounter[MAXCOUNTERS];int currCounter=0; /* Zero equals global counter */#endif /* ifdef WMOPS */#ifdef WMOPS/* * Below list is used for displaying the code profiling information in * the file which name is defined by CODE_PROFILE_FILENAME. * For further details see generic_WMOPS_output() function. * Attention, the ordering in this table must be kept in synchronisation * with the structure definition BASIC_OP. */char* BasicOperationList[] ={   "add",           "sub",             "abs_s",         "shl",             "shr",   "extract_h",     "extract_l",       "mult",          "L_mult",          "negate",   "round",         "L_mac",           "L_msu",         "L_macNs",         "L_msuNs",   "L_add",         "L_sub",           "L_add_c",       "L_sub_c",         "L_negate",   "L_shl",         "L_shr",           "mult_r",        "shr_r",           "mac_r",   "msu_r",         "L_deposit_h",     "L_deposit_l",   "L_shr_r",         "L_abs",   "L_sat",         "norm_s",          "div_s",         "norm_l",          "move16",   "move32",        "Logic16",         "Logic32",       "Test",            "s_max",   "s_min",         "L_max",           "L_min",         "L40_max",         "L40_min",   "shl_r",         "L_shl_r",         "L40_shr_r",     "L40_shl_r",       "norm_L40",   "L40_shl",       "L40_shr",         "L40_negate",    "L40_add",         "L40_sub",   "L40_abs",       "L40_mult",        "L40_mac",       "mac_r40",   "L40_msu",       "msu_r40",         "Mpy_32_16_ss",  "Mpy_32_32_ss",    "L_mult0",   "L_mac0",        "L_msu0",          "lshl",          "lshr",            "L_lshl",   "L_lshr",        "L40_lshl",        "L40_lshr",      "s_and",           "s_or",   "s_xor",         "L_and",           "L_or",          "L_xor",           "rotl",   "rotr",          "L_rotl",          "L_rotr",        "L40_set",         "L40_deposit_h",   "L40_deposit_l", "L40_deposit32",   "Extract40_H",   "Extract40_L",     "L_Extract40",   "L40_round",     "L_saturate40",    "round40",       "IF",              "GOTO",   "BREAK",         "SWITCH",          "FOR",           "WHILE",           "CONTINUE" , "L_mls",         "div_l",           "i_mult"};#endif /* ifdef WMOPS */#ifdef WMOPSconst BASIC_OP op_weight ={    1,     1,     1,     1,     1,    1,     1,     1,     1,     1,    1,     1,     1,     1,     1,    1,     1,     2,     2,     1,    1,     1,     1,     3,     1,    1,     1,     1,     3,     1,    4,     1,     18,    1,     1,    2,     1,     2,     2,     1,    1,     1,     1,     1,     1,    3,     3,     3,     3,     1,    1,     1,     1,     1,     1,    1,     1,     1,     2,    1,     2,     2,     4,     1,    1,     1,     1,     1,     1,    1,     1,     1,     1,     1,    1,     1,     1,     1,     3,    3,     3,     3,     3,     1,    1,     1,     1,     1,     1,    1,     1,     1,     4,     4,    4,     8,     3,     4,     4      , 5,     32,    3};#endif /* ifdef WMOPS */Word32 TotalWeightedOperation (void);Word32 DeltaWeightedOperation (void);#ifdef WMOPS/* Counters for separating counting for different objects */static int maxCounter=0;static char* objectName[MAXCOUNTERS+1];static Word16 fwc_corr[MAXCOUNTERS+1];static long int nbTimeObjectIsCalled[MAXCOUNTERS+1];#define NbFuncMax  1024static Word16 funcid[MAXCOUNTERS], nbframe[MAXCOUNTERS];static Word32 glob_wc[MAXCOUNTERS], wc[MAXCOUNTERS][NbFuncMax];static float total_wmops[MAXCOUNTERS];static Word32 LastWOper[MAXCOUNTERS];#endif /* ifdef WMOPS */#ifdef WMOPSstatic 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 /* ifdef WMOPS */int getCounterId( char *objectNameArg) {#if WMOPS  if(maxCounter>=MAXCOUNTERS-1) return 0;  objectName[++maxCounter]=my_strdup(objectNameArg);  return maxCounter;#else /* ifdef WMOPS */  return 0; /* Dummy */#endif /* ifdef WMOPS */}#if WMOPSint readCounterId() {   return currCounter;}#endif /* ifdef WMOPS */#ifdef WMOPSchar * readCounterIdName() {   return objectName[currCounter];}#endif /* ifdef WMOPS */void setCounter( int counterId) {#if WMOPS   if( (counterId > maxCounter)    || (counterId < 0)) {      currCounter=0;      return;   }   currCounter=counterId;   call_occurred = 1;#endif /* ifdef WMOPS */}void incrementNbTimeObjectIsCalled( int counterId) {#if WMOPS  if( (counterId > maxCounter)   || (counterId < 0)) {      nbTimeObjectIsCalled[0]++;      return;    }  nbTimeObjectIsCalled[counterId]++;#endif /* ifdef WMOPS */}#if WMOPSstatic 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;}#endif /* ifdef WMOPS */#ifdef WMOPSstatic void WMOPS_clearMultiCounter() {    Word16 i;        Word32 *ptr = (Word32 *) &multiCounter[currCounter];    for( i = 0; i < (sizeof (multiCounter[currCounter])/ sizeof (Word32)); i++) {        *ptr++ = 0;    }}#endif /* ifdef WMOPS */void ClearNbTimeObjectsAreCalled() {#if WMOPS		    Word16 i;        for (i = 0; i < (sizeof (multiCounter[currCounter])/ sizeof (Word32)); i++) {		nbTimeObjectIsCalled[i] = 0;    }#endif /* ifdef WMOPS */}Word32 TotalWeightedOperation () {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -