From 67008d23cd569595409703b8341533e8ced01baf Mon Sep 17 00:00:00 2001 From: Jean-Marc Valin <jean-marc.valin@octasic.com> Date: Tue, 20 Jul 2010 11:13:30 -0400 Subject: [PATCH] Support for setting the audio bandwidth --- celt | 2 +- src/hybrid.h | 7 ++++--- src/hybrid_decoder.c | 9 ++++++++- src/hybrid_encoder.c | 15 ++++++++++++++- 4 files changed, 27 insertions(+), 6 deletions(-) diff --git a/celt b/celt index b1e017f58..6bf3b0a7a 160000 --- a/celt +++ b/celt @@ -1 +1 @@ -Subproject commit b1e017f58d2bb319eb7bc3305048185a9c8fe9d9 +Subproject commit 6bf3b0a7a13e469d4a2e161143a240220f563150 diff --git a/src/hybrid.h b/src/hybrid.h index ae1566dab..541fca168 100644 --- a/src/hybrid.h +++ b/src/hybrid.h @@ -52,9 +52,10 @@ extern "C" { #define MODE_CELT_ONLY 1002 #define BANDWIDTH_NARROWBAND 1100 -#define BANDWIDTH_WIDEBAND 1101 -#define BANDWIDTH_SUPERWIDEBAND 1102 -#define BANDWIDTH_FULLBAND 1103 +#define BANDWIDTH_MEDIUMBAND 1101 +#define BANDWIDTH_WIDEBAND 1102 +#define BANDWIDTH_SUPERWIDEBAND 1103 +#define BANDWIDTH_FULLBAND 1104 diff --git a/src/hybrid_decoder.c b/src/hybrid_decoder.c index 8eab5c907..8425350a5 100644 --- a/src/hybrid_decoder.c +++ b/src/hybrid_decoder.c @@ -88,6 +88,9 @@ int hybrid_decode(HybridDecoder *st, const unsigned char *data, if (st->mode != MODE_CELT_ONLY) { DecControl.API_sampleRate = st->Fs; + + /* We Should eventually have to set the bandwidth here */ + /* Call SILK encoder for the low band */ silk_ret = SKP_Silk_SDK_Decode( st->silk_dec, &DecControl, 0, &dec, len, pcm, &silk_frame_size ); if (silk_ret) @@ -108,8 +111,12 @@ int hybrid_decode(HybridDecoder *st, const unsigned char *data, celt_decoder_ctl(st->celt_dec, CELT_SET_START_BAND(0)); } - if (st->mode != MODE_SILK_ONLY) + if (st->mode != MODE_SILK_ONLY && st->bandwidth > BANDWIDTH_WIDEBAND) { + if (st->bandwidth == BANDWIDTH_SUPERWIDEBAND) + celt_decoder_ctl(st->celt_dec, CELT_SET_END_BAND(20)); + else + celt_decoder_ctl(st->celt_dec, CELT_SET_END_BAND(21)); /* Encode high band with CELT */ celt_ret = celt_decode_with_ec(st->celt_dec, data, len, pcm_celt, frame_size, &dec); for (i=0;i<frame_size;i++) diff --git a/src/hybrid_encoder.c b/src/hybrid_encoder.c index 413f08b22..2acf3eb5e 100644 --- a/src/hybrid_encoder.c +++ b/src/hybrid_encoder.c @@ -103,6 +103,14 @@ int hybrid_encode(HybridEncoder *st, const short *pcm, int frame_size, if (st->Fs / frame_size == 100) st->encControl.bitRate += 5000; st->encControl.packetSize = frame_size; + + if (st->bandwidth == BANDWIDTH_NARROWBAND) + st->encControl.maxInternalSampleRate = 8000; + else if (st->bandwidth == BANDWIDTH_MEDIUMBAND) + st->encControl.maxInternalSampleRate = 12000; + else + st->encControl.maxInternalSampleRate = 16000; + /* Call SILK encoder for the low band */ nBytes = bytes_per_packet; ret = SKP_Silk_SDK_Encode( st->silk_enc, &st->encControl, pcm, frame_size, &enc, &nBytes ); @@ -121,10 +129,15 @@ int hybrid_encode(HybridEncoder *st, const short *pcm, int frame_size, celt_encoder_ctl(st->celt_enc, CELT_SET_START_BAND(0)); } - if (st->mode != MODE_SILK_ONLY) + if (st->mode != MODE_SILK_ONLY && st->bandwidth > BANDWIDTH_WIDEBAND) { short buf[960]; + if (st->bandwidth == BANDWIDTH_SUPERWIDEBAND) + celt_encoder_ctl(st->celt_enc, CELT_SET_END_BAND(20)); + else + celt_encoder_ctl(st->celt_enc, CELT_SET_END_BAND(21)); + for (i=0;i<ENCODER_DELAY_COMPENSATION;i++) buf[i] = st->delay_buffer[i]; for (;i<frame_size;i++) -- GitLab