Skip to content
Snippets Groups Projects
Commit 2e8a55cc authored by Jean-Marc Valin's avatar Jean-Marc Valin
Browse files

Hybrid decoder also in a single block of memory

parent bcdfe634
No related branches found
No related tags found
No related merge requests found
...@@ -44,19 +44,27 @@ ...@@ -44,19 +44,27 @@
HybridDecoder *hybrid_decoder_create(int Fs) HybridDecoder *hybrid_decoder_create(int Fs)
{ {
int ret, decSizeBytes; char *raw_state;
int ret, silkDecSizeBytes, celtDecSizeBytes;
CELTMode *celtMode;
HybridDecoder *st; HybridDecoder *st;
st = malloc(sizeof(HybridDecoder)); /* We should not have to create a CELT mode for each encoder state */
celtMode = celt_mode_create(Fs, Fs/50, NULL);
st->Fs = Fs;
/* Initialize SILK encoder */ /* Initialize SILK encoder */
ret = SKP_Silk_SDK_Get_Decoder_Size( &decSizeBytes ); ret = SKP_Silk_SDK_Get_Decoder_Size( &silkDecSizeBytes );
if( ret ) { if( ret ) {
/* Handle error */ /* Handle error */
} }
st->silk_dec = malloc( decSizeBytes ); celtDecSizeBytes = celt_decoder_get_size(celtMode, 1);
raw_state = calloc(sizeof(HybridDecoder)+silkDecSizeBytes+celtDecSizeBytes, 1);
st = (HybridDecoder*)raw_state;
st->silk_dec = (void*)(raw_state+sizeof(HybridDecoder));
st->celt_dec = (CELTDecoder*)(raw_state+sizeof(HybridDecoder)+silkDecSizeBytes);
st->Fs = Fs;
st->celt_mode = celtMode;
/* Reset decoder */ /* Reset decoder */
ret = SKP_Silk_SDK_InitDecoder( st->silk_dec ); ret = SKP_Silk_SDK_InitDecoder( st->silk_dec );
...@@ -64,10 +72,8 @@ HybridDecoder *hybrid_decoder_create(int Fs) ...@@ -64,10 +72,8 @@ HybridDecoder *hybrid_decoder_create(int Fs)
/* Handle error */ /* Handle error */
} }
/* We should not have to create a CELT mode for each encoder state */ /* Initialize CELT decoder */
st->celt_mode = celt_mode_create(Fs, Fs/50, NULL); st->celt_dec = celt_decoder_init(st->celt_dec, st->celt_mode, 1, NULL);
/* Initialize CELT encoder */
st->celt_dec = celt_decoder_create(st->celt_mode, 1, NULL);
return st; return st;
...@@ -171,8 +177,6 @@ void hybrid_decoder_ctl(HybridDecoder *st, int request, ...) ...@@ -171,8 +177,6 @@ void hybrid_decoder_ctl(HybridDecoder *st, int request, ...)
void hybrid_decoder_destroy(HybridDecoder *st) void hybrid_decoder_destroy(HybridDecoder *st)
{ {
free(st->silk_dec);
celt_decoder_destroy(st->celt_dec);
celt_mode_destroy(st->celt_mode); celt_mode_destroy(st->celt_mode);
free(st); free(st);
......
...@@ -54,10 +54,10 @@ HybridEncoder *hybrid_encoder_create(int Fs) ...@@ -54,10 +54,10 @@ HybridEncoder *hybrid_encoder_create(int Fs)
/* Create SILK encoder */ /* Create SILK encoder */
ret = SKP_Silk_SDK_Get_Encoder_Size( &silkEncSizeBytes ); ret = SKP_Silk_SDK_Get_Encoder_Size( &silkEncSizeBytes );
celtEncSizeBytes = celt_encoder_get_size(celtMode, 1);
if( ret ) { if( ret ) {
/* Handle error */ /* Handle error */
} }
celtEncSizeBytes = celt_encoder_get_size(celtMode, 1);
raw_state = calloc(sizeof(HybridEncoder)+silkEncSizeBytes+celtEncSizeBytes, 1); raw_state = calloc(sizeof(HybridEncoder)+silkEncSizeBytes+celtEncSizeBytes, 1);
st = (HybridEncoder*)raw_state; st = (HybridEncoder*)raw_state;
st->silk_enc = (void*)(raw_state+sizeof(HybridEncoder)); st->silk_enc = (void*)(raw_state+sizeof(HybridEncoder));
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment