From bd7de0c6eff510f9ec95b13a16862ca55871c47d Mon Sep 17 00:00:00 2001 From: "henrik.lundin" Date: Wed, 14 Oct 2015 06:05:52 -0700 Subject: [PATCH] Delete full-band mode from the iSAC codec This mode is no longer used. BUG=4210 Review URL: https://codereview.webrtc.org/1392173004 Cr-Commit-Position: refs/heads/master@{#10275} --- .../codecs/isac/audio_decoder_isac_t_impl.h | 4 -- .../codecs/isac/audio_encoder_isac_t.h | 1 - .../codecs/isac/audio_encoder_isac_t_impl.h | 7 +-- .../codecs/isac/main/source/isac.c | 52 ++----------------- .../codecs/isac/main/source/settings.h | 2 - .../codecs/isac/main/source/structs.h | 7 +-- 6 files changed, 8 insertions(+), 65 deletions(-) diff --git a/webrtc/modules/audio_coding/codecs/isac/audio_decoder_isac_t_impl.h b/webrtc/modules/audio_coding/codecs/isac/audio_decoder_isac_t_impl.h index 126c129814..306574c74c 100644 --- a/webrtc/modules/audio_coding/codecs/isac/audio_decoder_isac_t_impl.h +++ b/webrtc/modules/audio_coding/codecs/isac/audio_decoder_isac_t_impl.h @@ -44,10 +44,6 @@ int AudioDecoderIsacT::DecodeInternal(const uint8_t* encoded, int sample_rate_hz, int16_t* decoded, SpeechType* speech_type) { - // We want to crate the illusion that iSAC supports 48000 Hz decoding, while - // in fact it outputs 32000 Hz. This is the iSAC fullband mode. - if (sample_rate_hz == 48000) - sample_rate_hz = 32000; RTC_CHECK(sample_rate_hz == 16000 || sample_rate_hz == 32000) << "Unsupported sample rate " << sample_rate_hz; if (sample_rate_hz != decoder_sample_rate_hz_) { diff --git a/webrtc/modules/audio_coding/codecs/isac/audio_encoder_isac_t.h b/webrtc/modules/audio_coding/codecs/isac/audio_encoder_isac_t.h index 762757ace7..b15ad942df 100644 --- a/webrtc/modules/audio_coding/codecs/isac/audio_encoder_isac_t.h +++ b/webrtc/modules/audio_coding/codecs/isac/audio_encoder_isac_t.h @@ -27,7 +27,6 @@ class AudioEncoderIsacT final : public AudioEncoder { // - 16000 Hz, 30 ms, 10000-32000 bps // - 16000 Hz, 60 ms, 10000-32000 bps // - 32000 Hz, 30 ms, 10000-56000 bps (if T has super-wideband support) - // - 48000 Hz, 30 ms, 10000-56000 bps (if T has super-wideband support) struct Config { bool IsOk() const; diff --git a/webrtc/modules/audio_coding/codecs/isac/audio_encoder_isac_t_impl.h b/webrtc/modules/audio_coding/codecs/isac/audio_encoder_isac_t_impl.h index fbc1ba9139..c7b1f20b3a 100644 --- a/webrtc/modules/audio_coding/codecs/isac/audio_encoder_isac_t_impl.h +++ b/webrtc/modules/audio_coding/codecs/isac/audio_encoder_isac_t_impl.h @@ -50,7 +50,6 @@ bool AudioEncoderIsacT::Config::IsOk() const { return (frame_size_ms == 30 || frame_size_ms == 60) && (bit_rate == 0 || (bit_rate >= 10000 && bit_rate <= 32000)); case 32000: - case 48000: if (max_bit_rate > 160000) return false; if (max_payload_size_bytes > 600) @@ -177,15 +176,11 @@ void AudioEncoderIsacT::RecreateEncoderInstance(const Config& config) { if (config.max_bit_rate != -1) RTC_CHECK_EQ(0, T::SetMaxRate(isac_state_, config.max_bit_rate)); - // When config.sample_rate_hz is set to 48000 Hz (iSAC-fb), the decoder is - // still set to 32000 Hz, since there is no full-band mode in the decoder. - const int decoder_sample_rate_hz = std::min(config.sample_rate_hz, 32000); - // Set the decoder sample rate even though we just use the encoder. This // doesn't appear to be necessary to produce a valid encoding, but without it // we get an encoding that isn't bit-for-bit identical with what a combined // encoder+decoder object produces. - RTC_CHECK_EQ(0, T::SetDecSampRate(isac_state_, decoder_sample_rate_hz)); + RTC_CHECK_EQ(0, T::SetDecSampRate(isac_state_, config.sample_rate_hz)); config_ = config; } diff --git a/webrtc/modules/audio_coding/codecs/isac/main/source/isac.c b/webrtc/modules/audio_coding/codecs/isac/main/source/isac.c index 0a5f75a901..bc1565151b 100644 --- a/webrtc/modules/audio_coding/codecs/isac/main/source/isac.c +++ b/webrtc/modules/audio_coding/codecs/isac/main/source/isac.c @@ -469,7 +469,6 @@ int16_t WebRtcIsac_EncoderInit(ISACStruct* ISAC_main_inst, return -1; } } - memset(instISAC->state_in_resampler, 0, sizeof(instISAC->state_in_resampler)); /* Initialization is successful, set the flag. */ instISAC->initFlag |= BIT_MASK_ENC_INIT; return 0; @@ -516,8 +515,6 @@ int WebRtcIsac_Encode(ISACStruct* ISAC_main_inst, ISACMainStruct* instISAC = (ISACMainStruct*)ISAC_main_inst; ISACLBStruct* instLB = &(instISAC->instLB); ISACUBStruct* instUB = &(instISAC->instUB); - const int16_t* speech_in_ptr = speechIn; - int16_t resampled_buff[FRAMESAMPLES_10ms * 2]; /* Check if encoder initiated. */ if ((instISAC->initFlag & BIT_MASK_ENC_INIT) != @@ -526,37 +523,8 @@ int WebRtcIsac_Encode(ISACStruct* ISAC_main_inst, return -1; } - if (instISAC->in_sample_rate_hz == 48000) { - /* Samples in 10 ms @ 48 kHz. */ - const size_t kNumInputSamples = FRAMESAMPLES_10ms * 3; - /* Samples 10 ms @ 32 kHz. */ - const size_t kNumOutputSamples = FRAMESAMPLES_10ms * 2; - /* Resampler divide the input into blocks of 3 samples, i.e. - * kNumInputSamples / 3. */ - const size_t kNumResamplerBlocks = FRAMESAMPLES_10ms; - int32_t buffer32[FRAMESAMPLES_10ms * 3 + SIZE_RESAMPLER_STATE]; - - /* Restore last samples from the past to the beginning of the buffer - * and store the last samples of current frame for the next resampling. */ - for (k = 0; k < SIZE_RESAMPLER_STATE; k++) { - buffer32[k] = instISAC->state_in_resampler[k]; - instISAC->state_in_resampler[k] = speechIn[kNumInputSamples - - SIZE_RESAMPLER_STATE + k]; - } - for (k = 0; k < kNumInputSamples; k++) { - buffer32[SIZE_RESAMPLER_STATE + k] = speechIn[k]; - } - /* Resampling 3 samples to 2. Function divides the input in - * |kNumResamplerBlocks| number of 3-sample groups, and output is - * |kNumResamplerBlocks| number of 2-sample groups. */ - WebRtcSpl_Resample48khzTo32khz(buffer32, buffer32, kNumResamplerBlocks); - WebRtcSpl_VectorBitShiftW32ToW16(resampled_buff, kNumOutputSamples, - buffer32, 15); - speech_in_ptr = resampled_buff; - } - if (instISAC->encoderSamplingRateKHz == kIsacSuperWideband) { - WebRtcSpl_AnalysisQMF(speech_in_ptr, SWBFRAMESAMPLES_10ms, speechInLB, + WebRtcSpl_AnalysisQMF(speechIn, SWBFRAMESAMPLES_10ms, speechInLB, speechInUB, instISAC->analysisFBState1, instISAC->analysisFBState2); @@ -1852,10 +1820,8 @@ int16_t WebRtcIsac_GetNewFrameLen(ISACStruct* ISAC_main_inst) { /* Return new frame length. */ if (instISAC->in_sample_rate_hz == 16000) return (instISAC->instLB.ISACencLB_obj.new_framelength); - else if (instISAC->in_sample_rate_hz == 32000) + else /* 32000 Hz */ return ((instISAC->instLB.ISACencLB_obj.new_framelength) * 2); - else - return ((instISAC->instLB.ISACencLB_obj.new_framelength) * 3); } @@ -2205,17 +2171,10 @@ void WebRtcIsac_version(char* version) { * and the bottleneck remain unchanged by this call, however, the maximum rate * and maximum payload-size will be reset to their default values. * - * NOTE: - * The maximum internal sampling rate is 32 kHz. If the encoder sample rate is - * set to 48 kHz the input is expected to be at 48 kHz but will be resampled to - * 32 kHz before any further processing. - * This mode is created for compatibility with full-band codecs if iSAC is used - * in dual-streaming. See SetDecSampleRate() for sampling rates at the decoder. - * * Input: * - ISAC_main_inst : iSAC instance - * - sample_rate_hz : sampling rate in Hertz, valid values are 16000, - * 32000 and 48000. + * - sample_rate_hz : sampling rate in Hertz, valid values are 16000 + * and 32000. * * Return value : 0 if successful * -1 if failed. @@ -2225,8 +2184,7 @@ int16_t WebRtcIsac_SetEncSampRate(ISACStruct* ISAC_main_inst, ISACMainStruct* instISAC = (ISACMainStruct*)ISAC_main_inst; enum IsacSamplingRate encoder_operational_rate; - if ((sample_rate_hz != 16000) && (sample_rate_hz != 32000) && - (sample_rate_hz != 48000)) { + if ((sample_rate_hz != 16000) && (sample_rate_hz != 32000)) { /* Sampling Frequency is not supported. */ instISAC->errorCode = ISAC_UNSUPPORTED_SAMPLING_FREQUENCY; return -1; diff --git a/webrtc/modules/audio_coding/codecs/isac/main/source/settings.h b/webrtc/modules/audio_coding/codecs/isac/main/source/settings.h index 5562c35ad4..31a80653fe 100644 --- a/webrtc/modules/audio_coding/codecs/isac/main/source/settings.h +++ b/webrtc/modules/audio_coding/codecs/isac/main/source/settings.h @@ -168,8 +168,6 @@ enum IsacSamplingRate {kIsacWideband = 16, kIsacSuperWideband = 32}; #define RCU_TRANSCODING_SCALE_UB 0.50f #define RCU_TRANSCODING_SCALE_UB_INVERSE 2.0f -#define SIZE_RESAMPLER_STATE 6 - /* Define Error codes */ /* 6000 General */ #define ISAC_MEMORY_ALLOCATION_FAILED 6010 diff --git a/webrtc/modules/audio_coding/codecs/isac/main/source/structs.h b/webrtc/modules/audio_coding/codecs/isac/main/source/structs.h index 84428788d7..7e2cf85f31 100644 --- a/webrtc/modules/audio_coding/codecs/isac/main/source/structs.h +++ b/webrtc/modules/audio_coding/codecs/isac/main/source/structs.h @@ -484,12 +484,9 @@ typedef struct { int16_t maxRateBytesPer30Ms; // Maximum allowed payload-size, measured in Bytes. int16_t maxPayloadSizeBytes; - /* The expected sampling rate of the input signal. Valid values are 16000, - * 32000 and 48000. This is not the operation sampling rate of the codec. - * Input signals at 48 kHz are resampled to 32 kHz, then encoded. */ + /* The expected sampling rate of the input signal. Valid values are 16000 + * and 32000. This is not the operation sampling rate of the codec. */ uint16_t in_sample_rate_hz; - /* State for the input-resampler. It is only used for 48 kHz input signals. */ - int16_t state_in_resampler[SIZE_RESAMPLER_STATE]; // Trig tables for WebRtcIsac_Time2Spec and WebRtcIsac_Spec2time. TransformTables transform_tables;