Changeset 2140:7665a1f08287 in roaraudio
- Timestamp:
- 07/24/09 03:29:18 (15 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
roarclients/roarphone.c
r2129 r2140 30 30 #define DRIVER "oss" 31 31 32 // anti echo: 33 #define AE_NONE 0 34 #define AE_SIMPLE 1 35 #define AE_SPEEX 2 36 37 struct { 38 int antiecho; 39 } g_conf; 40 32 41 void usage (void) { 33 42 printf("roarcat [OPTIONS]...\n"); … … 55 64 } 56 65 66 int anti_echo16(int16_t * buf, int16_t * aebuf, size_t len) { 67 size_t i; 68 69 switch (g_conf.antiecho) { 70 case AE_NONE: 71 return 0; 72 break; 73 case AE_SIMPLE: 74 for (i = 0; i < len; i++) 75 buf[i] -= aebuf[i]; 76 break; 77 default: 78 return -1; 79 break; 80 } 81 82 return -1; 83 } 84 57 85 int run_stream (struct roar_vio_calls * s0, struct roar_vio_calls * s1, struct roar_audio_info * info) { 58 86 size_t len; 59 char *buf;60 ssize_t l;87 void * outbuf, * micbuf; 88 ssize_t outlen, miclen; 61 89 62 90 len = (info->rate / 100) * info->channels * info->bits / 8; 63 91 64 if ( ( buf = malloc(len)) == NULL )92 if ( (outbuf = malloc(2*len)) == NULL ) 65 93 return -1; 66 94 95 micbuf = outbuf + len; 96 67 97 while (1) { 68 if ( ( l = roar_vio_read(s0,buf, len)) <= 0 )98 if ( (miclen = roar_vio_read(s0, micbuf, len)) <= 0 ) 69 99 break; 70 if ( roar_vio_write(s1, buf, l) != l)100 if ( roar_vio_write(s1, micbuf, miclen) != miclen ) 71 101 break; 72 if ( ( l = roar_vio_read(s1,buf, len)) <= 0 )102 if ( (outlen = roar_vio_read(s1, outbuf, len)) <= 0 ) 73 103 break; 74 if ( roar_vio_write(s0, buf, l) != l ) 104 105 if ( g_conf.antiecho != AE_NONE ) 106 anti_echo16(outbuf, micbuf, ROAR_MIN(miclen, outlen)/2); 107 108 if ( roar_vio_write(s0, outbuf, outlen) != outlen ) 75 109 break; 76 110 } 77 111 78 free( buf);112 free(outbuf); 79 113 80 114 return 0; … … 93 127 char * k; 94 128 int i; 129 130 memset(&g_conf, 0, sizeof(g_conf)); 131 132 g_conf.antiecho = AE_SIMPLE; 95 133 96 134 for (i = 1; i < argc; i++) { … … 130 168 } 131 169 132 run_stream(& svio, &dvio, &info);170 run_stream(&dvio, &svio, &info); 133 171 134 172 roar_vio_close(&svio);
Note: See TracChangeset
for help on using the changeset viewer.