| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 | 10 |
| (...skipping 17 matching lines...) Expand all Loading... |
| 28 | 28 |
| 29 #include <stdio.h> | 29 #include <stdio.h> |
| 30 #include <stdlib.h> | 30 #include <stdlib.h> |
| 31 #include <string.h> | 31 #include <string.h> |
| 32 | 32 |
| 33 | 33 |
| 34 /* | 34 /* |
| 35 * function to decode the bitstream | 35 * function to decode the bitstream |
| 36 * returns the total number of bytes in the stream | 36 * returns the total number of bytes in the stream |
| 37 */ | 37 */ |
| 38 int WebRtcIsac_DecodeLb(float* signal_out, ISACLBDecStruct* ISACdecLB_obj, | 38 int WebRtcIsac_DecodeLb(const TransformTables* transform_tables, |
| 39 float* signal_out, ISACLBDecStruct* ISACdecLB_obj, |
| 39 int16_t* current_framesamples, | 40 int16_t* current_framesamples, |
| 40 int16_t isRCUPayload) { | 41 int16_t isRCUPayload) { |
| 41 int k; | 42 int k; |
| 42 int len, err; | 43 int len, err; |
| 43 int16_t bandwidthInd; | 44 int16_t bandwidthInd; |
| 44 | 45 |
| 45 float LP_dec_float[FRAMESAMPLES_HALF]; | 46 float LP_dec_float[FRAMESAMPLES_HALF]; |
| 46 float HP_dec_float[FRAMESAMPLES_HALF]; | 47 float HP_dec_float[FRAMESAMPLES_HALF]; |
| 47 | 48 |
| 48 double LPw[FRAMESAMPLES_HALF]; | 49 double LPw[FRAMESAMPLES_HALF]; |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 115 return err; | 116 return err; |
| 116 } | 117 } |
| 117 /* Decode & de-quantize spectrum. */ | 118 /* Decode & de-quantize spectrum. */ |
| 118 len = WebRtcIsac_DecodeSpec(&ISACdecLB_obj->bitstr_obj, AvgPitchGain_Q12, | 119 len = WebRtcIsac_DecodeSpec(&ISACdecLB_obj->bitstr_obj, AvgPitchGain_Q12, |
| 119 kIsacLowerBand, real_f, imag_f); | 120 kIsacLowerBand, real_f, imag_f); |
| 120 if (len < 0) { | 121 if (len < 0) { |
| 121 return len; | 122 return len; |
| 122 } | 123 } |
| 123 | 124 |
| 124 /* Inverse transform. */ | 125 /* Inverse transform. */ |
| 125 WebRtcIsac_Spec2time(real_f, imag_f, LPw, HPw, | 126 WebRtcIsac_Spec2time(transform_tables, real_f, imag_f, LPw, HPw, |
| 126 &ISACdecLB_obj->fftstr_obj); | 127 &ISACdecLB_obj->fftstr_obj); |
| 127 | 128 |
| 128 /* Convert PitchGains back to float for pitchfilter_post */ | 129 /* Convert PitchGains back to float for pitchfilter_post */ |
| 129 for (k = 0; k < 4; k++) { | 130 for (k = 0; k < 4; k++) { |
| 130 PitchGains[k] = ((float)PitchGains_Q12[k]) / 4096; | 131 PitchGains[k] = ((float)PitchGains_Q12[k]) / 4096; |
| 131 } | 132 } |
| 132 if (isRCUPayload) { | 133 if (isRCUPayload) { |
| 133 for (k = 0; k < 240; k++) { | 134 for (k = 0; k < 240; k++) { |
| 134 LPw[k] *= RCU_TRANSCODING_SCALE_INVERSE; | 135 LPw[k] *= RCU_TRANSCODING_SCALE_INVERSE; |
| 135 HPw[k] *= RCU_TRANSCODING_SCALE_INVERSE; | 136 HPw[k] *= RCU_TRANSCODING_SCALE_INVERSE; |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 174 } | 175 } |
| 175 | 176 |
| 176 | 177 |
| 177 /* | 178 /* |
| 178 * This decode function is called when the codec is operating in 16 kHz | 179 * This decode function is called when the codec is operating in 16 kHz |
| 179 * bandwidth to decode the upperband, i.e. 8-16 kHz. | 180 * bandwidth to decode the upperband, i.e. 8-16 kHz. |
| 180 * | 181 * |
| 181 * Contrary to lower-band, the upper-band (8-16 kHz) is not split in | 182 * Contrary to lower-band, the upper-band (8-16 kHz) is not split in |
| 182 * frequency, but split to 12 sub-frames, i.e. twice as lower-band. | 183 * frequency, but split to 12 sub-frames, i.e. twice as lower-band. |
| 183 */ | 184 */ |
| 184 int WebRtcIsac_DecodeUb16(float* signal_out, ISACUBDecStruct* ISACdecUB_obj, | 185 int WebRtcIsac_DecodeUb16(const TransformTables* transform_tables, |
| 186 float* signal_out, ISACUBDecStruct* ISACdecUB_obj, |
| 185 int16_t isRCUPayload) { | 187 int16_t isRCUPayload) { |
| 186 int len, err; | 188 int len, err; |
| 187 | 189 |
| 188 double halfFrameFirst[FRAMESAMPLES_HALF]; | 190 double halfFrameFirst[FRAMESAMPLES_HALF]; |
| 189 double halfFrameSecond[FRAMESAMPLES_HALF]; | 191 double halfFrameSecond[FRAMESAMPLES_HALF]; |
| 190 | 192 |
| 191 double percepFilterParam[(UB_LPC_ORDER + 1) * (SUBFRAMES << 1) + | 193 double percepFilterParam[(UB_LPC_ORDER + 1) * (SUBFRAMES << 1) + |
| 192 (UB_LPC_ORDER + 1)]; | 194 (UB_LPC_ORDER + 1)]; |
| 193 | 195 |
| 194 double real_f[FRAMESAMPLES_HALF]; | 196 double real_f[FRAMESAMPLES_HALF]; |
| (...skipping 16 matching lines...) Expand all Loading... |
| 211 return len; | 213 return len; |
| 212 } | 214 } |
| 213 if (isRCUPayload) { | 215 if (isRCUPayload) { |
| 214 int n; | 216 int n; |
| 215 for (n = 0; n < 240; n++) { | 217 for (n = 0; n < 240; n++) { |
| 216 real_f[n] *= RCU_TRANSCODING_SCALE_UB_INVERSE; | 218 real_f[n] *= RCU_TRANSCODING_SCALE_UB_INVERSE; |
| 217 imag_f[n] *= RCU_TRANSCODING_SCALE_UB_INVERSE; | 219 imag_f[n] *= RCU_TRANSCODING_SCALE_UB_INVERSE; |
| 218 } | 220 } |
| 219 } | 221 } |
| 220 /* Inverse transform. */ | 222 /* Inverse transform. */ |
| 221 WebRtcIsac_Spec2time(real_f, imag_f, halfFrameFirst, halfFrameSecond, | 223 WebRtcIsac_Spec2time(transform_tables, |
| 224 real_f, imag_f, halfFrameFirst, halfFrameSecond, |
| 222 &ISACdecUB_obj->fftstr_obj); | 225 &ISACdecUB_obj->fftstr_obj); |
| 223 | 226 |
| 224 /* Perceptual post-filtering (using normalized lattice filter). */ | 227 /* Perceptual post-filtering (using normalized lattice filter). */ |
| 225 WebRtcIsac_NormLatticeFilterAr( | 228 WebRtcIsac_NormLatticeFilterAr( |
| 226 UB_LPC_ORDER, ISACdecUB_obj->maskfiltstr_obj.PostStateLoF, | 229 UB_LPC_ORDER, ISACdecUB_obj->maskfiltstr_obj.PostStateLoF, |
| 227 (ISACdecUB_obj->maskfiltstr_obj).PostStateLoG, halfFrameFirst, | 230 (ISACdecUB_obj->maskfiltstr_obj).PostStateLoG, halfFrameFirst, |
| 228 &percepFilterParam[(UB_LPC_ORDER + 1)], signal_out); | 231 &percepFilterParam[(UB_LPC_ORDER + 1)], signal_out); |
| 229 | 232 |
| 230 WebRtcIsac_NormLatticeFilterAr( | 233 WebRtcIsac_NormLatticeFilterAr( |
| 231 UB_LPC_ORDER, ISACdecUB_obj->maskfiltstr_obj.PostStateLoF, | 234 UB_LPC_ORDER, ISACdecUB_obj->maskfiltstr_obj.PostStateLoF, |
| 232 (ISACdecUB_obj->maskfiltstr_obj).PostStateLoG, halfFrameSecond, | 235 (ISACdecUB_obj->maskfiltstr_obj).PostStateLoG, halfFrameSecond, |
| 233 &percepFilterParam[(UB_LPC_ORDER + 1) * SUBFRAMES + (UB_LPC_ORDER + 1)], | 236 &percepFilterParam[(UB_LPC_ORDER + 1) * SUBFRAMES + (UB_LPC_ORDER + 1)], |
| 234 &signal_out[FRAMESAMPLES_HALF]); | 237 &signal_out[FRAMESAMPLES_HALF]); |
| 235 | 238 |
| 236 return len; | 239 return len; |
| 237 } | 240 } |
| 238 | 241 |
| 239 /* | 242 /* |
| 240 * This decode function is called when the codec operates at 0-12 kHz | 243 * This decode function is called when the codec operates at 0-12 kHz |
| 241 * bandwidth to decode the upperband, i.e. 8-12 kHz. | 244 * bandwidth to decode the upperband, i.e. 8-12 kHz. |
| 242 * | 245 * |
| 243 * At the encoder the upper-band is split into two band, 8-12 kHz & 12-16 | 246 * At the encoder the upper-band is split into two band, 8-12 kHz & 12-16 |
| 244 * kHz, and only 8-12 kHz is encoded. At the decoder, 8-12 kHz band is | 247 * kHz, and only 8-12 kHz is encoded. At the decoder, 8-12 kHz band is |
| 245 * reconstructed and 12-16 kHz replaced with zeros. Then two bands | 248 * reconstructed and 12-16 kHz replaced with zeros. Then two bands |
| 246 * are combined, to reconstruct the upperband 8-16 kHz. | 249 * are combined, to reconstruct the upperband 8-16 kHz. |
| 247 */ | 250 */ |
| 248 int WebRtcIsac_DecodeUb12(float* signal_out, ISACUBDecStruct* ISACdecUB_obj, | 251 int WebRtcIsac_DecodeUb12(const TransformTables* transform_tables, |
| 249 int16_t isRCUPayload) { | 252 float* signal_out, ISACUBDecStruct* ISACdecUB_obj, |
| 253 int16_t isRCUPayload) { |
| 250 int len, err; | 254 int len, err; |
| 251 | 255 |
| 252 float LP_dec_float[FRAMESAMPLES_HALF]; | 256 float LP_dec_float[FRAMESAMPLES_HALF]; |
| 253 float HP_dec_float[FRAMESAMPLES_HALF]; | 257 float HP_dec_float[FRAMESAMPLES_HALF]; |
| 254 | 258 |
| 255 double LPw[FRAMESAMPLES_HALF]; | 259 double LPw[FRAMESAMPLES_HALF]; |
| 256 double HPw[FRAMESAMPLES_HALF]; | 260 double HPw[FRAMESAMPLES_HALF]; |
| 257 | 261 |
| 258 double percepFilterParam[(UB_LPC_ORDER + 1)*SUBFRAMES]; | 262 double percepFilterParam[(UB_LPC_ORDER + 1)*SUBFRAMES]; |
| 259 | 263 |
| (...skipping 17 matching lines...) Expand all Loading... |
| 277 } | 281 } |
| 278 | 282 |
| 279 if (isRCUPayload) { | 283 if (isRCUPayload) { |
| 280 int n; | 284 int n; |
| 281 for (n = 0; n < 240; n++) { | 285 for (n = 0; n < 240; n++) { |
| 282 real_f[n] *= RCU_TRANSCODING_SCALE_UB_INVERSE; | 286 real_f[n] *= RCU_TRANSCODING_SCALE_UB_INVERSE; |
| 283 imag_f[n] *= RCU_TRANSCODING_SCALE_UB_INVERSE; | 287 imag_f[n] *= RCU_TRANSCODING_SCALE_UB_INVERSE; |
| 284 } | 288 } |
| 285 } | 289 } |
| 286 /* Inverse transform. */ | 290 /* Inverse transform. */ |
| 287 WebRtcIsac_Spec2time(real_f, imag_f, LPw, HPw, &ISACdecUB_obj->fftstr_obj); | 291 WebRtcIsac_Spec2time(transform_tables, |
| 292 real_f, imag_f, LPw, HPw, &ISACdecUB_obj->fftstr_obj); |
| 288 /* perceptual post-filtering (using normalized lattice filter) */ | 293 /* perceptual post-filtering (using normalized lattice filter) */ |
| 289 WebRtcIsac_NormLatticeFilterAr(UB_LPC_ORDER, | 294 WebRtcIsac_NormLatticeFilterAr(UB_LPC_ORDER, |
| 290 ISACdecUB_obj->maskfiltstr_obj.PostStateLoF, | 295 ISACdecUB_obj->maskfiltstr_obj.PostStateLoF, |
| 291 (ISACdecUB_obj->maskfiltstr_obj).PostStateLoG, | 296 (ISACdecUB_obj->maskfiltstr_obj).PostStateLoG, |
| 292 LPw, percepFilterParam, LP_dec_float); | 297 LPw, percepFilterParam, LP_dec_float); |
| 293 /* Zero for 12-16 kHz. */ | 298 /* Zero for 12-16 kHz. */ |
| 294 memset(HP_dec_float, 0, sizeof(float) * (FRAMESAMPLES_HALF)); | 299 memset(HP_dec_float, 0, sizeof(float) * (FRAMESAMPLES_HALF)); |
| 295 /* Recombine the 2 bands. */ | 300 /* Recombine the 2 bands. */ |
| 296 WebRtcIsac_FilterAndCombineFloat(HP_dec_float, LP_dec_float, signal_out, | 301 WebRtcIsac_FilterAndCombineFloat(HP_dec_float, LP_dec_float, signal_out, |
| 297 &ISACdecUB_obj->postfiltbankstr_obj); | 302 &ISACdecUB_obj->postfiltbankstr_obj); |
| 298 return len; | 303 return len; |
| 299 } | 304 } |
| OLD | NEW |