From 0949cd759f5e4848f692a21d3b04f75f84ba6e24 Mon Sep 17 00:00:00 2001 From: Nanang Izzuddin Date: Thu, 17 May 2012 08:35:51 +0000 Subject: Re #1509: backported r4122-r4129. git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@4130 74dad513-b988-da41-8d7b-12977e46ad98 --- pjmedia/include/pjmedia/config.h | 2 +- pjmedia/src/pjmedia-audiodev/alsa_dev.c | 12 ++++++++---- pjsip/src/pjsua-lib/pjsua_acc.c | 14 ++++++++++++++ third_party/srtp/crypto/replay/rdb.c | 2 +- 4 files changed, 24 insertions(+), 6 deletions(-) diff --git a/pjmedia/include/pjmedia/config.h b/pjmedia/include/pjmedia/config.h index d0c2cd39..3f92a6b9 100644 --- a/pjmedia/include/pjmedia/config.h +++ b/pjmedia/include/pjmedia/config.h @@ -1139,7 +1139,7 @@ /** * Duration for progressive discard algotithm in jitter buffer to discard - * an excessive frame when burst is equal to or lower than + * an excessive frame when burst is equal to or greater than * PJMEDIA_JBUF_PRO_DISC_MAX_BURST, in milliseconds. * * Default: 10000 ms diff --git a/pjmedia/src/pjmedia-audiodev/alsa_dev.c b/pjmedia/src/pjmedia-audiodev/alsa_dev.c index 69e10d01..5bcdedf0 100644 --- a/pjmedia/src/pjmedia-audiodev/alsa_dev.c +++ b/pjmedia/src/pjmedia-audiodev/alsa_dev.c @@ -547,6 +547,7 @@ static pj_status_t open_playback (struct alsa_stream* stream, int result; unsigned int rate; snd_pcm_uframes_t tmp_buf_size; + snd_pcm_uframes_t tmp_period_size; if (param->play_id < 0 || param->play_id >= stream->af->dev_cnt) return PJMEDIA_EAUD_INVDEV; @@ -613,10 +614,11 @@ static pj_status_t open_playback (struct alsa_stream* stream, param->channel_count; TRACE_((THIS_FILE, "open_playback: set period size: %d", stream->pb_frames)); + tmp_period_size = stream->pb_frames; snd_pcm_hw_params_set_period_size_near (stream->pb_pcm, params, - &stream->pb_frames, NULL); + &tmp_period_size, NULL); TRACE_((THIS_FILE, "open_playback: period size set to: %d", - stream->pb_frames)); + tmp_period_size)); /* Set the sound device buffer size and latency */ if (param->flags & PJMEDIA_AUD_DEV_CAP_OUTPUT_LATENCY) @@ -663,6 +665,7 @@ static pj_status_t open_capture (struct alsa_stream* stream, int result; unsigned int rate; snd_pcm_uframes_t tmp_buf_size; + snd_pcm_uframes_t tmp_period_size; if (param->rec_id < 0 || param->rec_id >= stream->af->dev_cnt) return PJMEDIA_EAUD_INVDEV; @@ -729,10 +732,11 @@ static pj_status_t open_capture (struct alsa_stream* stream, param->channel_count; TRACE_((THIS_FILE, "open_capture: set period size: %d", stream->ca_frames)); + tmp_period_size = stream->ca_frames; snd_pcm_hw_params_set_period_size_near (stream->ca_pcm, params, - &stream->ca_frames, NULL); + &tmp_period_size, NULL); TRACE_((THIS_FILE, "open_capture: period size set to: %d", - stream->ca_frames)); + tmp_period_size)); /* Set the sound device buffer size and latency */ if (param->flags & PJMEDIA_AUD_DEV_CAP_INPUT_LATENCY) diff --git a/pjsip/src/pjsua-lib/pjsua_acc.c b/pjsip/src/pjsua-lib/pjsua_acc.c index e609fe7d..9cdbe953 100644 --- a/pjsip/src/pjsua-lib/pjsua_acc.c +++ b/pjsip/src/pjsua-lib/pjsua_acc.c @@ -675,6 +675,7 @@ PJ_DEF(pj_status_t) pjsua_acc_modify( pjsua_acc_id acc_id, pjsip_route_hdr local_route; pj_str_t acc_proxy[PJSUA_ACC_MAX_PROXIES]; pj_bool_t update_reg = PJ_FALSE; + pj_bool_t unreg_first = PJ_FALSE; pj_status_t status = PJ_SUCCESS; PJ_ASSERT_RETURN(acc_id>=0 && acc_id<(int)PJ_ARRAY_SIZE(pjsua_var.acc), @@ -802,6 +803,7 @@ PJ_DEF(pj_status_t) pjsua_acc_modify( pjsua_acc_id acc_id, pj_strdup_with_null(acc->pool, &acc->srv_domain, &id_sip_uri->host); acc->srv_port = 0; update_reg = PJ_TRUE; + unreg_first = PJ_TRUE; } /* User data */ @@ -856,6 +858,7 @@ PJ_DEF(pj_status_t) pjsua_acc_modify( pjsua_acc_id acc_id, pj_strdup_with_null(acc->pool, &acc->cfg.force_contact, &cfg->force_contact); update_reg = PJ_TRUE; + unreg_first = PJ_TRUE; } /* Contact param */ @@ -1100,6 +1103,7 @@ PJ_DEF(pj_status_t) pjsua_acc_modify( pjsua_acc_id acc_id, pj_bzero(&acc->cfg.reg_uri, sizeof(acc->cfg.reg_uri)); } update_reg = PJ_TRUE; + unreg_first = PJ_TRUE; } /* SIP outbound setting */ @@ -1110,6 +1114,16 @@ PJ_DEF(pj_status_t) pjsua_acc_modify( pjsua_acc_id acc_id, update_reg = PJ_TRUE; } + /* Unregister first */ + if (unreg_first) { + pjsua_acc_set_registration(acc->index, PJ_FALSE); + if (acc->regc != NULL) { + pjsip_regc_destroy(acc->regc); + acc->regc = NULL; + acc->contact.slen = 0; + } + } + /* Update registration */ if (update_reg) { /* If accounts has registration enabled, start registration */ diff --git a/third_party/srtp/crypto/replay/rdb.c b/third_party/srtp/crypto/replay/rdb.c index 9f2ea878..c826912a 100644 --- a/third_party/srtp/crypto/replay/rdb.c +++ b/third_party/srtp/crypto/replay/rdb.c @@ -115,7 +115,7 @@ rdb_add_index(rdb_t *rdb, uint32_t index) { /* shift the window forward by delta bits*/ v128_left_shift(&rdb->bitmask, delta); - v128_set_bit(&rdb->bitmask, rdb_bits_in_bitmask-delta); + v128_set_bit(&rdb->bitmask, rdb_bits_in_bitmask-1); rdb->window_start += delta; } -- cgit v1.2.3