Changeset 1049:da935660c926 in mediastreamer2


Ignore:
Timestamp:
Jul 6, 2010 11:28:48 AM (3 years ago)
Author:
Simon Morlat <simon.morlat@…>
Branch:
default
Message:

automatic configuration of echo cancellation upon latency of android sound reader

Files:
3 edited

Legend:

Unmodified
Added
Removed
  • include/mediastreamer2/msfilter.h

    r1002 r1049  
    470470#define MS_FILTER_SET_MTU               MS_FILTER_BASE_METHOD(9,int) 
    471471#define MS_FILTER_GET_MTU               MS_FILTER_BASE_METHOD(10,int) 
     472/**Filters can return their latency in milliseconds (if known) using this method:*/ 
     473#define MS_FILTER_GET_LATENCY   MS_FILTER_BASE_METHOD(11,int) 
    472474 
    473475 
     
    484486 
    485487/* more specific methods: to be moved into implementation specific header files*/ 
    486 #define MS_FILTER_SET_FRAMESIZE         MS_FILTER_BASE_METHOD(11,int) 
    487488#define MS_FILTER_SET_FILTERLENGTH      MS_FILTER_BASE_METHOD(12,int) 
    488489#define MS_FILTER_SET_OUTPUT_SAMPLE_RATE MS_FILTER_BASE_METHOD(13,int) 
  • src/audiostream.c

    r1015 r1049  
    246246        } 
    247247 
    248         if (use_ec) { 
    249                 stream->ec=ms_filter_new(MS_SPEEX_EC_ID); 
    250                 ms_filter_call_method(stream->ec,MS_FILTER_SET_SAMPLE_RATE,&pt->clock_rate); 
    251                 if (stream->ec_tail_len!=0) 
    252                         ms_filter_call_method(stream->ec,MS_ECHO_CANCELLER_SET_TAIL_LENGTH,&stream->ec_tail_len); 
    253                 if (stream->ec_delay!=0) 
    254                         ms_filter_call_method(stream->ec,MS_ECHO_CANCELLER_SET_DELAY,&stream->ec_delay); 
    255                 if (stream->ec_framesize!=0) 
    256                         ms_filter_call_method(stream->ec,MS_ECHO_CANCELLER_SET_FRAMESIZE,&stream->ec_framesize); 
    257         } 
    258  
    259248        if (stream->el_type!=ELInactive || stream->use_gc || stream->use_ng){ 
    260249                stream->volsend=ms_filter_new(MS_VOLUME_ID); 
     
    292281        } 
    293282 
    294  
    295283        tmp=1; 
    296284        ms_filter_call_method(stream->soundwrite,MS_FILTER_SET_NCHANNELS, &tmp); 
     285 
     286        /*configure the echo canceller if required */ 
     287        if (use_ec) { 
     288                stream->ec=ms_filter_new(MS_SPEEX_EC_ID); 
     289                ms_filter_call_method(stream->ec,MS_FILTER_SET_SAMPLE_RATE,&pt->clock_rate); 
     290                if (stream->ec_tail_len!=0) 
     291                        ms_filter_call_method(stream->ec,MS_ECHO_CANCELLER_SET_TAIL_LENGTH,&stream->ec_tail_len); 
     292                if (stream->ec_delay!=0){ 
     293                        ms_filter_call_method(stream->ec,MS_ECHO_CANCELLER_SET_DELAY,&stream->ec_delay); 
     294                }else{ 
     295                        /*configure from latency of sound card in case it is availlable */ 
     296                        int latency=0; 
     297                        ms_filter_call_method(stream->soundread,MS_FILTER_GET_LATENCY,&latency); 
     298                        latency-=30; /*keep 30 milliseconds security margin*/ 
     299                        if (latency<0) latency=0; 
     300                        ms_filter_call_method(stream->ec,MS_ECHO_CANCELLER_SET_DELAY,&latency); 
     301                } 
     302                if (stream->ec_framesize!=0) 
     303                        ms_filter_call_method(stream->ec,MS_ECHO_CANCELLER_SET_FRAMESIZE,&stream->ec_framesize); 
     304        } 
    297305 
    298306        /* give the encoder/decoder some parameters*/ 
  • src/msandroid.cpp

    r1040 r1049  
    2727static JavaVM *ms_andsnd_jvm; 
    2828 
    29  
     29static void sound_read_setup(MSFilter *f); 
    3030 
    3131/* 
     
    136136        d->rate=proposed_rate; 
    137137        return 0; 
    138         /*d->rate=44100; //to improve latency on msn 7k 
    139         if (proposed_rate == d->rate) { 
     138} 
     139 
     140static int get_latency(MSFilter *f, void *arg){ 
     141        msandroid_sound_data *d=(msandroid_sound_data*)f->data; 
     142        if (!d->started){ 
     143                sound_read_setup(f); 
     144                ((int*)arg)=(1000*d->buff_size)/(d->nchannels*2*d->rate); 
     145        } 
    140146        return 0; 
    141         } else { 
    142                 return d->rate; 
    143         }*/ 
    144 } 
     147} 
     148              
    145149 
    146150MSFilterMethod msandroid_sound_read_methods[]={ 
     
    148152        {       MS_FILTER_GET_SAMPLE_RATE       , get_rate      }, 
    149153        {       MS_FILTER_SET_NCHANNELS         , set_nchannels }, 
     154        {       MS_FILTER_GET_LATENCY   , get_latency}, 
    150155        {       0                               , NULL          } 
    151156}; 
     
    211216} 
    212217 
    213 void msandroid_sound_read_preprocess(MSFilter *f){ 
     218static void sound_read_setup(MSFilter *f){ 
    214219        ms_debug("andsnd_read_preprocess"); 
    215220        msandroid_sound_read_data *d=(msandroid_sound_read_data*)f->data; 
     
    301306} 
    302307 
    303 void msandroid_sound_read_postprocess(MSFilter *f){ 
     308static void sound_read_preprocess(MSFilter *f){ 
     309        ms_debug("andsnd_read_preprocess"); 
     310        if (!d->started) 
     311                sound_read_setup(f); 
     312} 
     313 
     314static void sound_read_postprocess(MSFilter *f){ 
    304315        msandroid_sound_read_data *d=(msandroid_sound_read_data*)f->data; 
    305316        JNIEnv *jni_env = 0; 
     
    345356} 
    346357 
    347 void msandroid_sound_read_process(MSFilter *f){ 
     358static void sound_read_process(MSFilter *f){ 
    348359        msandroid_sound_read_data *d=(msandroid_sound_read_data*)f->data; 
    349360        mblk_t *m; 
     
    374385/*.noutputs=*/1, 
    375386/*.init*/NULL, 
    376 /*.preprocess=*/msandroid_sound_read_preprocess, 
    377 /*.process=*/msandroid_sound_read_process, 
    378 /*.postprocess=*/msandroid_sound_read_postprocess, 
     387/*.preprocess=*/sound_read_preprocess, 
     388/*.process=*/sound_read_process, 
     389/*.postprocess=*/sound_read_postprocess, 
    379390/*.uninit*/NULL, 
    380391/*.methods=*/msandroid_sound_read_methods 
Note: See TracChangeset for help on using the changeset viewer.