Accoustic Echo Cancellation: add ec_options to pjmedia_aud_param ???

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Regis,

I made patch which should be solve our problem. AEC setting "options" is save
and when device is reopen this setting will be used. But changing AEC with
pjsua_set_ec() while device is open is not safe because module sound_port is 
not thread safe. Therefore i made second patch which should be solve this 
problem too...

01-aec_options.patch 
----------------------------------
- add in file audiodev.h to struct pjmedia_aud_param new member 
  unsigned ec_options;
- in file sound_port.c is call pjmedia_snd_port_set_ec() with value
 "ec_options"
- in pjsua_media.c in method create_aud_param() is load ec_options from
  internal pjsua member
- in method  pjsua_set_ec() is save ec_options to internal pjsua member

as you see is quite easy patch... i don't add new enum to pjmedia_aud_dev_cap

02-sound_port_aec_thr_safe.patch
------------------------------------------------------
recreating new ECHO module while device is open is not thread safe operation 
because thread from playback or capture use echo module therefore is add
3 mutex which should be solve this problem.

1 mutex is for playback thread
1 mutex is for capture thread
1 mutex is for setting thread ...for right behaviour if echo is deleteting or 
creating when is call method pjmedia_snd_port_get_ec_tail() from other 
thread...if this situation not occured this mutex should be removed

second patch is not needed if you will be adjust AEC before starting 
application

I hope it will be helpful


regards



> +1
> 
> Also did the remark 4 month ago :
> http://lists.pjsip.org/pipermail/pjsip_lists.pjsip.org/2011-January/012564.
> html - you'll find in this mail the workaround I use with pjsua but I think
> that your problem here is slightly different.
> 
> While investigating the problem I found that an evolution adding such an
> extra setting in pjsua would cost a lot of code changes (so the
> workaround was a good solution to solve the problem).
> Adding it to pjmedia_aud_param could be a first step to have it working
> properly in pjsua too :). So +1 for this request ;)
> 
> Regards,
> R?gis
> 
> Le 29/04/2011 16:49, Peter Lukac a ?crit :
> > hi all,
> > Is possible in future to "pjmedia_aud_param" structure add parameter for
> > "ec_options" ? Because when sound device is open always
> > is call method in sound_port.c  start_sound_device() and there is call
> > 
> > pjmedia_snd_port_set_ec(snd_port, pool, snd_port->aud_param.ec_tail_ms,
> > 0);
> > 
> > with zero options parameter. When application set different algorithm
> > with pjsua_set_ec() this algorithm is not accepted.
> > 
> > But in manual is:
> > 
> > If the sound device is currently active, and if the device supports AEC,
> > this function will forward the change request to the device and it will
> > be up to the device on whether support the request. If software AEC is
> > being used (the software EC will be used if the device does not support
> > AEC), this function will change the software EC settings. In all cases,
> > the setting will be saved for future opening of the sound device.
> > 
> > Setting is saved but is not used.
> > 
> > 
> > regard
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.pjsip.org/pipermail/pjsip_lists.pjsip.org/attachments/20110504/b29ffd5c/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: aec_patch.tar.gz
Type: application/x-compressed-tar
Size: 2523 bytes
Desc: not available
URL: <http://lists.pjsip.org/pipermail/pjsip_lists.pjsip.org/attachments/20110504/b29ffd5c/attachment.gz>


[Index of Archives]     [Asterisk Users]     [Asterisk App Development]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [Linux API]
  Powered by Linux