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