diff options
Diffstat (limited to 'pjmedia/src/pjmedia/codec.c')
-rw-r--r-- | pjmedia/src/pjmedia/codec.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/pjmedia/src/pjmedia/codec.c b/pjmedia/src/pjmedia/codec.c index 647b0b5d..111ad0c7 100644 --- a/pjmedia/src/pjmedia/codec.c +++ b/pjmedia/src/pjmedia/codec.c @@ -72,10 +72,19 @@ PJ_DEF(pj_status_t) pjmedia_codec_mgr_init (pjmedia_codec_mgr *mgr, */ PJ_DEF(pj_status_t) pjmedia_codec_mgr_destroy (pjmedia_codec_mgr *mgr) { + pjmedia_codec_factory *factory; unsigned i; PJ_ASSERT_RETURN(mgr, PJ_EINVAL); + /* Destroy all factories in the list */ + factory = mgr->factory_list.next; + while (factory != &mgr->factory_list) { + pjmedia_codec_factory *next = factory->next; + (*factory->op->destroy)(); + factory = next; + } + /* Cleanup all pools of all codec default params */ for (i=0; i<mgr->codec_cnt; ++i) { if (mgr->codec_desc[i].param) { @@ -111,6 +120,13 @@ PJ_DEF(pj_status_t) pjmedia_codec_mgr_register_factory( pjmedia_codec_mgr *mgr, PJ_ASSERT_RETURN(mgr && factory, PJ_EINVAL); + /* Since 2.0 we require codec factory to implement "destroy" op. Please + * see: https://trac.pjsip.org/repos/ticket/1294 + * + * Really! Please do see it. + */ + PJ_ASSERT_RETURN(factory->op->destroy != NULL, PJ_ENOTSUP); + /* Enum codecs */ count = PJ_ARRAY_SIZE(info); status = factory->op->enum_info(factory, &count, info); |