Example #1
0
/*
 * 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;
}
Example #2
0
/*
 * 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;
}
Example #3
0
/*
 * 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;
}
Example #4
0
/*
 * 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;
}
Example #5
0
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;
}