| 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 |
| 11 /* | 11 /* |
| 12 * isac.c | 12 * isac.c |
| 13 * | 13 * |
| 14 * This C file contains the functions for the ISAC API | 14 * This C file contains the functions for the ISAC API |
| 15 * | 15 * |
| 16 */ | 16 */ |
| 17 | 17 |
| 18 #include "webrtc/modules/audio_coding/codecs/isac/main/include/isac.h" | 18 #include "webrtc/modules/audio_coding/codecs/isac/main/include/isac.h" |
| 19 | 19 |
| 20 #include <assert.h> | |
| 21 #include <math.h> | 20 #include <math.h> |
| 22 #include <stdio.h> | 21 #include <stdio.h> |
| 23 #include <stdlib.h> | 22 #include <stdlib.h> |
| 24 #include <string.h> | 23 #include <string.h> |
| 25 | 24 |
| 25 #include "webrtc/base/checks.h" |
| 26 #include "webrtc/common_audio/signal_processing/include/signal_processing_librar
y.h" | 26 #include "webrtc/common_audio/signal_processing/include/signal_processing_librar
y.h" |
| 27 #include "webrtc/modules/audio_coding/codecs/isac/main/source/bandwidth_estimato
r.h" | 27 #include "webrtc/modules/audio_coding/codecs/isac/main/source/bandwidth_estimato
r.h" |
| 28 #include "webrtc/modules/audio_coding/codecs/isac/main/source/codec.h" | 28 #include "webrtc/modules/audio_coding/codecs/isac/main/source/codec.h" |
| 29 #include "webrtc/modules/audio_coding/codecs/isac/main/source/crc.h" | 29 #include "webrtc/modules/audio_coding/codecs/isac/main/source/crc.h" |
| 30 #include "webrtc/modules/audio_coding/codecs/isac/main/source/entropy_coding.h" | 30 #include "webrtc/modules/audio_coding/codecs/isac/main/source/entropy_coding.h" |
| 31 #include "webrtc/modules/audio_coding/codecs/isac/main/source/lpc_shape_swb16_ta
bles.h" | 31 #include "webrtc/modules/audio_coding/codecs/isac/main/source/lpc_shape_swb16_ta
bles.h" |
| 32 #include "webrtc/modules/audio_coding/codecs/isac/main/source/os_specific_inline
.h" | 32 #include "webrtc/modules/audio_coding/codecs/isac/main/source/os_specific_inline
.h" |
| 33 #include "webrtc/modules/audio_coding/codecs/isac/main/source/structs.h" | 33 #include "webrtc/modules/audio_coding/codecs/isac/main/source/structs.h" |
| 34 | 34 |
| 35 #define BIT_MASK_DEC_INIT 0x0001 | 35 #define BIT_MASK_DEC_INIT 0x0001 |
| (...skipping 1496 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1532 instISAC->bandwidthKHz = bandwidthKHz; | 1532 instISAC->bandwidthKHz = bandwidthKHz; |
| 1533 UpdatePayloadSizeLimit(instISAC); | 1533 UpdatePayloadSizeLimit(instISAC); |
| 1534 } | 1534 } |
| 1535 instISAC->bottleneck = bottleneckBPS; | 1535 instISAC->bottleneck = bottleneckBPS; |
| 1536 return 0; | 1536 return 0; |
| 1537 } | 1537 } |
| 1538 | 1538 |
| 1539 void WebRtcIsac_SetInitialBweBottleneck(ISACStruct* ISAC_main_inst, | 1539 void WebRtcIsac_SetInitialBweBottleneck(ISACStruct* ISAC_main_inst, |
| 1540 int bottleneck_bits_per_second) { | 1540 int bottleneck_bits_per_second) { |
| 1541 ISACMainStruct* instISAC = (ISACMainStruct*)ISAC_main_inst; | 1541 ISACMainStruct* instISAC = (ISACMainStruct*)ISAC_main_inst; |
| 1542 assert(bottleneck_bits_per_second >= 10000 && | 1542 RTC_DCHECK_GE(bottleneck_bits_per_second, 10000); |
| 1543 bottleneck_bits_per_second <= 32000); | 1543 RTC_DCHECK_LE(bottleneck_bits_per_second, 32000); |
| 1544 instISAC->bwestimator_obj.send_bw_avg = (float)bottleneck_bits_per_second; | 1544 instISAC->bwestimator_obj.send_bw_avg = (float)bottleneck_bits_per_second; |
| 1545 } | 1545 } |
| 1546 | 1546 |
| 1547 /**************************************************************************** | 1547 /**************************************************************************** |
| 1548 * WebRtcIsac_ControlBwe(...) | 1548 * WebRtcIsac_ControlBwe(...) |
| 1549 * | 1549 * |
| 1550 * This function sets the initial values of bottleneck and frame-size if | 1550 * This function sets the initial values of bottleneck and frame-size if |
| 1551 * iSAC is used in channel-adaptive mode. Through this API, users can | 1551 * iSAC is used in channel-adaptive mode. Through this API, users can |
| 1552 * enforce a frame-size for all values of bottleneck. Then iSAC will not | 1552 * enforce a frame-size for all values of bottleneck. Then iSAC will not |
| 1553 * automatically change the frame-size. | 1553 * automatically change the frame-size. |
| (...skipping 780 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2334 * | 2334 * |
| 2335 */ | 2335 */ |
| 2336 uint16_t WebRtcIsac_DecSampRate(ISACStruct* ISAC_main_inst) { | 2336 uint16_t WebRtcIsac_DecSampRate(ISACStruct* ISAC_main_inst) { |
| 2337 ISACMainStruct* instISAC = (ISACMainStruct*)ISAC_main_inst; | 2337 ISACMainStruct* instISAC = (ISACMainStruct*)ISAC_main_inst; |
| 2338 return instISAC->decoderSamplingRateKHz == kIsacWideband ? 16000 : 32000; | 2338 return instISAC->decoderSamplingRateKHz == kIsacWideband ? 16000 : 32000; |
| 2339 } | 2339 } |
| 2340 | 2340 |
| 2341 void WebRtcIsac_GetBandwidthInfo(ISACStruct* inst, | 2341 void WebRtcIsac_GetBandwidthInfo(ISACStruct* inst, |
| 2342 IsacBandwidthInfo* bwinfo) { | 2342 IsacBandwidthInfo* bwinfo) { |
| 2343 ISACMainStruct* instISAC = (ISACMainStruct*)inst; | 2343 ISACMainStruct* instISAC = (ISACMainStruct*)inst; |
| 2344 assert(instISAC->initFlag & BIT_MASK_DEC_INIT); | 2344 RTC_DCHECK_NE(0, instISAC->initFlag & BIT_MASK_DEC_INIT); |
| 2345 WebRtcIsacBw_GetBandwidthInfo(&instISAC->bwestimator_obj, | 2345 WebRtcIsacBw_GetBandwidthInfo(&instISAC->bwestimator_obj, |
| 2346 instISAC->decoderSamplingRateKHz, bwinfo); | 2346 instISAC->decoderSamplingRateKHz, bwinfo); |
| 2347 } | 2347 } |
| 2348 | 2348 |
| 2349 void WebRtcIsac_SetBandwidthInfo(ISACStruct* inst, | 2349 void WebRtcIsac_SetBandwidthInfo(ISACStruct* inst, |
| 2350 const IsacBandwidthInfo* bwinfo) { | 2350 const IsacBandwidthInfo* bwinfo) { |
| 2351 ISACMainStruct* instISAC = (ISACMainStruct*)inst; | 2351 ISACMainStruct* instISAC = (ISACMainStruct*)inst; |
| 2352 assert(instISAC->initFlag & BIT_MASK_ENC_INIT); | 2352 RTC_DCHECK_NE(0, instISAC->initFlag & BIT_MASK_ENC_INIT); |
| 2353 WebRtcIsacBw_SetBandwidthInfo(&instISAC->bwestimator_obj, bwinfo); | 2353 WebRtcIsacBw_SetBandwidthInfo(&instISAC->bwestimator_obj, bwinfo); |
| 2354 } | 2354 } |
| 2355 | 2355 |
| 2356 void WebRtcIsac_SetEncSampRateInDecoder(ISACStruct* inst, | 2356 void WebRtcIsac_SetEncSampRateInDecoder(ISACStruct* inst, |
| 2357 int sample_rate_hz) { | 2357 int sample_rate_hz) { |
| 2358 ISACMainStruct* instISAC = (ISACMainStruct*)inst; | 2358 ISACMainStruct* instISAC = (ISACMainStruct*)inst; |
| 2359 assert(instISAC->initFlag & BIT_MASK_DEC_INIT); | 2359 RTC_DCHECK_NE(0, instISAC->initFlag & BIT_MASK_DEC_INIT); |
| 2360 assert(!(instISAC->initFlag & BIT_MASK_ENC_INIT)); | 2360 RTC_DCHECK(!(instISAC->initFlag & BIT_MASK_ENC_INIT)); |
| 2361 assert(sample_rate_hz == 16000 || sample_rate_hz == 32000); | 2361 RTC_DCHECK(sample_rate_hz == 16000 || sample_rate_hz == 32000); |
| 2362 instISAC->encoderSamplingRateKHz = sample_rate_hz / 1000; | 2362 instISAC->encoderSamplingRateKHz = sample_rate_hz / 1000; |
| 2363 } | 2363 } |
| OLD | NEW |