diff --git a/src/opus_encoder.c b/src/opus_encoder.c index a87852bda8b4b717736d248f4533fa67d55fa65b..ba0cdc4d6f3885df9134deee2929982441be56e5 100644 --- a/src/opus_encoder.c +++ b/src/opus_encoder.c @@ -96,7 +96,6 @@ int opus_encode(OpusEncoder *st, const short *pcm, int frame_size, SKP_int32 nBytes; ec_enc enc; ec_byte_buffer buf; - SKP_SILK_SDK_EncControlStruct encControl; int framerate, period; int silk_internal_bandwidth; int bytes_target; diff --git a/src/test_opus.c b/src/test_opus.c index 7353f4392edffed2376284080984f32e53f7612f..ba7aa39baef114174377184dbce6fb1bbfc29c43 100644 --- a/src/test_opus.c +++ b/src/test_opus.c @@ -51,7 +51,7 @@ void print_usage( char* argv[] ) fprintf(stderr, "mode: 0 for SILK, 1 for hybrid, 2 for CELT:\n" ); fprintf(stderr, "options:\n" ); fprintf(stderr, "-vbr : enable variable bitrate (recommended for SILK)\n" ); - fprintf(stderr, "-internal_rate <Hz> : internal sampling rate in Hz, default: input smplng rate\n" ); + fprintf(stderr, "-bandwidth <NB|MB|WB|SWB|FB> : audio bandwidth (from narrowband to fullband)\n" ); fprintf(stderr, "-max_payload <bytes> : maximum payload size in bytes, default: 1024\n" ); fprintf(stderr, "-complexity <comp> : SILK complexity, 0: low, 1: medium, 2: high; default: 2\n" ); fprintf(stderr, "-inbandfec : enable SILK inband FEC\n" ); @@ -108,6 +108,7 @@ int main(int argc, char *argv[]) /* defaults: */ use_vbr = 0; + int bandwidth=-1; internal_sampling_rate_Hz = sampling_rate; max_payload_bytes = MAX_PACKET; complexity = 2; @@ -121,8 +122,21 @@ int main(int argc, char *argv[]) if( STR_CASEINSENSITIVE_COMPARE( argv[ args ], "-vbr" ) == 0 ) { use_vbr = 1; args++; - } else if( STR_CASEINSENSITIVE_COMPARE( argv[ args ], "-internal_rate" ) == 0 ) { - internal_sampling_rate_Hz = atoi( argv[ args + 1 ] ); + } else if( STR_CASEINSENSITIVE_COMPARE( argv[ args ], "-bandwidth" ) == 0 ) { + if (strcmp(argv[ args + 1 ], "NB")==0) + bandwidth = BANDWIDTH_NARROWBAND; + else if (strcmp(argv[ args + 1 ], "MB")==0) + bandwidth = BANDWIDTH_MEDIUMBAND; + else if (strcmp(argv[ args + 1 ], "WB")==0) + bandwidth = BANDWIDTH_WIDEBAND; + else if (strcmp(argv[ args + 1 ], "SWB")==0) + bandwidth = BANDWIDTH_SUPERWIDEBAND; + else if (strcmp(argv[ args + 1 ], "FB")==0) + bandwidth = BANDWIDTH_FULLBAND; + else { + fprintf(stderr, "Unknown bandwidth %s. Supported are NB, MB, WB, SWB, FB.\n", argv[ args + 1 ]); + return 1; + } args += 2; } else if( STR_CASEINSENSITIVE_COMPARE( argv[ args ], "-max_payload" ) == 0 ) { max_payload_bytes = atoi( argv[ args + 1 ] ); @@ -179,28 +193,39 @@ int main(int argc, char *argv[]) return 1; } + if (mode==MODE_SILK_ONLY) + { + if (bandwidth == BANDWIDTH_SUPERWIDEBAND || bandwidth == BANDWIDTH_SUPERWIDEBAND) + { + fprintf (stderr, "Predictive mode only supports up to wideband\n"); + return 1; + } + } + if (mode==MODE_HYBRID) + { + if (bandwidth != BANDWIDTH_SUPERWIDEBAND && bandwidth != BANDWIDTH_SUPERWIDEBAND) + { + fprintf (stderr, "Hybrid mode only supports superwideband and fullband\n"); + return 1; + } + } + if (mode==MODE_CELT_ONLY) + { + if (bandwidth == BANDWIDTH_MEDIUMBAND) + { + fprintf (stderr, "Transform mode does not support mediumband\n"); + return 1; + } + } + enc = opus_encoder_create(sampling_rate, channels); dec = opus_decoder_create(sampling_rate, channels); opus_encoder_ctl(enc, OPUS_SET_MODE(mode)); opus_encoder_ctl(enc, OPUS_SET_BITRATE(bitrate_bps)); - if( internal_sampling_rate_Hz == 48000 ) { - opus_encoder_ctl(enc, OPUS_SET_BANDWIDTH(BANDWIDTH_FULLBAND)); - } else if( internal_sampling_rate_Hz == 32000 ) { - opus_encoder_ctl(enc, OPUS_SET_BANDWIDTH(BANDWIDTH_SUPERWIDEBAND)); - //} else if( internal_sampling_rate_Hz == 24000 ) { - // opus_encoder_ctl(enc, OPUS_SET_BANDWIDTH(BANDWIDTH_EXTRAWIDEBAND)); - } else if( internal_sampling_rate_Hz == 16000 ) { - opus_encoder_ctl(enc, OPUS_SET_BANDWIDTH(BANDWIDTH_WIDEBAND)); - } else if( internal_sampling_rate_Hz == 12000 ) { - opus_encoder_ctl(enc, OPUS_SET_BANDWIDTH(BANDWIDTH_MEDIUMBAND)); - } else if( internal_sampling_rate_Hz == 8000 ) { - opus_encoder_ctl(enc, OPUS_SET_BANDWIDTH(BANDWIDTH_NARROWBAND)); - } else { - fprintf (stderr, "Unsupported internal sampling rate %d\n", internal_sampling_rate_Hz); - return 1; - } + if (bandwidth != -1) + opus_encoder_ctl(enc, OPUS_SET_BANDWIDTH(bandwidth)); opus_encoder_ctl(enc, OPUS_SET_VBR_FLAG(use_vbr)); opus_encoder_ctl(enc, OPUS_SET_COMPLEXITY(complexity));