diff options
author | Liong Sauw Ming <ming@teluu.com> | 2013-01-29 08:09:15 +0000 |
---|---|---|
committer | Liong Sauw Ming <ming@teluu.com> | 2013-01-29 08:09:15 +0000 |
commit | 064af246091c9d6475dcdd742b0abf0c3d1a07d8 (patch) | |
tree | 3e79ea209c9e36ea41f4d42d8f22aef227c753a0 /pjmedia/src/pjmedia-codec | |
parent | c3814751455d7cfcb854970344e952f0a88ba4d9 (diff) |
Re #1608: Fixed the way codec is initialized, enumerated, and deinit since both NB and WB use the same factory
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@4335 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjmedia/src/pjmedia-codec')
-rw-r--r-- | pjmedia/src/pjmedia-codec/audio_codecs.c | 13 | ||||
-rw-r--r-- | pjmedia/src/pjmedia-codec/opencore_amr.c | 57 |
2 files changed, 34 insertions, 36 deletions
diff --git a/pjmedia/src/pjmedia-codec/audio_codecs.c b/pjmedia/src/pjmedia-codec/audio_codecs.c index 3393fc5b..d8eb555f 100644 --- a/pjmedia/src/pjmedia-codec/audio_codecs.c +++ b/pjmedia/src/pjmedia-codec/audio_codecs.c @@ -107,16 +107,9 @@ pjmedia_codec_register_audio_codecs(pjmedia_endpt *endpt, return status; #endif /* PJMEDIA_HAS_L16_CODEC */ -#if PJMEDIA_HAS_OPENCORE_AMRNB_CODEC - /* Register OpenCORE AMR-NB */ - status = pjmedia_codec_opencore_amrnb_init(endpt); - if (status != PJ_SUCCESS) - return status; -#endif - -#if PJMEDIA_HAS_OPENCORE_AMRWB_CODEC - /* Register OpenCORE AMR-WB */ - status = pjmedia_codec_opencore_amrwb_init(endpt); +#if PJMEDIA_HAS_OPENCORE_AMRNB_CODEC || PJMEDIA_HAS_OPENCORE_AMRWB_CODEC + /* Register OpenCORE AMR */ + status = pjmedia_codec_opencore_amr_init(endpt, 0); if (status != PJ_SUCCESS) return status; #endif diff --git a/pjmedia/src/pjmedia-codec/opencore_amr.c b/pjmedia/src/pjmedia-codec/opencore_amr.c index 0bd3a5f3..cc6a4ab3 100644 --- a/pjmedia/src/pjmedia-codec/opencore_amr.c +++ b/pjmedia/src/pjmedia-codec/opencore_amr.c @@ -198,7 +198,8 @@ static const pj_uint16_t* amr_bitrates[2] = /* * Initialize and register AMR codec factory to pjmedia endpoint. */ -static pj_status_t amr_init( pjmedia_endpt *endpt ) +PJ_DEF(pj_status_t) pjmedia_codec_opencore_amr_init( pjmedia_endpt *endpt, + unsigned options) { pjmedia_codec_mgr *codec_mgr; pj_str_t codec_name; @@ -211,8 +212,18 @@ static pj_status_t amr_init( pjmedia_endpt *endpt ) amr_codec_factory.base.op = &amr_factory_op; amr_codec_factory.base.factory_data = NULL; amr_codec_factory.endpt = endpt; +#ifdef USE_AMRNB + amr_codec_factory.init[IDX_AMR_NB] = ((options & PJMEDIA_AMR_NO_NB) == 0); +#else + amr_codec_factory.init[IDX_AMR_NB] = PJ_FALSE; +#endif +#ifdef USE_AMRWB + amr_codec_factory.init[IDX_AMR_WB] = ((options & PJMEDIA_AMR_NO_WB) == 0); +#else + amr_codec_factory.init[IDX_AMR_WB] = PJ_FALSE; +#endif - amr_codec_factory.pool = pjmedia_endpt_create_pool(endpt, "amr", 1000, + amr_codec_factory.pool = pjmedia_endpt_create_pool(endpt, "amr", 1000, 1000); if (!amr_codec_factory.pool) return PJ_ENOMEM; @@ -247,18 +258,15 @@ on_error: return status; } -PJ_DEF(pj_status_t) pjmedia_codec_opencore_amrnb_init( pjmedia_endpt *endpt ) +PJ_DEF(pj_status_t) +pjmedia_codec_opencore_amr_init_default( pjmedia_endpt *endpt ) { - amr_codec_factory.init[IDX_AMR_NB] = PJ_TRUE; - - return amr_init(endpt); + return pjmedia_codec_opencore_amr_init(endpt, 0); } -PJ_DEF(pj_status_t) pjmedia_codec_opencore_amrwb_init( pjmedia_endpt *endpt ) +PJ_DEF(pj_status_t) pjmedia_codec_opencore_amrnb_init( pjmedia_endpt *endpt ) { - amr_codec_factory.init[IDX_AMR_WB] = PJ_TRUE; - - return amr_init(endpt); + return pjmedia_codec_opencore_amr_init(endpt, PJMEDIA_AMR_NO_WB); } @@ -266,16 +274,13 @@ PJ_DEF(pj_status_t) pjmedia_codec_opencore_amrwb_init( pjmedia_endpt *endpt ) * Unregister AMR codec factory from pjmedia endpoint and deinitialize * the AMR codec library. */ -static pj_status_t amr_deinit(void) +PJ_DEF(pj_status_t) pjmedia_codec_opencore_amr_deinit(void) { pjmedia_codec_mgr *codec_mgr; pj_status_t status; - if (amr_codec_factory.init[IDX_AMR_NB] || - amr_codec_factory.init[IDX_AMR_WB]) - { - return PJ_SUCCESS; - } + amr_codec_factory.init[IDX_AMR_NB] = PJ_FALSE; + amr_codec_factory.init[IDX_AMR_WB] = PJ_FALSE; if (amr_codec_factory.pool == NULL) return PJ_SUCCESS; @@ -301,16 +306,16 @@ static pj_status_t amr_deinit(void) PJ_DEF(pj_status_t) pjmedia_codec_opencore_amrnb_deinit(void) { - amr_codec_factory.init[IDX_AMR_NB] = PJ_FALSE; - - return amr_deinit(); -} - -PJ_DEF(pj_status_t) pjmedia_codec_opencore_amrwb_deinit(void) -{ - amr_codec_factory.init[IDX_AMR_WB] = PJ_FALSE; + if (amr_codec_factory.init[IDX_AMR_NB] && + amr_codec_factory.init[IDX_AMR_WB]) + { + PJ_LOG(4, (THIS_FILE, "Should call " + "pjmedia_codec_opencore_amr_deinit() instead")); + + return PJ_EINVALIDOP; + } - return amr_deinit(); + return pjmedia_codec_opencore_amr_deinit(); } static pj_status_t @@ -447,7 +452,7 @@ static pj_status_t amr_enum_codecs( pjmedia_codec_factory *factory, (*count)++; } - if (amr_codec_factory.init[IDX_AMR_NB]) { + if (amr_codec_factory.init[IDX_AMR_WB]) { pj_bzero(&codecs[*count], sizeof(pjmedia_codec_info)); codecs[*count].encoding_name = pj_str("AMR-WB"); codecs[*count].pt = PJMEDIA_RTP_PT_AMRWB; |