1aa5ea1c0f9d0df583ae0f791f6715a0764aff3cfminyue@webrtc.org/*
2aa5ea1c0f9d0df583ae0f791f6715a0764aff3cfminyue@webrtc.org *  Copyright (c) 2014 The WebRTC project authors. All Rights Reserved.
3aa5ea1c0f9d0df583ae0f791f6715a0764aff3cfminyue@webrtc.org *
4aa5ea1c0f9d0df583ae0f791f6715a0764aff3cfminyue@webrtc.org *  Use of this source code is governed by a BSD-style license
5aa5ea1c0f9d0df583ae0f791f6715a0764aff3cfminyue@webrtc.org *  that can be found in the LICENSE file in the root of the source
6aa5ea1c0f9d0df583ae0f791f6715a0764aff3cfminyue@webrtc.org *  tree. An additional intellectual property rights grant can be found
7aa5ea1c0f9d0df583ae0f791f6715a0764aff3cfminyue@webrtc.org *  in the file PATENTS.  All contributing project authors may
8aa5ea1c0f9d0df583ae0f791f6715a0764aff3cfminyue@webrtc.org *  be found in the AUTHORS file in the root of the source tree.
9aa5ea1c0f9d0df583ae0f791f6715a0764aff3cfminyue@webrtc.org */
10aa5ea1c0f9d0df583ae0f791f6715a0764aff3cfminyue@webrtc.org
113e6db2321ccdc8738c9cecbe9bdab13d4f0f658dkjellander#ifndef WEBRTC_MODULES_AUDIO_CODING_TEST_PACKETLOSSTEST_H_
123e6db2321ccdc8738c9cecbe9bdab13d4f0f658dkjellander#define WEBRTC_MODULES_AUDIO_CODING_TEST_PACKETLOSSTEST_H_
13aa5ea1c0f9d0df583ae0f791f6715a0764aff3cfminyue@webrtc.org
14aa5ea1c0f9d0df583ae0f791f6715a0764aff3cfminyue@webrtc.org#include <string>
1500b8f6b3643332cce1ee711715f7fbb824d793cakwiberg@webrtc.org#include "webrtc/base/scoped_ptr.h"
163e6db2321ccdc8738c9cecbe9bdab13d4f0f658dkjellander#include "webrtc/modules/audio_coding/test/EncodeDecodeTest.h"
17aa5ea1c0f9d0df583ae0f791f6715a0764aff3cfminyue@webrtc.org
18aa5ea1c0f9d0df583ae0f791f6715a0764aff3cfminyue@webrtc.orgnamespace webrtc {
19aa5ea1c0f9d0df583ae0f791f6715a0764aff3cfminyue@webrtc.org
20aa5ea1c0f9d0df583ae0f791f6715a0764aff3cfminyue@webrtc.orgclass ReceiverWithPacketLoss : public Receiver {
21aa5ea1c0f9d0df583ae0f791f6715a0764aff3cfminyue@webrtc.org public:
22aa5ea1c0f9d0df583ae0f791f6715a0764aff3cfminyue@webrtc.org  ReceiverWithPacketLoss();
23aa5ea1c0f9d0df583ae0f791f6715a0764aff3cfminyue@webrtc.org  void Setup(AudioCodingModule *acm, RTPStream *rtpStream,
24aa5ea1c0f9d0df583ae0f791f6715a0764aff3cfminyue@webrtc.org             std::string out_file_name, int channels, int loss_rate,
25aa5ea1c0f9d0df583ae0f791f6715a0764aff3cfminyue@webrtc.org             int burst_length);
2614665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org  bool IncomingPacket() override;
2714665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org
28aa5ea1c0f9d0df583ae0f791f6715a0764aff3cfminyue@webrtc.org protected:
29aa5ea1c0f9d0df583ae0f791f6715a0764aff3cfminyue@webrtc.org  bool PacketLost();
30aa5ea1c0f9d0df583ae0f791f6715a0764aff3cfminyue@webrtc.org  int loss_rate_;
31aa5ea1c0f9d0df583ae0f791f6715a0764aff3cfminyue@webrtc.org  int burst_length_;
32aa5ea1c0f9d0df583ae0f791f6715a0764aff3cfminyue@webrtc.org  int packet_counter_;
33aa5ea1c0f9d0df583ae0f791f6715a0764aff3cfminyue@webrtc.org  int lost_packet_counter_;
34aa5ea1c0f9d0df583ae0f791f6715a0764aff3cfminyue@webrtc.org  int burst_lost_counter_;
35aa5ea1c0f9d0df583ae0f791f6715a0764aff3cfminyue@webrtc.org};
36aa5ea1c0f9d0df583ae0f791f6715a0764aff3cfminyue@webrtc.org
37aa5ea1c0f9d0df583ae0f791f6715a0764aff3cfminyue@webrtc.orgclass SenderWithFEC : public Sender {
38aa5ea1c0f9d0df583ae0f791f6715a0764aff3cfminyue@webrtc.org public:
39aa5ea1c0f9d0df583ae0f791f6715a0764aff3cfminyue@webrtc.org  SenderWithFEC();
40aa5ea1c0f9d0df583ae0f791f6715a0764aff3cfminyue@webrtc.org  void Setup(AudioCodingModule *acm, RTPStream *rtpStream,
41aa5ea1c0f9d0df583ae0f791f6715a0764aff3cfminyue@webrtc.org             std::string in_file_name, int sample_rate, int channels,
42aa5ea1c0f9d0df583ae0f791f6715a0764aff3cfminyue@webrtc.org             int expected_loss_rate);
43aa5ea1c0f9d0df583ae0f791f6715a0764aff3cfminyue@webrtc.org  bool SetPacketLossRate(int expected_loss_rate);
44aa5ea1c0f9d0df583ae0f791f6715a0764aff3cfminyue@webrtc.org  bool SetFEC(bool enable_fec);
45aa5ea1c0f9d0df583ae0f791f6715a0764aff3cfminyue@webrtc.org protected:
46aa5ea1c0f9d0df583ae0f791f6715a0764aff3cfminyue@webrtc.org  int expected_loss_rate_;
47aa5ea1c0f9d0df583ae0f791f6715a0764aff3cfminyue@webrtc.org};
48aa5ea1c0f9d0df583ae0f791f6715a0764aff3cfminyue@webrtc.org
49aa5ea1c0f9d0df583ae0f791f6715a0764aff3cfminyue@webrtc.orgclass PacketLossTest : public ACMTest {
50aa5ea1c0f9d0df583ae0f791f6715a0764aff3cfminyue@webrtc.org public:
51aa5ea1c0f9d0df583ae0f791f6715a0764aff3cfminyue@webrtc.org  PacketLossTest(int channels, int expected_loss_rate_, int actual_loss_rate,
52aa5ea1c0f9d0df583ae0f791f6715a0764aff3cfminyue@webrtc.org                 int burst_length);
53aa5ea1c0f9d0df583ae0f791f6715a0764aff3cfminyue@webrtc.org  void Perform();
54aa5ea1c0f9d0df583ae0f791f6715a0764aff3cfminyue@webrtc.org protected:
55aa5ea1c0f9d0df583ae0f791f6715a0764aff3cfminyue@webrtc.org  int channels_;
56aa5ea1c0f9d0df583ae0f791f6715a0764aff3cfminyue@webrtc.org  std::string in_file_name_;
57aa5ea1c0f9d0df583ae0f791f6715a0764aff3cfminyue@webrtc.org  int sample_rate_hz_;
5800b8f6b3643332cce1ee711715f7fbb824d793cakwiberg@webrtc.org  rtc::scoped_ptr<SenderWithFEC> sender_;
5900b8f6b3643332cce1ee711715f7fbb824d793cakwiberg@webrtc.org  rtc::scoped_ptr<ReceiverWithPacketLoss> receiver_;
60aa5ea1c0f9d0df583ae0f791f6715a0764aff3cfminyue@webrtc.org  int expected_loss_rate_;
61aa5ea1c0f9d0df583ae0f791f6715a0764aff3cfminyue@webrtc.org  int actual_loss_rate_;
62aa5ea1c0f9d0df583ae0f791f6715a0764aff3cfminyue@webrtc.org  int burst_length_;
63aa5ea1c0f9d0df583ae0f791f6715a0764aff3cfminyue@webrtc.org};
64aa5ea1c0f9d0df583ae0f791f6715a0764aff3cfminyue@webrtc.org
65aa5ea1c0f9d0df583ae0f791f6715a0764aff3cfminyue@webrtc.org}  // namespace webrtc
66aa5ea1c0f9d0df583ae0f791f6715a0764aff3cfminyue@webrtc.org
673e6db2321ccdc8738c9cecbe9bdab13d4f0f658dkjellander#endif  // WEBRTC_MODULES_AUDIO_CODING_TEST_PACKETLOSSTEST_H_
68