diff options
author | Benny Prijono <bennylp@teluu.com> | 2006-04-27 22:36:40 +0000 |
---|---|---|
committer | Benny Prijono <bennylp@teluu.com> | 2006-04-27 22:36:40 +0000 |
commit | 4bab78a009cbfc57426066ebb5070e7609d4be04 (patch) | |
tree | 016b6205dfafc5084da23be9467f2c092cea01a8 /pjmedia/src/pjmedia-codec/speex_codec.c | |
parent | 76cf603ff005c45c996cbaf742913f418eb09910 (diff) |
Initial support for stereo codecs, and added L16 codecs. Also better handling for case remote media is restarted
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@411 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjmedia/src/pjmedia-codec/speex_codec.c')
-rw-r--r-- | pjmedia/src/pjmedia-codec/speex_codec.c | 66 |
1 files changed, 23 insertions, 43 deletions
diff --git a/pjmedia/src/pjmedia-codec/speex_codec.c b/pjmedia/src/pjmedia-codec/speex_codec.c index 840737ee..280cfbdd 100644 --- a/pjmedia/src/pjmedia-codec/speex_codec.c +++ b/pjmedia/src/pjmedia-codec/speex_codec.c @@ -56,8 +56,6 @@ static pj_status_t spx_dealloc_codec( pjmedia_codec_factory *factory, pjmedia_codec *codec ); /* Prototypes for Speex implementation. */ -static pj_status_t spx_codec_default_attr(pjmedia_codec *codec, - pjmedia_codec_param *attr); static pj_status_t spx_codec_init( pjmedia_codec *codec, pj_pool_t *pool ); static pj_status_t spx_codec_open( pjmedia_codec *codec, @@ -80,7 +78,6 @@ static pj_status_t spx_codec_decode( pjmedia_codec *codec, /* Definition for Speex codec operations. */ static pjmedia_codec_op spx_op = { - &spx_codec_default_attr, &spx_codec_init, &spx_codec_open, &spx_codec_close, @@ -230,7 +227,7 @@ PJ_DEF(pj_status_t) pjmedia_codec_speex_init( pjmedia_endpt *endpt, /* Initialize default Speex parameter. */ spx_factory.speex_param[PARAM_NB].enabled = ((options & PJMEDIA_SPEEX_NO_NB) == 0); - spx_factory.speex_param[PARAM_NB].pt = 102; + spx_factory.speex_param[PARAM_NB].pt = PJMEDIA_RTP_PT_SPEEX_NB; spx_factory.speex_param[PARAM_NB].mode = &speex_nb_mode; spx_factory.speex_param[PARAM_NB].clock_rate = 8000; spx_factory.speex_param[PARAM_NB].quality = quality; @@ -238,7 +235,7 @@ PJ_DEF(pj_status_t) pjmedia_codec_speex_init( pjmedia_endpt *endpt, spx_factory.speex_param[PARAM_WB].enabled = ((options & PJMEDIA_SPEEX_NO_WB) == 0); - spx_factory.speex_param[PARAM_WB].pt = 103; + spx_factory.speex_param[PARAM_WB].pt = PJMEDIA_RTP_PT_SPEEX_WB; spx_factory.speex_param[PARAM_WB].mode = &speex_wb_mode; spx_factory.speex_param[PARAM_WB].clock_rate = 16000; spx_factory.speex_param[PARAM_WB].quality = quality; @@ -246,7 +243,7 @@ PJ_DEF(pj_status_t) pjmedia_codec_speex_init( pjmedia_endpt *endpt, spx_factory.speex_param[PARAM_UWB].enabled = ((options & PJMEDIA_SPEEX_NO_UWB) == 0); - spx_factory.speex_param[PARAM_UWB].pt = 104; + spx_factory.speex_param[PARAM_UWB].pt = PJMEDIA_RTP_PT_SPEEX_UWB; spx_factory.speex_param[PARAM_UWB].mode = &speex_uwb_mode; spx_factory.speex_param[PARAM_UWB].clock_rate = 32000; spx_factory.speex_param[PARAM_UWB].quality = quality; @@ -358,7 +355,7 @@ static pj_status_t spx_test_alloc( pjmedia_codec_factory *factory, /* Check clock-rate */ for (i=0; i<PJ_ARRAY_SIZE(spx_factory.speex_param); ++i) { - if (info->sample_rate == spx_factory.speex_param[i].clock_rate) { + if (info->clock_rate == spx_factory.speex_param[i].clock_rate) { /* Okay, let's Speex! */ return PJ_SUCCESS; } @@ -381,18 +378,19 @@ static pj_status_t spx_default_attr (pjmedia_codec_factory *factory, pj_memset(attr, 0, sizeof(pjmedia_codec_param)); attr->pt = id->pt; + attr->channel_cnt = 1; - if (id->sample_rate <= 8000) { - attr->sample_rate = spx_factory.speex_param[PARAM_NB].clock_rate; + if (id->clock_rate <= 8000) { + attr->clock_rate = spx_factory.speex_param[PARAM_NB].clock_rate; attr->avg_bps = spx_factory.speex_param[PARAM_NB].bitrate; - } else if (id->sample_rate <= 16000) { - attr->sample_rate = spx_factory.speex_param[PARAM_WB].clock_rate; + } else if (id->clock_rate <= 16000) { + attr->clock_rate = spx_factory.speex_param[PARAM_WB].clock_rate; attr->avg_bps = spx_factory.speex_param[PARAM_WB].bitrate; } else { /* Wow.. somebody is doing ultra-wideband. Cool...! */ - attr->sample_rate = spx_factory.speex_param[PARAM_UWB].clock_rate; + attr->clock_rate = spx_factory.speex_param[PARAM_UWB].clock_rate; attr->avg_bps = spx_factory.speex_param[PARAM_UWB].bitrate; } @@ -401,14 +399,14 @@ static pj_status_t spx_default_attr (pjmedia_codec_factory *factory, attr->pt = id->pt; /* Default flags. */ - attr->cng_enabled = 1; - attr->concl_enabled = 1; - attr->hpf_enabled = 1; - attr->lpf_enabled =1 ; - attr->penh_enabled =1 ; + attr->cng = 1; + attr->concl = 1; + attr->hpf = 1; + attr->lpf =1 ; + attr->penh =1 ; /* Default, set VAD off as it caused voice chip off */ - attr->vad_enabled = 0; + attr->vad = 0; return PJ_SUCCESS; } @@ -442,7 +440,8 @@ static pj_status_t spx_enum_codecs(pjmedia_codec_factory *factory, codecs[*count].encoding_name = pj_str("speex"); codecs[*count].pt = spx_factory.speex_param[i].pt; codecs[*count].type = PJMEDIA_TYPE_AUDIO; - codecs[*count].sample_rate = spx_factory.speex_param[i].clock_rate; + codecs[*count].clock_rate = spx_factory.speex_param[i].clock_rate; + codecs[*count].channel_cnt = 1; ++*count; } @@ -486,9 +485,9 @@ static pj_status_t spx_alloc_codec( pjmedia_codec_factory *factory, spx->enc = NULL; spx->dec = NULL; - if (id->sample_rate <= 8000) + if (id->clock_rate <= 8000) spx->param_id = PARAM_NB; - else if (id->sample_rate <= 16000) + else if (id->clock_rate <= 16000) spx->param_id = PARAM_WB; else spx->param_id = PARAM_UWB; @@ -523,25 +522,6 @@ static pj_status_t spx_dealloc_codec( pjmedia_codec_factory *factory, } /* - * Get codec default attributes. - */ -static pj_status_t spx_codec_default_attr( pjmedia_codec *codec, - pjmedia_codec_param *attr) -{ - struct spx_private *spx; - pjmedia_codec_info info; - - spx = (struct spx_private*) codec->codec_data; - - info.encoding_name = pj_str("speex"); - info.pt = 200; /* Don't care */ - info.sample_rate = spx_factory.speex_param[spx->param_id].clock_rate; - info.type = PJMEDIA_TYPE_AUDIO; - - return spx_default_attr( codec->factory, &info, attr); -} - -/* * Init codec. */ static pj_status_t spx_codec_init( pjmedia_codec *codec, @@ -579,12 +559,12 @@ static pj_status_t spx_codec_open( pjmedia_codec *codec, } /* Sampling rate. */ - tmp = attr->sample_rate; + tmp = attr->clock_rate; speex_encoder_ctl(spx->enc, SPEEX_SET_SAMPLING_RATE, &spx_factory.speex_param[id].clock_rate); /* VAD */ - tmp = attr->vad_enabled; + tmp = attr->vad; speex_encoder_ctl(spx->enc, SPEEX_SET_VAD, &tmp); /* Complexity */ @@ -608,7 +588,7 @@ static pj_status_t spx_codec_open( pjmedia_codec *codec, &spx_factory.speex_param[id].clock_rate); /* PENH */ - tmp = attr->penh_enabled; + tmp = attr->penh; speex_decoder_ctl(spx->dec, SPEEX_SET_ENH, &tmp); return PJ_SUCCESS; |