Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(216)

Side by Side Diff: webrtc/modules/audio_coding/codecs/isac/main/source/isac.c

Issue 1208923002: iSAC: Functions for importing and exporting bandwidth est. info (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: review comments Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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/interface/isac.h" 18 #include "webrtc/modules/audio_coding/codecs/isac/main/interface/isac.h"
19 19
20 #include <assert.h>
20 #include <math.h> 21 #include <math.h>
21 #include <stdio.h> 22 #include <stdio.h>
22 #include <stdlib.h> 23 #include <stdlib.h>
23 #include <string.h> 24 #include <string.h>
24 25
25 #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"
26 #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"
27 #include "webrtc/modules/audio_coding/codecs/isac/main/source/codec.h" 28 #include "webrtc/modules/audio_coding/codecs/isac/main/source/codec.h"
28 #include "webrtc/modules/audio_coding/codecs/isac/main/source/crc.h" 29 #include "webrtc/modules/audio_coding/codecs/isac/main/source/crc.h"
29 #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"
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
106 * updated just right before the first 10ms of a frame is pushed into encoder. 107 * updated just right before the first 10ms of a frame is pushed into encoder.
107 * 108 *
108 */ 109 */
109 static void UpdateBottleneck(ISACMainStruct* instISAC) { 110 static void UpdateBottleneck(ISACMainStruct* instISAC) {
110 /* Read the bottleneck from bandwidth estimator for the 111 /* Read the bottleneck from bandwidth estimator for the
111 * first 10 ms audio. This way, if there is a change 112 * first 10 ms audio. This way, if there is a change
112 * in bandwidth, upper and lower-band will be in sync. */ 113 * in bandwidth, upper and lower-band will be in sync. */
113 if ((instISAC->codingMode == 0) && 114 if ((instISAC->codingMode == 0) &&
114 (instISAC->instLB.ISACencLB_obj.buffer_index == 0) && 115 (instISAC->instLB.ISACencLB_obj.buffer_index == 0) &&
115 (instISAC->instLB.ISACencLB_obj.frame_nb == 0)) { 116 (instISAC->instLB.ISACencLB_obj.frame_nb == 0)) {
116 int32_t bottleneck; 117 int32_t bottleneck =
117 WebRtcIsac_GetUplinkBandwidth(&(instISAC->bwestimator_obj), 118 WebRtcIsac_GetUplinkBandwidth(&instISAC->bwestimator_obj);
118 &bottleneck);
119 119
120 /* Adding hysteresis when increasing signal bandwidth. */ 120 /* Adding hysteresis when increasing signal bandwidth. */
121 if ((instISAC->bandwidthKHz == isac8kHz) 121 if ((instISAC->bandwidthKHz == isac8kHz)
122 && (bottleneck > 37000) 122 && (bottleneck > 37000)
123 && (bottleneck < 41000)) { 123 && (bottleneck < 41000)) {
124 bottleneck = 37000; 124 bottleneck = 37000;
125 } 125 }
126 126
127 /* Switching from 12 kHz to 16 kHz is not allowed at this revision. 127 /* Switching from 12 kHz to 16 kHz is not allowed at this revision.
128 * If we let this happen, we have to take care of buffer_index and 128 * If we let this happen, we have to take care of buffer_index and
(...skipping 534 matching lines...) Expand 10 before | Expand all | Expand 10 after
663 } else { 663 } else {
664 if (streamLenLB == 0) { 664 if (streamLenLB == 0) {
665 return 0; 665 return 0;
666 } 666 }
667 memcpy(encoded, instLB->ISACencLB_obj.bitstr_obj.stream, streamLenLB); 667 memcpy(encoded, instLB->ISACencLB_obj.bitstr_obj.stream, streamLenLB);
668 streamLenUB = 0; 668 streamLenUB = 0;
669 streamLen = streamLenLB; 669 streamLen = streamLenLB;
670 } 670 }
671 671
672 /* Add Garbage if required. */ 672 /* Add Garbage if required. */
673 WebRtcIsac_GetUplinkBandwidth(&instISAC->bwestimator_obj, &bottleneck); 673 bottleneck = WebRtcIsac_GetUplinkBandwidth(&instISAC->bwestimator_obj);
674 if (instISAC->codingMode == 0) { 674 if (instISAC->codingMode == 0) {
675 int minBytes; 675 int minBytes;
676 int limit; 676 int limit;
677 uint8_t* ptrGarbage; 677 uint8_t* ptrGarbage;
678 678
679 instISAC->MaxDelay = (double)WebRtcIsac_GetUplinkMaxDelay( 679 instISAC->MaxDelay = (double)WebRtcIsac_GetUplinkMaxDelay(
680 &instISAC->bwestimator_obj); 680 &instISAC->bwestimator_obj);
681 681
682 /* Update rate model and get minimum number of bytes in this packet. */ 682 /* Update rate model and get minimum number of bytes in this packet. */
683 minBytes = WebRtcIsac_GetMinBytes( 683 minBytes = WebRtcIsac_GetMinBytes(
(...skipping 1693 matching lines...) Expand 10 before | Expand all | Expand 10 after
2377 * - ISAC_main_inst : iSAC instance 2377 * - ISAC_main_inst : iSAC instance
2378 * 2378 *
2379 * Return value : sampling rate in Hertz. Decoder output is 2379 * Return value : sampling rate in Hertz. Decoder output is
2380 * sampled at this rate. 2380 * sampled at this rate.
2381 * 2381 *
2382 */ 2382 */
2383 uint16_t WebRtcIsac_DecSampRate(ISACStruct* ISAC_main_inst) { 2383 uint16_t WebRtcIsac_DecSampRate(ISACStruct* ISAC_main_inst) {
2384 ISACMainStruct* instISAC = (ISACMainStruct*)ISAC_main_inst; 2384 ISACMainStruct* instISAC = (ISACMainStruct*)ISAC_main_inst;
2385 return instISAC->decoderSamplingRateKHz == kIsacWideband ? 16000 : 32000; 2385 return instISAC->decoderSamplingRateKHz == kIsacWideband ? 16000 : 32000;
2386 } 2386 }
2387
2388 void WebRtcIsac_GetBandwidthInfo(ISACStruct* inst,
2389 IsacBandwidthInfo* bwinfo) {
2390 ISACMainStruct* instISAC = (ISACMainStruct*)inst;
2391 assert(instISAC->initFlag & BIT_MASK_DEC_INIT);
2392 WebRtcIsacBw_GetBandwidthInfo(&instISAC->bwestimator_obj,
2393 instISAC->decoderSamplingRateKHz, bwinfo);
2394 }
2395
2396 void WebRtcIsac_SetBandwidthInfo(ISACStruct* inst,
2397 const IsacBandwidthInfo* bwinfo) {
2398 ISACMainStruct* instISAC = (ISACMainStruct*)inst;
2399 assert(instISAC->initFlag & BIT_MASK_ENC_INIT);
2400 WebRtcIsacBw_SetBandwidthInfo(&instISAC->bwestimator_obj, bwinfo);
2401 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698