Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / third_party / webrtc / video / call_perf_tests.cc
index 62d2adc..cd83698 100644 (file)
@@ -15,6 +15,7 @@
 
 #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"
@@ -22,7 +23,6 @@
 #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"
@@ -45,6 +45,8 @@ namespace webrtc {
 
 class CallPerfTest : public test::CallTest {
  protected:
+  void TestAudioVideoSync(bool fec);
+
   void TestMinTransmitBitrate(bool pad_to_min_bitrate);
 
   void TestCaptureNtpTime(const FakeNetworkPipe::Config& net_config,
@@ -185,7 +187,7 @@ class VideoRtcpAndSyncObserver : public SyncRtcpObserver, public VideoRenderer {
   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)
@@ -226,6 +228,7 @@ TEST_F(CallPerfTest, PlaysOutAudioAndVideoInSync) {
 
   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,
@@ -254,6 +257,14 @@ TEST_F(CallPerfTest, PlaysOutAudioAndVideoInSync) {
   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;
 
@@ -291,6 +302,14 @@ TEST_F(CallPerfTest, PlaysOutAudioAndVideoInSync) {
   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,
@@ -380,7 +399,7 @@ void CallPerfTest::TestCaptureNtpTime(const FakeNetworkPipe::Config& net_config,
     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;
@@ -527,7 +546,7 @@ void CallPerfTest::TestMinTransmitBitrate(bool pad_to_min_bitrate) {
     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 {