Limit number of send-side BWE increases to one per second.

Also report 0 losses if not enough expected packets since
previous receiver report.

BUG=
TEST=

Review URL: http://webrtc-codereview.appspot.com/270009

git-svn-id: http://webrtc.googlecode.com/svn/trunk@954 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
stefan@webrtc.org 2011-11-16 07:58:31 +00:00
parent 3d1ef0c943
commit fcf33eb7e0
2 changed files with 21 additions and 4 deletions

View File

@ -12,10 +12,12 @@
#include "trace.h"
#include "rtp_utility.h"
#include "rtp_rtcp_config.h"
#include "tick_util.h"
#include <math.h> // sqrt()
namespace webrtc {
BandwidthManagement::BandwidthManagement(const WebRtc_Word32 id) :
_id(id),
_critsect(*CriticalSectionWrapper::CreateCriticalSection()),
@ -31,7 +33,8 @@ BandwidthManagement::BandwidthManagement(const WebRtc_Word32 id) :
_last_round_trip_time(0),
_bwEstimateIncoming(0),
_smoothedFractionLostQ4(-1), // indicate uninitialized
_sFLFactorQ4(14) // 0.875 in Q4
_sFLFactorQ4(14), // 0.875 in Q4
_timeLastIncrease(0)
{
}
@ -157,9 +160,9 @@ WebRtc_Word32 BandwidthManagement::UpdatePacketLoss(
}
else
{
// Report same loss as before and keep the accumulators until
// the next report.
*loss = _lastLoss;
// Report zero loss until we have enough data to estimate
// the loss rate.
*loss = 0;
}
}
}
@ -218,6 +221,17 @@ WebRtc_UWord32 BandwidthManagement::ShapeSimple(WebRtc_Word32 packetLoss,
WebRtc_UWord32 newBitRate = 0;
bool reducing = false;
// Limit the rate increases to once a second.
if (packetLoss <= 5)
{
if ((TickTime::MillisecondTimestamp() - _timeLastIncrease) <
kBWEUpdateIntervalMs)
{
return _bitRate;
}
_timeLastIncrease = TickTime::MillisecondTimestamp();
}
if (packetLoss > 5 && packetLoss <= 26)
{
// 2% - 10%

View File

@ -58,6 +58,8 @@ protected:
WebRtc_Word32 packetLoss);
private:
enum { kBWEUpdateIntervalMs = 1000 };
WebRtc_Word32 _id;
CriticalSectionWrapper& _critsect;
@ -81,6 +83,7 @@ private:
WebRtc_UWord32 _bwEstimateIncoming;
WebRtc_Word16 _smoothedFractionLostQ4;
WebRtc_Word16 _sFLFactorQ4; // forgetting factor for _smoothedFractionLostQ4
WebRtc_Word64 _timeLastIncrease;
};
} // namespace webrtc