Adds fixed PL loss mode to neteq_quality_test.

It will be available in all inheriting tests.
The mode allows setting start time and duration for every loss event.

Bug: webrtc:8877
Change-Id: Ife36db6d431387083ac22406a0814e02117100bc
Reviewed-on: https://webrtc-review.googlesource.com/51822
Commit-Queue: Alex Narest <alexnarest@webrtc.org>
Reviewed-by: Henrik Lundin <henrik.lundin@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22005}
This commit is contained in:
Alex Narest
2018-02-13 15:55:27 +01:00
committed by Commit Bot
parent 18cf4b67dd
commit 2d06e366e8
2 changed files with 98 additions and 16 deletions

View File

@ -27,21 +27,29 @@
namespace webrtc {
namespace test {
enum LossModes {
kNoLoss,
kUniformLoss,
kGilbertElliotLoss,
kFixedLoss,
kLastLossMode
};
class LossModel {
public:
virtual ~LossModel() {};
virtual bool Lost() = 0;
virtual bool Lost(int now_ms) = 0;
};
class NoLoss : public LossModel {
public:
bool Lost() override;
bool Lost(int now_ms) override;
};
class UniformLoss : public LossModel {
public:
UniformLoss(double loss_rate);
bool Lost() override;
bool Lost(int now_ms) override;
void set_loss_rate(double loss_rate) { loss_rate_ = loss_rate; }
private:
@ -52,7 +60,7 @@ class GilbertElliotLoss : public LossModel {
public:
GilbertElliotLoss(double prob_trans_11, double prob_trans_01);
~GilbertElliotLoss() override;
bool Lost() override;
bool Lost(int now_ms) override;
private:
// Prob. of losing current packet, when previous packet is lost.
@ -63,6 +71,31 @@ class GilbertElliotLoss : public LossModel {
std::unique_ptr<UniformLoss> uniform_loss_model_;
};
struct FixedLossEvent {
int start_ms;
int duration_ms;
FixedLossEvent(int start_ms, int duration_ms)
: start_ms(start_ms), duration_ms(duration_ms) {}
};
struct FixedLossEventCmp {
bool operator()(const FixedLossEvent& l_event,
const FixedLossEvent& r_event) const {
return l_event.start_ms < r_event.start_ms;
}
};
class FixedLossModel : public LossModel {
public:
FixedLossModel(std::set<FixedLossEvent, FixedLossEventCmp> loss_events);
~FixedLossModel() override;
bool Lost(int now_ms) override;
private:
std::set<FixedLossEvent, FixedLossEventCmp> loss_events_;
std::set<FixedLossEvent, FixedLossEventCmp>::iterator loss_events_it_;
};
class NetEqQualityTest : public ::testing::Test {
protected:
NetEqQualityTest(int block_duration_ms,