Changeset 2932:09d25b79ce75 in roaraudio for roard/mixer.c
- Timestamp:
- 10/16/09 21:36:47 (15 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
roard/mixer.c
r2149 r2932 24 24 25 25 #include "roard.h" 26 27 int mix_clients (void * output, int bits, void ** input, int samples) {28 if ( bits == 8 ) {29 return mix_clients_8bit(output, input, samples);30 } else if ( bits == 16 ) {31 return mix_clients_16bit(output, input, samples);32 } else if ( bits == 24 ) {33 return mix_clients_24bit(output, input, samples);34 } else if ( bits == 32 ) {35 return mix_clients_32bit(output, input, samples);36 } else {37 return -1;38 }39 }40 41 int mix_clients_8bit (void * output, void ** input, int samples) {42 int i, s;43 register int c;44 45 for (s = 0; s < samples; s++) {46 c = 0;47 48 for (i = 0; input[i] != NULL; i++)49 c += ((char**)input)[i][s];50 51 if ( c > 127 )52 c = 127;53 else if ( c < -128 )54 c = -128;55 ((char*)output)[s] = (char)c;56 }57 58 return 0;59 }60 61 int mix_clients_16bit (void * output, void ** input, int samples) {62 int i, s;63 register int_least32_t c;64 int16_t ** in = (int16_t**) input;65 int16_t * out = output;66 67 #ifdef DEBUG68 for (i = 0; input[i] != NULL; i++)69 ROAR_DBG("mix_clients_16bit(*): input[%i] = %p", i, input[i]);70 #endif71 72 /*73 if ( input[0] != NULL )74 write(1, input[0], samples*2);75 */76 77 /*78 if ( input[0] != NULL ) {79 memcpy(output, input[0], samples*2);80 return -1;81 }82 */83 84 for (s = 0; s < samples; s++) {85 c = 0;86 for (i = 0; input[i] != NULL; i++) {87 // printf("D: input[i=%i] = %p\n", i, input[i]);88 c += in[i][s];89 }90 91 if ( c > 32767 )92 c = 32767;93 else if ( c < -32768 )94 c = -32768;95 96 out[s] = c;97 }98 99 return 0;100 }101 102 int mix_clients_24bit (void * output, void ** input, int samples) {103 return -1;104 }105 106 int mix_clients_32bit (void * output, void ** input, int samples) {107 #ifdef ROAR_NATIVE_INT64108 int32_t ** in = (int32_t**) input;109 int32_t * out = (int32_t* ) output;110 int i, s;111 ROAR_NATIVE_INT64 c;112 113 for (s = 0; s < samples; s++) {114 c = 0;115 116 for (i = 0; input[i]; i++)117 c += in[i][s];118 119 if ( c > 21474836487LL )120 c = 2147483647LL;121 else if ( c < -2147483648LL )122 c = -2147483648LL;123 out[s] = (int32_t)c;124 }125 126 return 0;127 #else128 return -1;129 #endif130 }131 26 132 27 int change_vol (void * output, int bits, void * input, int samples, int channels, struct roar_mixer_settings * set) {
Note: See TracChangeset
for help on using the changeset viewer.