/* * Free codec. */ static pj_status_t opus_dealloc_codec(pjmedia_codec_factory *factory, pjmedia_codec *codec) { struct opus_private *opus; PJ_ASSERT_RETURN(factory && codec, PJ_EINVAL); PJ_UNUSED_ARG(factory); PJ_ASSERT_RETURN(factory == &opus_factory.base, PJ_EINVAL); opus = (struct opus_private *)codec->codec_data; /* Close codec, if it's not closed. */ if (opus->enc_ready == PJ_TRUE || opus->dec_ready == PJ_TRUE) { opus_codec_close(codec); } /* Put in the free list. */ pj_mutex_lock(opus_factory.mutex); pj_list_push_front(&opus_factory.codec_list, codec); pj_mutex_unlock(opus_factory.mutex); pj_pool_release(opus->pool); opus->pool = NULL; return PJ_SUCCESS; }
/* * Free codec. */ static pj_status_t codec2_dealloc_codec( pjmedia_codec_factory *factory, pjmedia_codec *codec ) { struct codec2_data *codec2_data; int i; PJ_ASSERT_RETURN(factory && codec, PJ_EINVAL); PJ_ASSERT_RETURN(factory == &codec2_codec_factory.base, PJ_EINVAL); codec2_data = (struct codec2_data*) codec->codec_data; /* Close codec, if it's not closed. */ codec2_codec_close(codec); PJ_UNUSED_ARG(i); /* Re-init silence_period */ pj_set_timestamp32(&codec2_data->last_tx, 0, 0); /* Put in the free list. */ pj_mutex_lock(codec2_codec_factory.mutex); pj_list_push_front(&codec2_codec_factory.codec_list, codec); pj_mutex_unlock(codec2_codec_factory.mutex); return PJ_SUCCESS; }
/* * Free codec. */ static pj_status_t spx_dealloc_codec( pjmedia_codec_factory *factory, pjmedia_codec *codec ) { struct spx_private *spx; PJ_ASSERT_RETURN(factory && codec, PJ_EINVAL); PJ_ASSERT_RETURN(factory == &spx_factory.base, PJ_EINVAL); /* Close codec, if it's not closed. */ spx = (struct spx_private*) codec->codec_data; if (spx->enc != NULL || spx->dec != NULL) { spx_codec_close(codec); } /* Put in the free list. */ pj_mutex_lock(spx_factory.mutex); pj_list_push_front(&spx_factory.codec_list, codec); pj_mutex_unlock(spx_factory.mutex); return PJ_SUCCESS; }
/* * Free codec. */ static pj_status_t gsm_dealloc_codec( pjmedia_codec_factory *factory, pjmedia_codec *codec ) { struct gsm_data *gsm_data; int i; PJ_ASSERT_RETURN(factory && codec, PJ_EINVAL); PJ_ASSERT_RETURN(factory == &gsm_codec_factory.base, PJ_EINVAL); gsm_data = (struct gsm_data*) codec->codec_data; /* Close codec, if it's not closed. */ gsm_codec_close(codec); #if !PLC_DISABLED /* Clear left samples in the PLC, since codec+plc will be reused * next time. */ for (i=0; i<2; ++i) { pj_int16_t frame[160]; pjmedia_zero_samples(frame, PJ_ARRAY_SIZE(frame)); pjmedia_plc_save(gsm_data->plc, frame); } #else PJ_UNUSED_ARG(i); #endif /* Re-init silence_period */ pj_set_timestamp32(&gsm_data->last_tx, 0, 0); /* Put in the free list. */ pj_mutex_lock(gsm_codec_factory.mutex); pj_list_push_front(&gsm_codec_factory.codec_list, codec); pj_mutex_unlock(gsm_codec_factory.mutex); return PJ_SUCCESS; }
static pj_status_t tsx_add(pj_stun_session *sess, pj_stun_tx_data *tdata) { pj_list_push_front(&sess->pending_request_list, tdata); return PJ_SUCCESS; }