Changeset 2145:ad5260b8af44 in roaraudio


Ignore:
Timestamp:
07/24/09 14:48:19 (15 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

updated structs and prototypes, implemented a first 16 bit version

Files:
2 edited

Legend:

Unmodified
Added
Removed
  • include/libroardsp/remove.h

    r2143 r2145  
    4040struct roar_remove_state { 
    4141 uint16_t a, b; 
    42  int32_t  old; 
     42 uint16_t  old; 
    4343}; 
    4444 
    4545int roar_remove_init (struct roar_remove_state * state); 
    46 int roar_remove      (void * inout, void * subs, int samples, int bits, struct roar_remove_state * state); 
     46int roar_remove      (void    * inout, void    * subs, int samples, int bits, struct roar_remove_state * state); 
     47int roar_remove_8    (int8_t  * inout, int8_t  * subs, int samples, struct roar_remove_state * state); 
     48int roar_remove_16   (int8_t  * inout, int8_t  * subs, int samples, struct roar_remove_state * state); 
     49int roar_remove_32   (int8_t  * inout, int8_t  * subs, int samples, struct roar_remove_state * state); 
    4750 
    4851#endif 
  • libroardsp/remove.c

    r2144 r2145  
    2525#include "libroardsp.h" 
    2626 
     27int roar_remove_init (struct roar_remove_state * state) { 
     28 if ( state == NULL ) 
     29  return -1; 
     30 
     31 memset(state, 0, sizeof(struct roar_remove_state)); 
     32 
     33 state->old = 65535; 
     34 
     35 return 0; 
     36} 
     37 
     38int roar_remove      (void * inout, void * subs, int samples, int bits, struct roar_remove_state * state) { 
     39 if ( inout == NULL || subs == NULL || samples < 0 ) 
     40  return -1; 
     41 
     42 switch (bits) { 
     43  case 8:  return roar_remove_8 (inout, subs, samples, state); break; 
     44  case 16: return roar_remove_16(inout, subs, samples, state); break; 
     45  case 32: return roar_remove_32(inout, subs, samples, state); break; 
     46 } 
     47 
     48 return -1; 
     49} 
     50 
     51int roar_remove_8    (int8_t  * inout, int8_t  * subs, int samples, struct roar_remove_state * state) { 
     52 return -1; 
     53} 
     54int roar_remove_16   (int8_t  * inout, int8_t  * subs, int samples, struct roar_remove_state * state) { 
     55 int i; 
     56 register int32_t s; 
     57 register int32_t peak; 
     58 
     59 if ( state == NULL ) { 
     60  for (i = 0; i < samples; i++) { 
     61   s  = inout[i]; 
     62   s -= subs[i]; 
     63   inout[i] = s; 
     64  } 
     65 } else { 
     66  peak = 65535; 
     67  for (i = 0; i < samples; i++) { 
     68   s  = inout[i]; 
     69   s -= subs[i]; 
     70   s  = s < 0 ? -s : s; // we true 32 bit, not int operation here 
     71   if ( s > peak ) 
     72    peak = s; 
     73  } 
     74 
     75  for (i = 0; i < samples; i++) { 
     76   s  = -subs[i]; 
     77   s *=  65535; 
     78   s /=  peak; 
     79   s +=  inout[i]; 
     80   inout[i] = s; 
     81  } 
     82 } 
     83 
     84 return 0; 
     85} 
     86int roar_remove_32   (int8_t  * inout, int8_t  * subs, int samples, struct roar_remove_state * state) { 
     87 return -1; 
     88} 
    2789 
    2890//ll 
Note: See TracChangeset for help on using the changeset viewer.