Changeset 2391:364c3dbd7cf6 in roaraudio


Ignore:
Timestamp:
08/17/09 02:27:41 (15 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

added normal remove for 8 and 32 bit

File:
1 edited

Legend:

Unmodified
Added
Removed
  • libroardsp/remove.c

    r2157 r2391  
    5050 
    5151int roar_remove_8    (int8_t  * inout, int8_t  * subs, int samples, struct roar_remove_state * state) { 
    52  return -1; 
     52 int i; 
     53 register int_least16_t s; 
     54 register int_least16_t peak; 
     55 
     56 if ( state == NULL ) { 
     57  for (i = 0; i < samples; i++) { 
     58   s  = inout[i]; 
     59   s -= subs[i]; 
     60   inout[i] = s; 
     61  } 
     62 } else { 
     63  peak = 127; 
     64  for (i = 0; i < samples; i++) { 
     65   s  = inout[i]; 
     66   s -= subs[i]; 
     67   s  = s < 0 ? -s : s; // we true 32 bit, not int operation here 
     68   if ( s > peak ) 
     69    peak = s; 
     70  } 
     71 
     72  for (i = 0; i < samples; i++) { 
     73   s  = -subs[i]; 
     74   s *=  127; 
     75   s /=  peak; 
     76   s +=  inout[i]; 
     77   inout[i] = s; 
     78  } 
     79 } 
     80 
     81 return 0; 
    5382} 
     83 
    5484int roar_remove_16   (int16_t * inout, int16_t * subs, int samples, struct roar_remove_state * state) { 
    5585 int i; 
     
    84114 return 0; 
    85115} 
     116 
    86117int roar_remove_32   (int32_t * inout, int32_t * subs, int samples, struct roar_remove_state * state) { 
    87  return -1; 
     118 int i; 
     119 register int64_t s; 
     120 register int64_t peak; 
     121 
     122 if ( state == NULL ) { 
     123  for (i = 0; i < samples; i++) { 
     124   s  = inout[i]; 
     125   s -= subs[i]; 
     126   inout[i] = s; 
     127  } 
     128 } else { 
     129  peak = 4294967295UL; 
     130  for (i = 0; i < samples; i++) { 
     131   s  = inout[i]; 
     132   s -= subs[i]; 
     133   s  = s < 0 ? -s : s; // we true 32 bit, not int operation here 
     134   if ( s > peak ) 
     135    peak = s; 
     136  } 
     137 
     138  for (i = 0; i < samples; i++) { 
     139   s  = -subs[i]; 
     140   s *=  4294967295UL; 
     141   s /=  peak; 
     142   s +=  inout[i]; 
     143   inout[i] = s; 
     144  } 
     145 } 
     146 
     147 return 0; 
    88148} 
    89149 
Note: See TracChangeset for help on using the changeset viewer.