summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJean-Marc Valin <jean-marc.valin@usherbrooke.ca>2010-11-12 06:47:46 +0800
committerJean-Marc Valin <jean-marc.valin@usherbrooke.ca>2010-11-12 06:47:46 +0800
commitb5be8261315ba949ad4cc8399c617ccd9fdfdf4d (patch)
treed1586bbae76143de6495bb3bf95e6ceddcc48d78
parentae1fad2e26aee9092f7b5d68bf86bf9a0f193745 (diff)
downloadopus-b5be8261315ba949ad4cc8399c617ccd9fdfdf4d.tar.gz
Updated to follow changes in SILK API
m---------silk10
-rw-r--r--src/opus_decoder.c17
-rw-r--r--src/opus_encoder.c15
3 files changed, 31 insertions, 11 deletions
diff --git a/silk b/silk
-Subproject 6c98e344f395b3d1a285885a8be88c0685a346b
+Subproject d513d743fb5d9802e2d39d74a13f5628c155305
diff --git a/src/opus_decoder.c b/src/opus_decoder.c
index ded9c80f..3db3dcba 100644
--- a/src/opus_decoder.c
+++ b/src/opus_decoder.c
@@ -85,7 +85,7 @@ int opus_decode(OpusDecoder *st, const unsigned char *data,
ec_dec dec;
ec_byte_buffer buf;
SKP_SILK_SDK_DecControlStruct DecControl;
- SKP_int16 silk_frame_size;
+ SKP_int32 silk_frame_size;
short pcm_celt[960];
int audiosize;
@@ -126,6 +126,21 @@ int opus_decode(OpusDecoder *st, const unsigned char *data,
if (st->mode != MODE_CELT_ONLY)
{
DecControl.API_sampleRate = st->Fs;
+ DecControl.payloadSize_ms = 1000 * audiosize / st->Fs;
+ if( st->mode == MODE_SILK_ONLY ) {
+ if( st->bandwidth == BANDWIDTH_NARROWBAND ) {
+ DecControl.internalSampleRate = 8000;
+ } else if( st->bandwidth == BANDWIDTH_MEDIUMBAND ) {
+ DecControl.internalSampleRate = 12000;
+ } else if( st->bandwidth == BANDWIDTH_WIDEBAND ) {
+ DecControl.internalSampleRate = 16000;
+ } else {
+ SKP_assert( 0 );
+ }
+ } else {
+ /* Hybrid mode */
+ DecControl.internalSampleRate = 16000;
+ }
/* We Should eventually have to set the bandwidth here */
diff --git a/src/opus_encoder.c b/src/opus_encoder.c
index 60933d7d..f66b189b 100644
--- a/src/opus_encoder.c
+++ b/src/opus_encoder.c
@@ -92,7 +92,7 @@ int opus_encode(OpusEncoder *st, const short *pcm, int frame_size,
{
int i;
int ret=0;
- SKP_int16 nBytes;
+ SKP_int32 nBytes;
ec_enc enc;
ec_byte_buffer buf;
SKP_SILK_SDK_EncControlStruct encControl;
@@ -119,20 +119,25 @@ int opus_encode(OpusEncoder *st, const short *pcm, int frame_size,
if (st->Fs == 100 * frame_size)
encControl.bitRate -= 5000;
}
- encControl.packetSize = frame_size;
+ encControl.payloadSize_ms = 1000 * frame_size / st->Fs;
+
+ if (st->mode == MODE_HYBRID)
+ encControl.minInternalSampleRate = 16000;
+ else
+ encControl.minInternalSampleRate = 8000;
if (st->bandwidth == BANDWIDTH_NARROWBAND)
encControl.maxInternalSampleRate = 8000;
else if (st->bandwidth == BANDWIDTH_MEDIUMBAND)
- encControl.maxInternalSampleRate = 12000;
+ encControl.maxInternalSampleRate = 12000;
else
- encControl.maxInternalSampleRate = 16000;
+ encControl.maxInternalSampleRate = 16000;
/* Call SILK encoder for the low band */
nBytes = bytes_per_packet;
ret = SKP_Silk_SDK_Encode( st->silk_enc, &encControl, pcm, frame_size, &enc, &nBytes );
if( ret ) {
- fprintf (stderr, "SILK encode error\n");
+ fprintf (stderr, "SILK encode error %d\n", ret);
/* Handle error */
}
ret = (ec_enc_tell(&enc, 0)+7)>>3;