Ignore:
Timestamp:
Jul 26, 2006 5:04:54 PM (18 years ago)
Author:
bennylp
Message:
  • Bring speex codec up to date with their SVN trunk
  • Speex codec should work in FIXED_POINT mode when PJ_HAS_FLOATING_POINT is set to zero.
  • ulaw2linear will return zero if zero is given (this would make the VAD works better, and it also fixed click noise when call is established/hangup).
File:
1 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjmedia/src/pjmedia-codec/speex/pseudofloat.h

    r278 r628  
    4646} spx_float_t; 
    4747 
    48 #define FLOAT_ZERO ((spx_float_t){0,0}) 
    49 #define FLOAT_ONE ((spx_float_t){16384,-14}) 
    50 #define FLOAT_HALF ((spx_float_t){16384,-15}) 
     48static const spx_float_t FLOAT_ZERO = {0,0}; 
     49static const spx_float_t FLOAT_ONE = {16384,-14}; 
     50static const spx_float_t FLOAT_HALF = {16384,-15}; 
    5151 
    5252#define MIN(a,b) ((a)<(b)?(a):(b)) 
     
    6161   } 
    6262   if (x==0) 
    63       return (spx_float_t) {0,0}; 
     63   { 
     64      spx_float_t r = {0,0}; 
     65      return r; 
     66   } 
    6467   while (x>32767) 
    6568   { 
     
    7578   } 
    7679   if (sign) 
    77       return (spx_float_t) {-x,e}; 
     80   { 
     81      spx_float_t r; 
     82      r.m = -x; 
     83      r.e = e; 
     84      return r; 
     85   } 
    7886   else       
    79       return (spx_float_t) {x,e}; 
     87   { 
     88      spx_float_t r; 
     89      r.m = x; 
     90      r.e = e; 
     91      return r; 
     92   } 
    8093} 
    8194 
     
    88101   else if (b.m==0) 
    89102      return a; 
    90    r = (a).e > (b).e ? (spx_float_t) {((a).m>>1) + ((b).m>>MIN(15,(a).e-(b).e+1)),(a).e+1} : (spx_float_t) {((b).m>>1) + ((a).m>>MIN(15,(b).e-(a).e+1)),(b).e+1}; 
     103   if ((a).e > (b).e)  
     104   { 
     105      r.m = ((a).m>>1) + ((b).m>>MIN(15,(a).e-(b).e+1)); 
     106      r.e = (a).e+1; 
     107   } 
     108   else  
     109   { 
     110      r.m = ((b).m>>1) + ((a).m>>MIN(15,(b).e-(a).e+1)); 
     111      r.e = (b).e+1; 
     112   } 
    91113   if (r.m>0) 
    92114   { 
     
    114136   else if (b.m==0) 
    115137      return a; 
    116    r = (a).e > (b).e ? (spx_float_t) {((a).m>>1) - ((b).m>>MIN(15,(a).e-(b).e+1)),(a).e+1} : (spx_float_t) {((a).m>>MIN(15,(b).e-(a).e+1)) - ((b).m>>1) ,(b).e+1}; 
     138   if ((a).e > (b).e) 
     139   { 
     140      r.m = ((a).m>>1) - ((b).m>>MIN(15,(a).e-(b).e+1)); 
     141      r.e = (a).e+1; 
     142   } 
     143   else  
     144   { 
     145      r.m = ((a).m>>MIN(15,(b).e-(a).e+1)) - ((b).m>>1); 
     146      r.e = (b).e+1; 
     147   } 
    117148   if (r.m>0) 
    118149   { 
     
    153184static inline spx_float_t FLOAT_MULT(spx_float_t a, spx_float_t b) 
    154185{ 
    155    spx_float_t r = (spx_float_t) {(spx_int16_t)((spx_int32_t)(a).m*(b).m>>15), (a).e+(b).e+15}; 
     186   spx_float_t r; 
     187   r.m = (spx_int16_t)((spx_int32_t)(a).m*(b).m>>15); 
     188   r.e = (a).e+(b).e+15; 
    156189   if (r.m>0) 
    157190   { 
     
    175208static inline spx_float_t FLOAT_SHL(spx_float_t a, int b) 
    176209{ 
    177    return (spx_float_t) {a.m,a.e+b}; 
     210   spx_float_t r; 
     211   r.m = a.m; 
     212   r.e = a.e+b; 
     213   return r; 
    178214} 
    179215 
     
    181217{ 
    182218   if (a.e<0) 
    183       return (a.m+(1<<(-a.e-1)))>>-a.e; 
     219      return EXTRACT16((EXTEND32(a.m)+(1<<(-a.e-1)))>>-a.e); 
    184220   else 
    185221      return a.m<<a.e; 
     
    197233{ 
    198234   int e=0; 
     235   spx_float_t r; 
    199236   /* FIXME: Handle the sign */ 
    200237   if (a==0) 
    201       return (spx_float_t) {0,0}; 
     238   { 
     239      return FLOAT_ZERO; 
     240   } 
    202241   while (a>32767) 
    203242   { 
     
    220259      e--; 
    221260   } 
    222    return (spx_float_t) {MULT16_16_Q15(a,b),e+15}; 
     261   r.m = MULT16_16_Q15(a,b); 
     262   r.e = e+15; 
     263   return r; 
    223264} 
    224265 
     
    226267{ 
    227268   int e=0; 
     269   spx_float_t r; 
    228270   /* FIXME: Handle the sign */ 
    229271   if (a==0) 
    230       return (spx_float_t) {0,0}; 
    231    while (a<SHL32(b.m,14)) 
     272   { 
     273      return FLOAT_ZERO; 
     274   } 
     275   while (a<SHL32(EXTEND32(b.m),14)) 
    232276   { 
    233277      a <<= 1; 
    234278      e--; 
    235279   } 
    236    while (a>=SHL32(b.m-1,15)) 
     280   while (a>=SHL32(EXTEND32(b.m-1),15)) 
    237281   { 
    238282      a >>= 1; 
    239283      e++; 
    240284   } 
    241    return (spx_float_t) {DIV32_16(a,b.m),e-b.e}; 
     285   r.m = DIV32_16(a,b.m); 
     286   r.e = e-b.e; 
     287   return r; 
    242288} 
    243289 
     
    246292{ 
    247293   int e=0; 
     294   spx_float_t r; 
    248295   /* FIXME: Handle the sign */ 
    249296   if (a==0) 
    250       return (spx_float_t) {0,0}; 
     297   { 
     298      return FLOAT_ZERO; 
     299   } 
    251300   while (b>32767) 
    252301   { 
     
    264313      e++; 
    265314   } 
    266    return (spx_float_t) {DIV32_16(a,b),e}; 
     315   r.m = DIV32_16(a,b); 
     316   r.e = e; 
     317   return r; 
    267318} 
    268319 
     
    271322   int e=0; 
    272323   spx_int32_t num; 
     324   spx_float_t r; 
    273325   num = a.m; 
    274326   while (a.m >= b.m) 
     
    278330   } 
    279331   num = num << (15-e); 
    280    return (spx_float_t) {DIV32_16(num,b.m),a.e-b.e-15+e}; 
     332   r.m = DIV32_16(num,b.m); 
     333   r.e = a.e-b.e-15+e; 
     334   return r; 
    281335} 
    282336 
Note: See TracChangeset for help on using the changeset viewer.