Changeset 2145:ad5260b8af44 in roaraudio
- Timestamp:
- 07/24/09 14:48:19 (15 years ago)
- Branch:
- default
- Phase:
- public
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
include/libroardsp/remove.h
r2143 r2145 40 40 struct roar_remove_state { 41 41 uint16_t a, b; 42 int32_t old;42 uint16_t old; 43 43 }; 44 44 45 45 int 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); 46 int roar_remove (void * inout, void * subs, int samples, int bits, struct roar_remove_state * state); 47 int roar_remove_8 (int8_t * inout, int8_t * subs, int samples, struct roar_remove_state * state); 48 int roar_remove_16 (int8_t * inout, int8_t * subs, int samples, struct roar_remove_state * state); 49 int roar_remove_32 (int8_t * inout, int8_t * subs, int samples, struct roar_remove_state * state); 47 50 48 51 #endif -
libroardsp/remove.c
r2144 r2145 25 25 #include "libroardsp.h" 26 26 27 int 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 38 int 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 51 int roar_remove_8 (int8_t * inout, int8_t * subs, int samples, struct roar_remove_state * state) { 52 return -1; 53 } 54 int 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 } 86 int roar_remove_32 (int8_t * inout, int8_t * subs, int samples, struct roar_remove_state * state) { 87 return -1; 88 } 27 89 28 90 //ll
Note: See TracChangeset
for help on using the changeset viewer.