示例#1
0
int opus_encoder_get_size(int channels)
{
	int silkEncSizeBytes, celtEncSizeBytes;
	int ret;
	ret = silk_Get_Encoder_Size( &silkEncSizeBytes );
	if(ret)
		return 0;
	silkEncSizeBytes = align(silkEncSizeBytes);
    celtEncSizeBytes = celt_encoder_get_size(channels);
    return align(sizeof(OpusEncoder))+silkEncSizeBytes+celtEncSizeBytes;

}
示例#2
0
SWIGEXPORT jint JNICALL Java_com_morlunk_jumble_audio_celt11_CELT11JNI_celt_1encoder_1get_1size(JNIEnv *jenv, jclass jcls, jint jarg1) {
  jint jresult = 0 ;
  int arg1 ;
  int result;
  
  (void)jenv;
  (void)jcls;
  arg1 = (int)jarg1; 
  result = (int)celt_encoder_get_size(arg1);
  jresult = (jint)result; 
  return jresult;
}
示例#3
0
OpusEncoder *opus_encoder_init(OpusEncoder* st, int Fs, int channels)
{
	void *silk_enc;
	CELTEncoder *celt_enc;
    int err;
	int ret, silkEncSizeBytes, celtEncSizeBytes;

	memset(st, 0, sizeof(OpusEncoder));
    /* Create SILK encoder */
    ret = silk_Get_Encoder_Size( &silkEncSizeBytes );
    if( ret )
    	return NULL;
	silkEncSizeBytes = align(silkEncSizeBytes);
    celtEncSizeBytes = celt_encoder_get_size(channels);
    st->silk_enc_offset = align(sizeof(OpusEncoder));
    st->celt_enc_offset = st->silk_enc_offset+silkEncSizeBytes;
    silk_enc = (char*)st+st->silk_enc_offset;
    celt_enc = (CELTEncoder*)((char*)st+st->celt_enc_offset);

    st->stream_channels = st->channels = channels;

    st->Fs = Fs;

    ret = silk_InitEncoder( silk_enc, &st->silk_mode );
    if( ret )
        goto failure;

    /* default SILK parameters */
    st->silk_mode.nChannelsAPI              = channels;
    st->silk_mode.nChannelsInternal         = channels;
    st->silk_mode.API_sampleRate            = st->Fs;
    st->silk_mode.maxInternalSampleRate     = 16000;
    st->silk_mode.minInternalSampleRate     = 8000;
    st->silk_mode.desiredInternalSampleRate = 16000;
    st->silk_mode.payloadSize_ms            = 20;
    st->silk_mode.bitRate                   = 25000;
    st->silk_mode.packetLossPercentage      = 0;
    st->silk_mode.complexity                = 10;
    st->silk_mode.useInBandFEC              = 0;
    st->silk_mode.useDTX                    = 0;
    st->silk_mode.useCBR                    = 0;

    /* Create CELT encoder */
	/* Initialize CELT encoder */
	celt_encoder_init(celt_enc, Fs, channels, &err);
	if (err != CELT_OK)
		goto failure;
    celt_encoder_ctl(celt_enc, CELT_SET_SIGNALLING(0));

	st->mode = MODE_HYBRID;
	st->bandwidth = BANDWIDTH_FULLBAND;
	st->use_vbr = 0;
    st->user_bitrate_bps = OPUS_BITRATE_AUTO;
	st->bitrate_bps = 3000+Fs*channels;
	st->user_mode = OPUS_MODE_AUTO;
	st->user_bandwidth = BANDWIDTH_AUTO;
	st->voice_ratio = 90;
	st->first = 1;

	st->encoder_buffer = st->Fs/100;
	st->delay_compensation = st->Fs/400;
	if (st->Fs > 16000)
		st->delay_compensation += 10;
	return st;
failure:
    free(st);
    return NULL;
}