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:
@ -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,
|
||||
|
||||
Reference in New Issue
Block a user