#include "testing/gtest/include/gtest/gtest.h"
+#include "webrtc/base/thread_annotations.h"
#include "webrtc/call.h"
#include "webrtc/modules/audio_coding/main/interface/audio_coding_module.h"
#include "webrtc/modules/rtp_rtcp/interface/rtp_header_parser.h"
#include "webrtc/system_wrappers/interface/critical_section_wrapper.h"
#include "webrtc/system_wrappers/interface/rtp_to_ntp.h"
#include "webrtc/system_wrappers/interface/scoped_ptr.h"
-#include "webrtc/system_wrappers/interface/thread_annotations.h"
#include "webrtc/test/call_test.h"
#include "webrtc/test/direct_transport.h"
#include "webrtc/test/encoder_settings.h"
class CallPerfTest : public test::CallTest {
protected:
+ void TestAudioVideoSync(bool fec);
+
void TestMinTransmitBitrate(bool pad_to_min_bitrate);
void TestCaptureNtpTime(const FakeNetworkPipe::Config& net_config,
int64_t first_time_in_sync_;
};
-TEST_F(CallPerfTest, PlaysOutAudioAndVideoInSync) {
+void CallPerfTest::TestAudioVideoSync(bool fec) {
class AudioPacketReceiver : public PacketReceiver {
public:
AudioPacketReceiver(int channel, VoENetwork* voe_network)
FakeNetworkPipe::Config net_config;
net_config.queue_delay_ms = 500;
+ net_config.loss_percent = 5;
SyncRtcpObserver audio_observer(net_config);
VideoRtcpAndSyncObserver observer(Clock::GetRealTimeClock(),
channel,
CreateSendConfig(1);
CreateMatchingReceiveConfigs();
+ send_config_.rtp.nack.rtp_history_ms = kNackRtpHistoryMs;
+ if (fec) {
+ send_config_.rtp.fec.red_payload_type = kRedPayloadType;
+ send_config_.rtp.fec.ulpfec_payload_type = kUlpfecPayloadType;
+ receive_configs_[0].rtp.fec.red_payload_type = kRedPayloadType;
+ receive_configs_[0].rtp.fec.ulpfec_payload_type = kUlpfecPayloadType;
+ }
+ receive_configs_[0].rtp.nack.rtp_history_ms = 1000;
receive_configs_[0].renderer = &observer;
receive_configs_[0].audio_channel_id = channel;
VoiceEngine::Delete(voice_engine);
}
+TEST_F(CallPerfTest, PlaysOutAudioAndVideoInSync) {
+ TestAudioVideoSync(false);
+}
+
+TEST_F(CallPerfTest, PlaysOutAudioAndVideoInSyncWithFec) {
+ TestAudioVideoSync(true);
+}
+
void CallPerfTest::TestCaptureNtpTime(const FakeNetworkPipe::Config& net_config,
int threshold_ms,
int start_time_ms,
virtual void ModifyConfigs(
VideoSendStream::Config* send_config,
std::vector<VideoReceiveStream::Config>* receive_configs,
- std::vector<VideoStream>* video_streams) OVERRIDE {
+ VideoEncoderConfig* encoder_config) OVERRIDE {
(*receive_configs)[0].renderer = this;
// Enable the receiver side rtt calculation.
(*receive_configs)[0].rtp.rtcp_xr.receiver_reference_time_report = true;
virtual void ModifyConfigs(
VideoSendStream::Config* send_config,
std::vector<VideoReceiveStream::Config>* receive_configs,
- std::vector<VideoStream>* video_streams) OVERRIDE {
+ VideoEncoderConfig* encoder_config) OVERRIDE {
if (pad_to_min_bitrate_) {
send_config->rtp.min_transmit_bitrate_bps = kMinTransmitBitrateBps;
} else {