/* * Free codec. */ static pj_status_t silk_dealloc_codec( pjmedia_codec_factory *factory, pjmedia_codec *codec ) { struct silk_private *silk; PJ_ASSERT_RETURN(factory && codec, PJ_EINVAL); PJ_UNUSED_ARG(factory); PJ_ASSERT_RETURN(factory == &silk_factory.base, PJ_EINVAL); silk = (struct silk_private*) codec->codec_data; /* Close codec, if it's not closed. */ if (silk->enc_ready == PJ_TRUE || silk->dec_ready == PJ_TRUE) { silk_codec_close(codec); } /* Put in the free list. */ pj_mutex_lock(silk_factory.mutex); pj_list_push_front(&silk_factory.codec_list, codec); pj_mutex_unlock(silk_factory.mutex); pj_pool_release(silk->pool); return PJ_SUCCESS; }
/* * Free codec. */ static pj_status_t silk_dealloc_codec( pjmedia_codec_factory *factory, pjmedia_codec *codec ) { silk_private *silk; PJ_ASSERT_RETURN(factory && codec, PJ_EINVAL); PJ_ASSERT_RETURN(factory == &silk_factory.base, PJ_EINVAL); silk = (silk_private*)codec->codec_data; /* Close codec, if it's not closed. */ if (silk->enc_ready == PJ_TRUE || silk->dec_ready == PJ_TRUE) { silk_codec_close(codec); } pj_pool_release(silk->pool); return PJ_SUCCESS; }