示例#1
0
/*
 * 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;
}
示例#2
0
文件: silk.c 项目: avble/natClientEx
/*
 * 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;
}