Change PlayoutLatency setLatency zero-threshold value.

This is needed to match behaviour described in this spec:
https://github.com/henbos/webrtc-timing/pull/2

Bug: webrtc:10287
Change-Id: Idce9af2ec63705dfbfb500b7dbbf755ed3eab571
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/131336
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Commit-Queue: Ruslan Burakov <kuddai@google.com>
Cr-Commit-Position: refs/heads/master@{#27480}
diff --git a/pc/BUILD.gn b/pc/BUILD.gn
index 1089621..a913f42 100644
--- a/pc/BUILD.gn
+++ b/pc/BUILD.gn
@@ -212,6 +212,7 @@
     "../rtc_base",
     "../rtc_base:checks",
     "../rtc_base:rtc_base_approved",
+    "../rtc_base:safe_minmax",
     "../rtc_base/system:rtc_export",
     "../rtc_base/third_party/base64",
     "../rtc_base/third_party/sigslot",
diff --git a/pc/playout_latency.cc b/pc/playout_latency.cc
index aa7f950..063f232 100644
--- a/pc/playout_latency.cc
+++ b/pc/playout_latency.cc
@@ -14,13 +14,13 @@
 #include "rtc_base/location.h"
 #include "rtc_base/logging.h"
 #include "rtc_base/numerics/safe_conversions.h"
+#include "rtc_base/numerics/safe_minmax.h"
 #include "rtc_base/thread.h"
 #include "rtc_base/thread_checker.h"
 
 namespace {
 constexpr int kDefaultLatency = 0;
 constexpr int kMaximumDelayMs = 10000;
-constexpr int kRoundToZeroThresholdMs = 10;
 }  // namespace
 
 namespace webrtc {
@@ -53,16 +53,7 @@
   RTC_DCHECK_RUN_ON(worker_thread_);
 
   int delay_ms = rtc::dchecked_cast<int>(latency * 1000);
-  // In JitterBuffer 0 delay has special meaning of being unconstrained value
-  // that is why we round delay to 0 if it is small enough during conversion
-  // from latency.
-  if (delay_ms <= kRoundToZeroThresholdMs) {
-    delay_ms = 0;
-  }
-
-  if (delay_ms > kMaximumDelayMs) {
-    delay_ms = kMaximumDelayMs;
-  }
+  delay_ms = rtc::SafeClamp(delay_ms, 0, kMaximumDelayMs);
 
   cached_latency_ = latency;
   if (media_channel_ && ssrc_) {
diff --git a/pc/playout_latency_unittest.cc b/pc/playout_latency_unittest.cc
index d603477..c991254 100644
--- a/pc/playout_latency_unittest.cc
+++ b/pc/playout_latency_unittest.cc
@@ -90,16 +90,6 @@
   EXPECT_DOUBLE_EQ(4.0, latency_->GetLatency());
 }
 
-TEST_F(PlayoutLatencyTest, Rounding) {
-  latency_->OnStart(&delayable_, kSsrc);
-  // In Jitter Buffer (Audio or Video) delay 0 has a special meaning of
-  // unconstrained variable, that is why here if latency is small enough we
-  // round it to 0 delay.
-  EXPECT_CALL(delayable_, SetBaseMinimumPlayoutDelayMs(kSsrc, 0))
-      .WillOnce(Return(true));
-  latency_->SetLatency(0.005);
-}
-
 TEST_F(PlayoutLatencyTest, Clamping) {
   latency_->OnStart(&delayable_, kSsrc);
 
@@ -109,6 +99,11 @@
       .WillOnce(Return(true));
   latency_->SetLatency(10.5);
 
+  // Boundary value in seconds to milliseconds conversion.
+  EXPECT_CALL(delayable_, SetBaseMinimumPlayoutDelayMs(kSsrc, 0))
+      .WillOnce(Return(true));
+  latency_->SetLatency(0.0009);
+
   EXPECT_CALL(delayable_, SetBaseMinimumPlayoutDelayMs(kSsrc, 0))
       .WillOnce(Return(true));