summaryrefslogtreecommitdiff
path: root/pjmedia/src/pjmedia-codec
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2006-12-30 02:46:57 +0000
committerBenny Prijono <bennylp@teluu.com>2006-12-30 02:46:57 +0000
commit1c649378ac22d512909ebb2fbabfac041378991e (patch)
treef10e1790240c9574d0653888d95cd35bca60401b /pjmedia/src/pjmedia-codec
parent9169ab7a66e2370f5d5733e4b37e6a22ea3ba758 (diff)
Implement ticket #40: support for asymmetric encoding/decoding ptime (e.g. with iLBC when local and remote have different mode)
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@874 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjmedia/src/pjmedia-codec')
-rw-r--r--pjmedia/src/pjmedia-codec/gsm.c6
-rw-r--r--pjmedia/src/pjmedia-codec/ilbc.c16
-rw-r--r--pjmedia/src/pjmedia-codec/l16.c4
-rw-r--r--pjmedia/src/pjmedia-codec/speex_codec.c4
4 files changed, 16 insertions, 14 deletions
diff --git a/pjmedia/src/pjmedia-codec/gsm.c b/pjmedia/src/pjmedia-codec/gsm.c
index 00b7d3fd..f774a5e5 100644
--- a/pjmedia/src/pjmedia-codec/gsm.c
+++ b/pjmedia/src/pjmedia-codec/gsm.c
@@ -54,7 +54,7 @@ static pj_status_t gsm_dealloc_codec( pjmedia_codec_factory *factory,
static pj_status_t gsm_codec_init( pjmedia_codec *codec,
pj_pool_t *pool );
static pj_status_t gsm_codec_open( pjmedia_codec *codec,
- const pjmedia_codec_param *attr );
+ pjmedia_codec_param *attr );
static pj_status_t gsm_codec_close( pjmedia_codec *codec );
static pj_status_t gsm_codec_modify(pjmedia_codec *codec,
const pjmedia_codec_param *attr );
@@ -388,7 +388,7 @@ static pj_status_t gsm_codec_init( pjmedia_codec *codec,
* Open codec.
*/
static pj_status_t gsm_codec_open( pjmedia_codec *codec,
- const pjmedia_codec_param *attr )
+ pjmedia_codec_param *attr )
{
struct gsm_data *gsm_data = codec->codec_data;
@@ -440,7 +440,7 @@ static pj_status_t gsm_codec_modify(pjmedia_codec *codec,
struct gsm_data *gsm_data = codec->codec_data;
pj_assert(gsm_data != NULL);
- pj_assert(gsm_data->encoder == NULL && gsm_data->decoder == NULL);
+ pj_assert(gsm_data->encoder != NULL && gsm_data->decoder != NULL);
gsm_data->vad_enabled = (attr->setting.vad != 0);
gsm_data->plc_enabled = (attr->setting.plc != 0);
diff --git a/pjmedia/src/pjmedia-codec/ilbc.c b/pjmedia/src/pjmedia-codec/ilbc.c
index a16ed1cf..a21b6889 100644
--- a/pjmedia/src/pjmedia-codec/ilbc.c
+++ b/pjmedia/src/pjmedia-codec/ilbc.c
@@ -63,7 +63,7 @@ static pj_status_t ilbc_dealloc_codec(pjmedia_codec_factory *factory,
static pj_status_t ilbc_codec_init(pjmedia_codec *codec,
pj_pool_t *pool );
static pj_status_t ilbc_codec_open(pjmedia_codec *codec,
- const pjmedia_codec_param *attr );
+ pjmedia_codec_param *attr );
static pj_status_t ilbc_codec_close(pjmedia_codec *codec );
static pj_status_t ilbc_codec_modify(pjmedia_codec *codec,
const pjmedia_codec_param *attr );
@@ -364,20 +364,15 @@ static pj_status_t ilbc_codec_init(pjmedia_codec *codec,
* Open codec.
*/
static pj_status_t ilbc_codec_open(pjmedia_codec *codec,
- const pjmedia_codec_param *param_attr )
+ pjmedia_codec_param *attr )
{
struct ilbc_codec *ilbc_codec = (struct ilbc_codec*)codec;
- pjmedia_codec_param attr_copy, *attr;
pj_status_t status;
pj_assert(ilbc_codec != NULL);
pj_assert(ilbc_codec->enc_ready == PJ_FALSE &&
ilbc_codec->dec_ready == PJ_FALSE);
- /* Copy param to temporary location since we need to modify fmtp_mode */
- pj_memcpy(&attr_copy, param_attr, sizeof(*param_attr));
- attr = &attr_copy;
-
/* Decoder mode must be set */
PJ_ASSERT_RETURN(attr->setting.dec_fmtp_mode==20 ||
attr->setting.dec_fmtp_mode==30, PJMEDIA_CODEC_EINMODE);
@@ -392,6 +387,13 @@ static pj_status_t ilbc_codec_open(pjmedia_codec *codec,
PJ_ASSERT_RETURN(attr->setting.enc_fmtp_mode==20 ||
attr->setting.enc_fmtp_mode==30, PJMEDIA_CODEC_EINMODE);
+ /* Update enc_ptime in the param */
+ if (attr->setting.enc_fmtp_mode != attr->setting.dec_fmtp_mode) {
+ attr->info.enc_ptime = attr->setting.enc_fmtp_mode;
+ } else {
+ attr->info.enc_ptime = 0;
+ }
+
/* Create enc */
ilbc_codec->enc_frame_size = initEncode(&ilbc_codec->enc,
attr->setting.enc_fmtp_mode);
diff --git a/pjmedia/src/pjmedia-codec/l16.c b/pjmedia/src/pjmedia-codec/l16.c
index 18b86708..77d76796 100644
--- a/pjmedia/src/pjmedia-codec/l16.c
+++ b/pjmedia/src/pjmedia-codec/l16.c
@@ -59,7 +59,7 @@ static pj_status_t l16_dealloc_codec( pjmedia_codec_factory *factory,
static pj_status_t l16_init( pjmedia_codec *codec,
pj_pool_t *pool );
static pj_status_t l16_open( pjmedia_codec *codec,
- const pjmedia_codec_param *attr );
+ pjmedia_codec_param *attr );
static pj_status_t l16_close( pjmedia_codec *codec );
static pj_status_t l16_modify(pjmedia_codec *codec,
const pjmedia_codec_param *attr );
@@ -489,7 +489,7 @@ static pj_status_t l16_init( pjmedia_codec *codec, pj_pool_t *pool )
}
static pj_status_t l16_open(pjmedia_codec *codec,
- const pjmedia_codec_param *attr )
+ pjmedia_codec_param *attr )
{
/* Nothing to do.. */
PJ_UNUSED_ARG(codec);
diff --git a/pjmedia/src/pjmedia-codec/speex_codec.c b/pjmedia/src/pjmedia-codec/speex_codec.c
index 6c8a1602..a0c61b94 100644
--- a/pjmedia/src/pjmedia-codec/speex_codec.c
+++ b/pjmedia/src/pjmedia-codec/speex_codec.c
@@ -59,7 +59,7 @@ static pj_status_t spx_dealloc_codec( pjmedia_codec_factory *factory,
static pj_status_t spx_codec_init( pjmedia_codec *codec,
pj_pool_t *pool );
static pj_status_t spx_codec_open( pjmedia_codec *codec,
- const pjmedia_codec_param *attr );
+ pjmedia_codec_param *attr );
static pj_status_t spx_codec_close( pjmedia_codec *codec );
static pj_status_t spx_codec_modify(pjmedia_codec *codec,
const pjmedia_codec_param *attr );
@@ -547,7 +547,7 @@ static pj_status_t spx_codec_init( pjmedia_codec *codec,
* Open codec.
*/
static pj_status_t spx_codec_open( pjmedia_codec *codec,
- const pjmedia_codec_param *attr )
+ pjmedia_codec_param *attr )
{
struct spx_private *spx;
int id, tmp;