Done with this ticket: http://trac.pjsip.org/repos/ticket/489 The implementation details differ slightly, but I think there shouldn't be any difference in the behavior. thanks, -benny On 2/19/08, Norman Franke <norman at myasd.com> wrote: > Ignore that last one. I think one should call the on_stream_destroy after > removing from the bridge, otherwise, you'd never be able to dispose of the > memory if you allocated a new pjmedia_port. So, I implemented a quick and > dirty AGC using this method and it works! Now I just need to fine tune it. > > -Norman > > > norman:~/src/pjproject-svn franke$ svn diff > Index: pjsip/include/pjsua-lib/pjsua.h > =================================================================== > --- pjsip/include/pjsua-lib/pjsua.h (revision 1805) > +++ pjsip/include/pjsua-lib/pjsua.h (working copy) > @@ -922,6 +922,19 @@ > */ > void (*on_nat_detect)(const pj_stun_nat_detect_result *res); > > + /** Notify application when media session is created and before > + * it is registered to the conference bridge. Application may return > + * different media port if it has added media processing port to > + * the stream. > + */ > + void (*on_stream_created)(pjsua_call_id call_id, > pjmedia_session *sess, > + unsigned stream_idx, pjmedia_port **p_port); > + > + /** Notify application when media session has been destroyed. > + */ > + void (*on_stream_destroyed)(pjsua_call_id call_id, > + pjmedia_session *sess, unsigned > stream_idx); > + > } pjsua_callback; > > > Index: pjsip/src/pjsua-lib/pjsua_media.c > =================================================================== > --- pjsip/src/pjsua-lib/pjsua_media.c (revision 1805) > +++ pjsip/src/pjsua-lib/pjsua_media.c (working copy) > @@ -882,6 +882,9 @@ > > if (call->conf_slot != PJSUA_INVALID_ID) { > pjmedia_conf_remove_port(pjsua_var.mconf, > call->conf_slot); > + if (pjsua_var.ua_cfg.cb.on_stream_destroyed) { > + > pjsua_var.ua_cfg.cb.on_stream_destroyed(call_id, > call->session, 0); > + } > call->conf_slot = PJSUA_INVALID_ID; > } > > @@ -1064,7 +1067,13 @@ > { > char tmp[PJSIP_MAX_URL_SIZE]; > pj_str_t port_name; > + pjmedia_port *conf_media_port = media_port; > > + if (pjsua_var.ua_cfg.cb.on_stream_created) { > + pjsua_var.ua_cfg.cb.on_stream_created( > + call_id, call->session, 0, > &conf_media_port); > + } > + > port_name.ptr = tmp; > port_name.slen = > pjsip_uri_print(PJSIP_URI_IN_REQ_URI, > > call->inv->dlg->remote.info->uri, > @@ -1073,7 +1082,7 @@ > port_name = pj_str("call"); > } > status = pjmedia_conf_add_port( pjsua_var.mconf, > call->inv->pool, > - media_port, > + conf_media_port, > &port_name, > (unsigned*)&call->conf_slot); > if (status != PJ_SUCCESS) { > > > > Norman Franke > Answering Service for Directors, Inc. > www.myasd.com > > On Feb 19, 2008, at 3:40 AM, Benny Prijono wrote: > > On 2/18/08, Norman Franke <norman at myasd.com> wrote: > I'm using the PJSUA library, and I want to intercept audio from remote > callers and process it before mixing in the conference bridge. What's the > best way to do this? I want to add some type of dynamic gain control, since > we get some very soft callers. I've done something similar for playback of > files and that works great, so now I want to do so with callers. > > > > Currently there's no way to do that with PJSUA-LIB, as stream will be > added to the conference bridge automatically. But perhaps this would > be simple to support by adding couple of callbacks below in > pjsua_callback: > > /** Notify application when media session is created and before > * it is registered to the conference bridge. Application may return > * different media port if it has added media processing port to > * the stream. > */ > void (*on_stream_created)(pjsua_call_id call_id, > pjmedia_session *sess, > unsigned stream_idx, > pjmedia_port **p_port); > > /** Notify application when media session is about to be destroyed. > */ > void (*on_stream_destroyed)(pjsua_call_id call_id, > pjmedia_session *sess, > unsigned stream_idx); > > > This would also fix the problem discussed in "stream port destroyed > before callback function was called" thread. > > Now, care to make patch? ;-) > > cheers, > -benny > > > > Norman Franke > Answering Service for Directors, Inc. > www.myasd.com > > _______________________________________________ > Visit our blog: http://blog.pjsip.org > > pjsip mailing list > pjsip at lists.pjsip.org > http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org > > > > > _______________________________________________ > Visit our blog: http://blog.pjsip.org > > pjsip mailing list > pjsip at lists.pjsip.org > http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org > > _______________________________________________ > Visit our blog: http://blog.pjsip.org > > pjsip mailing list > pjsip at lists.pjsip.org > http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org > >