Add minimum waiting time to NetEQ metrics

Adding minWaitingTimeMs to ACMNetworkStatistics and to
NetworkStatistics. Also adding unittest.

TEST=audio_coding_unittests

Review URL: http://webrtc-codereview.appspot.com/350006

git-svn-id: http://webrtc.googlecode.com/svn/trunk@1408 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/src/common_types.h b/src/common_types.h
index 02d712e..8106945 100644
--- a/src/common_types.h
+++ b/src/common_types.h
@@ -271,6 +271,8 @@
     int meanWaitingTimeMs;
     // median packet waiting time in the jitter buffer (ms)
     int medianWaitingTimeMs;
+    // min packet waiting time in the jitter buffer (ms)
+    int minWaitingTimeMs;
     // max packet waiting time in the jitter buffer (ms)
     int maxWaitingTimeMs;
 };
diff --git a/src/modules/audio_coding/main/interface/audio_coding_module_typedefs.h b/src/modules/audio_coding/main/interface/audio_coding_module_typedefs.h
index 527ea94..c0e06ef 100644
--- a/src/modules/audio_coding/main/interface/audio_coding_module_typedefs.h
+++ b/src/modules/audio_coding/main/interface/audio_coding_module_typedefs.h
@@ -160,6 +160,7 @@
 //                           rate is higher than sender sample rate.
 // -meanWaitingTimeMs      : average packet waiting time in the buffer
 // -medianWaitingTimeMs    : median packet waiting time in the buffer
+// -minWaitingTimeMs       : min packet waiting time in the buffer
 // -maxWaitingTimeMs       : max packet waiting time in the buffer
 typedef struct {
   WebRtc_UWord16 currentBufferSize;
@@ -173,6 +174,7 @@
   int32_t clockDriftPPM;
   int meanWaitingTimeMs;
   int medianWaitingTimeMs;
+  int minWaitingTimeMs;
   int maxWaitingTimeMs;
 } ACMNetworkStatistics;
 
diff --git a/src/modules/audio_coding/main/source/acm_neteq.cc b/src/modules/audio_coding/main/source/acm_neteq.cc
index 14afcd8..30a6a1e 100644
--- a/src/modules/audio_coding/main/source/acm_neteq.cc
+++ b/src/modules/audio_coding/main/source/acm_neteq.cc
@@ -486,6 +486,7 @@
         {
             statistics->meanWaitingTimeMs = -1;
             statistics->medianWaitingTimeMs = -1;
+            statistics->minWaitingTimeMs = -1;
             statistics->maxWaitingTimeMs = -1;
         }
         else
@@ -500,6 +501,7 @@
             {
                 statistics->medianWaitingTimeMs = waiting_times_vec[size / 2];
             }
+            statistics->minWaitingTimeMs = waiting_times_vec.front();
             statistics->maxWaitingTimeMs = waiting_times_vec.back();
             double sum = 0;
             for (size_t i = 0; i < size; ++i) {
diff --git a/src/modules/audio_coding/main/source/acm_neteq_unittest.cc b/src/modules/audio_coding/main/source/acm_neteq_unittest.cc
index 88029de..7feb2e0 100644
--- a/src/modules/audio_coding/main/source/acm_neteq_unittest.cc
+++ b/src/modules/audio_coding/main/source/acm_neteq_unittest.cc
@@ -113,6 +113,7 @@
   EXPECT_EQ(0, stats.currentAccelerateRate);
   EXPECT_EQ(-916, stats.clockDriftPPM);  // Initial value is slightly off.
   EXPECT_EQ(300, stats.maxWaitingTimeMs);
+  EXPECT_EQ(10, stats.minWaitingTimeMs);
   EXPECT_EQ(159, stats.meanWaitingTimeMs);
   EXPECT_EQ(160, stats.medianWaitingTimeMs);
 }
@@ -137,6 +138,7 @@
   EXPECT_EQ(0, stats.currentPreemptiveRate);
   EXPECT_EQ(0, stats.currentAccelerateRate);
   EXPECT_EQ(-916, stats.clockDriftPPM);  // Initial value is slightly off.
+  EXPECT_EQ(-1, stats.minWaitingTimeMs);
   EXPECT_EQ(-1, stats.maxWaitingTimeMs);
   EXPECT_EQ(-1, stats.meanWaitingTimeMs);
   EXPECT_EQ(-1, stats.medianWaitingTimeMs);
diff --git a/src/modules/audio_coding/main/test/APITest.cc b/src/modules/audio_coding/main/test/APITest.cc
index c25bfc0..ed44178 100644
--- a/src/modules/audio_coding/main/test/APITest.cc
+++ b/src/modules/audio_coding/main/test/APITest.cc
@@ -987,6 +987,7 @@
         fprintf(stdout, "Clock-drift............. %d\n", networkStat.clockDriftPPM);
         fprintf(stdout, "Mean waiting time....... %d\n", networkStat.meanWaitingTimeMs);
         fprintf(stdout, "Median waiting time..... %d\n", networkStat.medianWaitingTimeMs);
+        fprintf(stdout, "Min waiting time........ %d\n", networkStat.minWaitingTimeMs);
         fprintf(stdout, "Max waiting time........ %d\n", networkStat.maxWaitingTimeMs);
     }
 
diff --git a/src/voice_engine/main/test/auto_test/voe_standard_test.cc b/src/voice_engine/main/test/auto_test/voe_standard_test.cc
index bd72808..4abb40e 100644
--- a/src/voice_engine/main/test/auto_test/voe_standard_test.cc
+++ b/src/voice_engine/main/test/auto_test/voe_standard_test.cc
@@ -2593,6 +2593,8 @@
            nStats.meanWaitingTimeMs);
   TEST_LOG("    medianWaitingTimeMs       = %i \n",
            nStats.medianWaitingTimeMs);
+  TEST_LOG("    minWaitingTimeMs          = %i \n",
+           nStats.minWaitingTimeMs);
   TEST_LOG("    maxWaitingTimeMs          = %i \n",
            nStats.maxWaitingTimeMs);
 #else