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

Unified Diff: webrtc/modules/audio_coding/codecs/isac/fix/source/bandwidth_estimator.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, 6 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 side-by-side diff with in-line comments
Download patch
Index: webrtc/modules/audio_coding/codecs/isac/fix/source/bandwidth_estimator.c
diff --git a/webrtc/modules/audio_coding/codecs/isac/fix/source/bandwidth_estimator.c b/webrtc/modules/audio_coding/codecs/isac/fix/source/bandwidth_estimator.c
index 4a4cddc3db16f986bd37a34158576f83bc3ef43a..d876a3cb837322a5414d5e91a409d477856f3ab9 100644
--- a/webrtc/modules/audio_coding/codecs/isac/fix/source/bandwidth_estimator.c
+++ b/webrtc/modules/audio_coding/codecs/isac/fix/source/bandwidth_estimator.c
@@ -19,6 +19,8 @@
*/
#include "bandwidth_estimator.h"
+
+#include <assert.h>
#include "settings.h"
@@ -116,6 +118,8 @@ int32_t WebRtcIsacfix_InitBandwidthEstimator(BwEstimatorstr *bweStr)
bweStr->maxBwInv = kInvBandwidth[3];
bweStr->minBwInv = kInvBandwidth[2];
+ bweStr->external_bw_info.in_use = 0;
+
return 0;
}
@@ -176,6 +180,8 @@ int32_t WebRtcIsacfix_UpdateUplinkBwImpl(BwEstimatorstr *bweStr,
int16_t errCode;
+ assert(!bweStr->external_bw_info.in_use);
+
/* UPDATE ESTIMATES FROM OTHER SIDE */
/* The function also checks if Index has a valid value */
@@ -545,6 +551,8 @@ int16_t WebRtcIsacfix_UpdateUplinkBwRec(BwEstimatorstr *bweStr,
{
uint16_t RateInd;
+ assert(!bweStr->external_bw_info.in_use);
+
if ( (Index < 0) || (Index > 23) ) {
return -ISAC_RANGE_ERROR_BW_ESTIMATOR;
}
@@ -616,6 +624,9 @@ uint16_t WebRtcIsacfix_GetDownlinkBwIndexImpl(BwEstimatorstr *bweStr)
int32_t tempMin;
int32_t tempMax;
+ if (bweStr->external_bw_info.in_use)
+ return bweStr->external_bw_info.bottleneck_idx;
+
/* Get Rate Index */
/* Get unquantized rate. Always returns 10000 <= rate <= 32000 */
@@ -721,6 +732,8 @@ uint16_t WebRtcIsacfix_GetDownlinkBandwidth(const BwEstimatorstr *bweStr)
int32_t rec_jitter_short_term_abs_inv; /* Q18 */
int32_t temp;
+ assert(!bweStr->external_bw_info.in_use);
+
/* Q18 rec jitter short term abs is in Q13, multiply it by 2^13 to save precision
2^18 then needs to be shifted 13 bits to 2^31 */
rec_jitter_short_term_abs_inv = 0x80000000u / bweStr->recJitterShortTermAbs;
@@ -777,6 +790,8 @@ int16_t WebRtcIsacfix_GetDownlinkMaxDelay(const BwEstimatorstr *bweStr)
{
int16_t recMaxDelay = (int16_t)(bweStr->recMaxDelay >> 15);
+ assert(!bweStr->external_bw_info.in_use);
+
/* limit range of jitter estimate */
if (recMaxDelay < MIN_ISAC_MD) {
recMaxDelay = MIN_ISAC_MD;
@@ -787,42 +802,39 @@ int16_t WebRtcIsacfix_GetDownlinkMaxDelay(const BwEstimatorstr *bweStr)
return recMaxDelay;
}
-/* get the bottle neck rate from here to far side, as estimated by far side */
-int16_t WebRtcIsacfix_GetUplinkBandwidth(const BwEstimatorstr *bweStr)
-{
- int16_t send_bw;
-
- send_bw = (int16_t) WEBRTC_SPL_RSHIFT_U32(bweStr->sendBwAvg, 7);
-
- /* limit range of bottle neck rate */
- if (send_bw < MIN_ISAC_BW) {
- send_bw = MIN_ISAC_BW;
- } else if (send_bw > MAX_ISAC_BW) {
- send_bw = MAX_ISAC_BW;
- }
-
- return send_bw;
+/* Clamp val to the closed interval [min,max]. */
+static int16_t clamp(int16_t val, int16_t min, int16_t max) {
+ assert(min <= max);
+ return val < min ? min : (val > max ? max : val);
}
-
-
-/* Returns the max delay value from the other side in ms */
-int16_t WebRtcIsacfix_GetUplinkMaxDelay(const BwEstimatorstr *bweStr)
-{
- int16_t send_max_delay = (int16_t)(bweStr->sendMaxDelayAvg >> 9);
-
- /* limit range of jitter estimate */
- if (send_max_delay < MIN_ISAC_MD) {
- send_max_delay = MIN_ISAC_MD;
- } else if (send_max_delay > MAX_ISAC_MD) {
- send_max_delay = MAX_ISAC_MD;
- }
-
- return send_max_delay;
+int16_t WebRtcIsacfix_GetUplinkBandwidth(const BwEstimatorstr* bweStr) {
+ return bweStr->external_bw_info.in_use
+ ? bweStr->external_bw_info.send_bw_avg
+ : clamp(bweStr->sendBwAvg >> 7, MIN_ISAC_BW, MAX_ISAC_BW);
}
+int16_t WebRtcIsacfix_GetUplinkMaxDelay(const BwEstimatorstr* bweStr) {
+ return bweStr->external_bw_info.in_use
+ ? bweStr->external_bw_info.send_max_delay_avg
+ : clamp(bweStr->sendMaxDelayAvg >> 9, MIN_ISAC_MD, MAX_ISAC_MD);
+}
+void WebRtcIsacfixBw_GetBandwidthInfo(BwEstimatorstr* bweStr,
+ IsacBandwidthInfo* bwinfo) {
+ assert(!bweStr->external_bw_info.in_use);
+ bwinfo->in_use = 1;
+ bwinfo->send_bw_avg = WebRtcIsacfix_GetUplinkBandwidth(bweStr);
+ bwinfo->send_max_delay_avg = WebRtcIsacfix_GetUplinkMaxDelay(bweStr);
+ bwinfo->bottleneck_idx = WebRtcIsacfix_GetDownlinkBwIndexImpl(bweStr);
+ bwinfo->jitter_info = 0; // Not used.
+}
+void WebRtcIsacfixBw_SetBandwidthInfo(BwEstimatorstr* bweStr,
+ const IsacBandwidthInfo* bwinfo) {
+ memcpy(&bweStr->external_bw_info, bwinfo,
+ sizeof bweStr->external_bw_info);
+}
/*
* update long-term average bitrate and amount of data in buffer

Powered by Google App Engine
This is Rietveld 408576698