Raw packet loss rate reported by RTP_RTCP module may vary too drastically over time. This CL is to add a filter to the value in VoE before lending it to audio coding module.
The filter is an exponential filter borrowed from video coding module. The method is written in a new class called PacketLossProtector (not sure if the name is nice), which can be used in the future for more sophisticated logic. BUG= R=henrika@webrtc.org, stefan@webrtc.org Review URL: https://webrtc-codereview.appspot.com/20809004 git-svn-id: http://webrtc.googlecode.com/svn/trunk@6709 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
@ -837,7 +837,7 @@ uint8_t VCMLossProtectionLogic::FilteredLoss(
|
||||
case kNoFilter:
|
||||
break;
|
||||
case kAvgFilter:
|
||||
filtered_loss = static_cast<uint8_t> (_lossPr255.Value() + 0.5);
|
||||
filtered_loss = static_cast<uint8_t>(_lossPr255.filtered() + 0.5);
|
||||
break;
|
||||
case kMaxFilter:
|
||||
filtered_loss = MaxFilteredLossPr(nowMs);
|
||||
@ -907,8 +907,8 @@ VCMLossProtectionLogic::UpdateMethod()
|
||||
_currentParameters.keyFrameSize = _keyFrameSize;
|
||||
_currentParameters.fecRateDelta = _fecRateDelta;
|
||||
_currentParameters.fecRateKey = _fecRateKey;
|
||||
_currentParameters.packetsPerFrame = _packetsPerFrame.Value();
|
||||
_currentParameters.packetsPerFrameKey = _packetsPerFrameKey.Value();
|
||||
_currentParameters.packetsPerFrame = _packetsPerFrame.filtered();
|
||||
_currentParameters.packetsPerFrameKey = _packetsPerFrameKey.filtered();
|
||||
_currentParameters.residualPacketLossFec = _residualPacketLossFec;
|
||||
_currentParameters.codecWidth = _codecWidth;
|
||||
_currentParameters.codecHeight = _codecHeight;
|
||||
|
||||
@ -14,9 +14,9 @@
|
||||
#include <math.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "webrtc/base/exp_filter.h"
|
||||
#include "webrtc/modules/video_coding/main/source/internal_defines.h"
|
||||
#include "webrtc/modules/video_coding/main/source/qm_select.h"
|
||||
#include "webrtc/modules/video_coding/utility/include/exp_filter.h"
|
||||
#include "webrtc/system_wrappers/interface/trace.h"
|
||||
#include "webrtc/typedefs.h"
|
||||
|
||||
@ -367,27 +367,27 @@ private:
|
||||
// Sets the available loss protection methods.
|
||||
void UpdateMaxLossHistory(uint8_t lossPr255, int64_t now);
|
||||
uint8_t MaxFilteredLossPr(int64_t nowMs) const;
|
||||
VCMProtectionMethod* _selectedMethod;
|
||||
VCMProtectionParameters _currentParameters;
|
||||
uint32_t _rtt;
|
||||
float _lossPr;
|
||||
float _bitRate;
|
||||
float _frameRate;
|
||||
float _keyFrameSize;
|
||||
uint8_t _fecRateKey;
|
||||
uint8_t _fecRateDelta;
|
||||
int64_t _lastPrUpdateT;
|
||||
int64_t _lastPacketPerFrameUpdateT;
|
||||
int64_t _lastPacketPerFrameUpdateTKey;
|
||||
VCMExpFilter _lossPr255;
|
||||
VCMLossProbabilitySample _lossPrHistory[kLossPrHistorySize];
|
||||
uint8_t _shortMaxLossPr255;
|
||||
VCMExpFilter _packetsPerFrame;
|
||||
VCMExpFilter _packetsPerFrameKey;
|
||||
float _residualPacketLossFec;
|
||||
uint16_t _codecWidth;
|
||||
uint16_t _codecHeight;
|
||||
int _numLayers;
|
||||
VCMProtectionMethod* _selectedMethod;
|
||||
VCMProtectionParameters _currentParameters;
|
||||
uint32_t _rtt;
|
||||
float _lossPr;
|
||||
float _bitRate;
|
||||
float _frameRate;
|
||||
float _keyFrameSize;
|
||||
uint8_t _fecRateKey;
|
||||
uint8_t _fecRateDelta;
|
||||
int64_t _lastPrUpdateT;
|
||||
int64_t _lastPacketPerFrameUpdateT;
|
||||
int64_t _lastPacketPerFrameUpdateTKey;
|
||||
rtc::ExpFilter _lossPr255;
|
||||
VCMLossProbabilitySample _lossPrHistory[kLossPrHistorySize];
|
||||
uint8_t _shortMaxLossPr255;
|
||||
rtc::ExpFilter _packetsPerFrame;
|
||||
rtc::ExpFilter _packetsPerFrameKey;
|
||||
float _residualPacketLossFec;
|
||||
uint16_t _codecWidth;
|
||||
uint16_t _codecHeight;
|
||||
int _numLayers;
|
||||
};
|
||||
|
||||
} // namespace media_optimization
|
||||
|
||||
Reference in New Issue
Block a user