1. Make a clear distinction between codec internal FEC and RED, confusing mentioning of FEC in the old codes is replaced by RED
2. Add two new APIs to configure codec internal FEC
3. Add a test and listened to results. This is based modifying EncodeDecodeTest and deriving a new class from it.
New ACM gives good result.
Old ACM does not use NetEq 4, so FEC won't be decoded.
BUG=
R=tina.legrand@webrtc.org, turaj@webrtc.org
Review URL: https://webrtc-codereview.appspot.com/11759004
git-svn-id: http://webrtc.googlecode.com/svn/trunk@6233 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/webrtc/modules/audio_coding/main/test/PacketLossTest.h b/webrtc/modules/audio_coding/main/test/PacketLossTest.h
new file mode 100644
index 0000000..e34da8c
--- /dev/null
+++ b/webrtc/modules/audio_coding/main/test/PacketLossTest.h
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved.
+ *
+ * Use of this source code is governed by a BSD-style license
+ * that can be found in the LICENSE file in the root of the source
+ * tree. An additional intellectual property rights grant can be found
+ * in the file PATENTS. All contributing project authors may
+ * be found in the AUTHORS file in the root of the source tree.
+ */
+
+#ifndef WEBRTC_MODULES_AUDIO_CODING_MAIN_TEST_PACKETLOSSTEST_H_
+#define WEBRTC_MODULES_AUDIO_CODING_MAIN_TEST_PACKETLOSSTEST_H_
+
+#include <string>
+#include "webrtc/modules/audio_coding/main/test/EncodeDecodeTest.h"
+#include "webrtc/system_wrappers/interface/scoped_ptr.h"
+
+namespace webrtc {
+
+class ReceiverWithPacketLoss : public Receiver {
+ public:
+ ReceiverWithPacketLoss();
+ void Setup(AudioCodingModule *acm, RTPStream *rtpStream,
+ std::string out_file_name, int channels, int loss_rate,
+ int burst_length);
+ bool IncomingPacket() OVERRIDE;
+ protected:
+ bool PacketLost();
+ int loss_rate_;
+ int burst_length_;
+ int packet_counter_;
+ int lost_packet_counter_;
+ int burst_lost_counter_;
+};
+
+class SenderWithFEC : public Sender {
+ public:
+ SenderWithFEC();
+ void Setup(AudioCodingModule *acm, RTPStream *rtpStream,
+ std::string in_file_name, int sample_rate, int channels,
+ int expected_loss_rate);
+ bool SetPacketLossRate(int expected_loss_rate);
+ bool SetFEC(bool enable_fec);
+ protected:
+ int expected_loss_rate_;
+};
+
+class PacketLossTest : public ACMTest {
+ public:
+ PacketLossTest(int channels, int expected_loss_rate_, int actual_loss_rate,
+ int burst_length);
+ void Perform();
+ protected:
+ int channels_;
+ std::string in_file_name_;
+ int sample_rate_hz_;
+ scoped_ptr<SenderWithFEC> sender_;
+ scoped_ptr<ReceiverWithPacketLoss> receiver_;
+ int expected_loss_rate_;
+ int actual_loss_rate_;
+ int burst_length_;
+};
+
+} // namespace webrtc
+
+#endif // WEBRTC_MODULES_AUDIO_CODING_MAIN_TEST_PACKETLOSSTEST_H_