Optional: Use nullopt and implicit construction in /modules/audio_processing

Changes places where we explicitly construct an Optional to instead use
nullopt or the requisite value type only.

This CL was uploaded by git cl split.

R=henrik.lundin@webrtc.org

Bug: None
Change-Id: I733a83f702fe11884d229a1713cfac952727bde8
Reviewed-on: https://webrtc-review.googlesource.com/23601
Commit-Queue: Oskar Sundbom <ossu@webrtc.org>
Reviewed-by: Henrik Lundin <henrik.lundin@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20786}
diff --git a/modules/audio_processing/aec3/adaptive_fir_filter_unittest.cc b/modules/audio_processing/aec3/adaptive_fir_filter_unittest.cc
index ffac7d1..cc9b09b 100644
--- a/modules/audio_processing/aec3/adaptive_fir_filter_unittest.cc
+++ b/modules/audio_processing/aec3/adaptive_fir_filter_unittest.cc
@@ -365,9 +365,8 @@
       filter.Adapt(render_buffer, G);
       aec_state.HandleEchoPathChange(EchoPathVariability(false, false));
       aec_state.Update(filter.FilterFrequencyResponse(),
-                       filter.FilterImpulseResponse(), true,
-                       rtc::Optional<size_t>(), render_buffer, E2_main, Y2,
-                       x[0], s, false);
+                       filter.FilterImpulseResponse(), true, rtc::nullopt,
+                       render_buffer, E2_main, Y2, x[0], s, false);
     }
     // Verify that the filter is able to perform well.
     EXPECT_LT(1000 * std::inner_product(e.begin(), e.end(), e.begin(), 0.f),
diff --git a/modules/audio_processing/aec3/aec_state.cc b/modules/audio_processing/aec3/aec_state.cc
index 9b0f774..9349e47 100644
--- a/modules/audio_processing/aec3/aec_state.cc
+++ b/modules/audio_processing/aec3/aec_state.cc
@@ -113,12 +113,11 @@
   force_zero_gain_ = (++force_zero_gain_counter_) < kNumBlocksPerSecond / 5;
 
   // Estimate delays.
-  filter_delay_ = rtc::Optional<size_t>(
-      EstimateFilterDelay(adaptive_filter_frequency_response));
+  filter_delay_ = EstimateFilterDelay(adaptive_filter_frequency_response);
   external_delay_ =
       external_delay_samples
           ? rtc::Optional<size_t>(*external_delay_samples / kBlockSize)
-          : rtc::Optional<size_t>();
+          : rtc::nullopt;
 
   // Update the ERL and ERLE measures.
   if (converged_filter && capture_block_counter_ >= 2 * kNumBlocksPerSecond) {
diff --git a/modules/audio_processing/aec3/aec_state_unittest.cc b/modules/audio_processing/aec3/aec_state_unittest.cc
index fd6a34b..34b877b 100644
--- a/modules/audio_processing/aec3/aec_state_unittest.cc
+++ b/modules/audio_processing/aec3/aec_state_unittest.cc
@@ -44,51 +44,44 @@
   // Verify that linear AEC usability is false when the filter is diverged and
   // there is no external delay reported.
   state.Update(diverged_filter_frequency_response, impulse_response, true,
-               rtc::Optional<size_t>(), render_buffer, E2_main, Y2, x[0], s,
-               false);
+               rtc::nullopt, render_buffer, E2_main, Y2, x[0], s, false);
   EXPECT_FALSE(state.UsableLinearEstimate());
 
   // Verify that linear AEC usability is true when the filter is converged
   std::fill(x[0].begin(), x[0].end(), 101.f);
   for (int k = 0; k < 3000; ++k) {
-    state.Update(converged_filter_frequency_response, impulse_response, true,
-                 rtc::Optional<size_t>(2), render_buffer, E2_main, Y2, x[0], s,
-                 false);
+    state.Update(converged_filter_frequency_response, impulse_response, true, 2,
+                 render_buffer, E2_main, Y2, x[0], s, false);
   }
   EXPECT_TRUE(state.UsableLinearEstimate());
 
   // Verify that linear AEC usability becomes false after an echo path change is
   // reported
   state.HandleEchoPathChange(EchoPathVariability(true, false));
-  state.Update(converged_filter_frequency_response, impulse_response, true,
-               rtc::Optional<size_t>(2), render_buffer, E2_main, Y2, x[0], s,
-               false);
+  state.Update(converged_filter_frequency_response, impulse_response, true, 2,
+               render_buffer, E2_main, Y2, x[0], s, false);
   EXPECT_FALSE(state.UsableLinearEstimate());
 
   // Verify that the active render detection works as intended.
   std::fill(x[0].begin(), x[0].end(), 101.f);
   state.HandleEchoPathChange(EchoPathVariability(true, true));
-  state.Update(converged_filter_frequency_response, impulse_response, true,
-               rtc::Optional<size_t>(2), render_buffer, E2_main, Y2, x[0], s,
-               false);
+  state.Update(converged_filter_frequency_response, impulse_response, true, 2,
+               render_buffer, E2_main, Y2, x[0], s, false);
   EXPECT_FALSE(state.ActiveRender());
 
   for (int k = 0; k < 1000; ++k) {
-    state.Update(converged_filter_frequency_response, impulse_response, true,
-                 rtc::Optional<size_t>(2), render_buffer, E2_main, Y2, x[0], s,
-                 false);
+    state.Update(converged_filter_frequency_response, impulse_response, true, 2,
+                 render_buffer, E2_main, Y2, x[0], s, false);
   }
   EXPECT_TRUE(state.ActiveRender());
 
   // Verify that echo leakage is properly reported.
-  state.Update(converged_filter_frequency_response, impulse_response, true,
-               rtc::Optional<size_t>(2), render_buffer, E2_main, Y2, x[0], s,
-               false);
+  state.Update(converged_filter_frequency_response, impulse_response, true, 2,
+               render_buffer, E2_main, Y2, x[0], s, false);
   EXPECT_FALSE(state.EchoLeakageDetected());
 
-  state.Update(converged_filter_frequency_response, impulse_response, true,
-               rtc::Optional<size_t>(2), render_buffer, E2_main, Y2, x[0], s,
-               true);
+  state.Update(converged_filter_frequency_response, impulse_response, true, 2,
+               render_buffer, E2_main, Y2, x[0], s, true);
   EXPECT_TRUE(state.EchoLeakageDetected());
 
   // Verify that the ERL is properly estimated
@@ -103,9 +96,8 @@
 
   Y2.fill(10.f * 10000.f * 10000.f);
   for (size_t k = 0; k < 1000; ++k) {
-    state.Update(converged_filter_frequency_response, impulse_response, true,
-                 rtc::Optional<size_t>(2), render_buffer, E2_main, Y2, x[0], s,
-                 false);
+    state.Update(converged_filter_frequency_response, impulse_response, true, 2,
+                 render_buffer, E2_main, Y2, x[0], s, false);
   }
 
   ASSERT_TRUE(state.UsableLinearEstimate());
@@ -120,9 +112,8 @@
   E2_main.fill(1.f * 10000.f * 10000.f);
   Y2.fill(10.f * E2_main[0]);
   for (size_t k = 0; k < 1000; ++k) {
-    state.Update(converged_filter_frequency_response, impulse_response, true,
-                 rtc::Optional<size_t>(2), render_buffer, E2_main, Y2, x[0], s,
-                 false);
+    state.Update(converged_filter_frequency_response, impulse_response, true, 2,
+                 render_buffer, E2_main, Y2, x[0], s, false);
   }
   ASSERT_TRUE(state.UsableLinearEstimate());
   {
@@ -141,9 +132,8 @@
   E2_main.fill(1.f * 10000.f * 10000.f);
   Y2.fill(5.f * E2_main[0]);
   for (size_t k = 0; k < 1000; ++k) {
-    state.Update(converged_filter_frequency_response, impulse_response, true,
-                 rtc::Optional<size_t>(2), render_buffer, E2_main, Y2, x[0], s,
-                 false);
+    state.Update(converged_filter_frequency_response, impulse_response, true, 2,
+                 render_buffer, E2_main, Y2, x[0], s, false);
   }
 
   ASSERT_TRUE(state.UsableLinearEstimate());
@@ -189,9 +179,8 @@
     frequency_response[k].fill(100.f);
     frequency_response[k][0] = 0.f;
     state.HandleEchoPathChange(echo_path_variability);
-    state.Update(frequency_response, impulse_response, true,
-                 rtc::Optional<size_t>(), render_buffer, E2_main, Y2, x, s,
-                 false);
+    state.Update(frequency_response, impulse_response, true, rtc::nullopt,
+                 render_buffer, E2_main, Y2, x, s, false);
     EXPECT_TRUE(k == (kFilterLength - 1) || state.FilterDelay());
     if (k != (kFilterLength - 1)) {
       EXPECT_EQ(k, state.FilterDelay());
@@ -225,9 +214,8 @@
 
   for (size_t k = 0; k < frequency_response.size() - 1; ++k) {
     state.HandleEchoPathChange(EchoPathVariability(false, false));
-    state.Update(frequency_response, impulse_response, true,
-                 rtc::Optional<size_t>(k * kBlockSize + 5), render_buffer,
-                 E2_main, Y2, x, s, false);
+    state.Update(frequency_response, impulse_response, true, k * kBlockSize + 5,
+                 render_buffer, E2_main, Y2, x, s, false);
     EXPECT_TRUE(state.ExternalDelay());
     EXPECT_EQ(k, state.ExternalDelay());
   }
@@ -235,9 +223,8 @@
   // Verify that the externally reported delay is properly unset when it is no
   // longer present.
   state.HandleEchoPathChange(EchoPathVariability(false, false));
-  state.Update(frequency_response, impulse_response, true,
-               rtc::Optional<size_t>(), render_buffer, E2_main, Y2, x, s,
-               false);
+  state.Update(frequency_response, impulse_response, true, rtc::nullopt,
+               render_buffer, E2_main, Y2, x, s, false);
   EXPECT_FALSE(state.ExternalDelay());
 }
 
diff --git a/modules/audio_processing/aec3/echo_path_delay_estimator.cc b/modules/audio_processing/aec3/echo_path_delay_estimator.cc
index a57d541..914f2d2 100644
--- a/modules/audio_processing/aec3/echo_path_delay_estimator.cc
+++ b/modules/audio_processing/aec3/echo_path_delay_estimator.cc
@@ -81,7 +81,7 @@
   return aggregated_matched_filter_lag
              ? rtc::Optional<size_t>(*aggregated_matched_filter_lag *
                                      down_sampling_factor_)
-             : rtc::Optional<size_t>();
+             : rtc::nullopt;
 }
 
 }  // namespace webrtc
diff --git a/modules/audio_processing/aec3/echo_remover_unittest.cc b/modules/audio_processing/aec3/echo_remover_unittest.cc
index 84a54b4..24b50e8 100644
--- a/modules/audio_processing/aec3/echo_remover_unittest.cc
+++ b/modules/audio_processing/aec3/echo_remover_unittest.cc
@@ -64,7 +64,7 @@
                                                 k % 5 == 0 ? true : false);
       rtc::Optional<size_t> echo_path_delay_samples =
           (k % 6 == 0 ? rtc::Optional<size_t>(k * 10)
-                      : rtc::Optional<size_t>());
+                      : rtc::nullopt);
       render_buffer->Insert(render);
       render_buffer->UpdateBuffers();
       remover->ProcessCapture(echo_path_delay_samples, echo_path_variability,
@@ -198,8 +198,7 @@
         render_buffer->Insert(x);
         render_buffer->UpdateBuffers();
 
-        remover->ProcessCapture(rtc::Optional<size_t>(delay_samples),
-                                echo_path_variability, false,
+        remover->ProcessCapture(delay_samples, echo_path_variability, false,
                                 render_buffer->GetRenderBuffer(), &y);
 
         if (k > kNumBlocksToProcess / 2) {
diff --git a/modules/audio_processing/aec3/main_filter_update_gain_unittest.cc b/modules/audio_processing/aec3/main_filter_update_gain_unittest.cc
index 9e794de..561fcdb 100644
--- a/modules/audio_processing/aec3/main_filter_update_gain_unittest.cc
+++ b/modules/audio_processing/aec3/main_filter_update_gain_unittest.cc
@@ -135,9 +135,8 @@
     // Update the delay.
     aec_state.HandleEchoPathChange(EchoPathVariability(false, false));
     aec_state.Update(main_filter.FilterFrequencyResponse(),
-                     main_filter.FilterImpulseResponse(), true,
-                     rtc::Optional<size_t>(), render_buffer, E2_main, Y2, x[0],
-                     s, false);
+                     main_filter.FilterImpulseResponse(), true, rtc::nullopt,
+                     render_buffer, E2_main, Y2, x[0], s, false);
   }
 
   std::copy(e_main.begin(), e_main.end(), e_last_block->begin());
diff --git a/modules/audio_processing/aec3/matched_filter_lag_aggregator.cc b/modules/audio_processing/aec3/matched_filter_lag_aggregator.cc
index 5115fcb..92cb4f7 100644
--- a/modules/audio_processing/aec3/matched_filter_lag_aggregator.cc
+++ b/modules/audio_processing/aec3/matched_filter_lag_aggregator.cc
@@ -67,10 +67,10 @@
                       std::max_element(histogram_.begin(), histogram_.end()));
 
     if (histogram_[candidate] > 25) {
-      return rtc::Optional<size_t>(candidate);
+      return candidate;
     }
   }
-  return rtc::Optional<size_t>();
+  return rtc::nullopt;
 }
 
 }  // namespace webrtc
diff --git a/modules/audio_processing/aec3/matched_filter_unittest.cc b/modules/audio_processing/aec3/matched_filter_unittest.cc
index e03ea8f..0600419 100644
--- a/modules/audio_processing/aec3/matched_filter_unittest.cc
+++ b/modules/audio_processing/aec3/matched_filter_unittest.cc
@@ -183,8 +183,7 @@
         if ((alignment_shift_sub_blocks + 3 * kWindowSizeSubBlocks / 4) *
                 sub_block_size >
             delay_samples) {
-          expected_most_accurate_lag_estimate =
-              rtc::Optional<size_t>(k > 0 ? k - 1 : 0);
+          expected_most_accurate_lag_estimate = k > 0 ? k - 1 : 0;
           break;
         }
         alignment_shift_sub_blocks += kAlignmentShiftSubBlocks;
diff --git a/modules/audio_processing/aec3/render_delay_controller.cc b/modules/audio_processing/aec3/render_delay_controller.cc
index 7de97cd..2c1f263 100644
--- a/modules/audio_processing/aec3/render_delay_controller.cc
+++ b/modules/audio_processing/aec3/render_delay_controller.cc
@@ -96,7 +96,7 @@
   blocks_since_last_delay_estimate_ = 300000;
   echo_path_delay_samples_ = delay_ * kBlockSize;
   align_call_counter_ = 0;
-  headroom_samples_ = rtc::Optional<size_t>();
+  headroom_samples_ = rtc::nullopt;
   std::fill(capture_delay_buffer_.begin(), capture_delay_buffer_.end(), 0.f);
   delay_estimator_.Reset();
 }
@@ -150,15 +150,15 @@
       if (echo_path_delay_samples_corrected >= 0) {
         const int headroom = echo_path_delay_samples_ - delay_ * kBlockSize;
         RTC_DCHECK_LE(0, headroom);
-        headroom_samples_ = rtc::Optional<size_t>(headroom);
+        headroom_samples_ = headroom;
       } else {
-        headroom_samples_ = rtc::Optional<size_t>();
+        headroom_samples_ = rtc::nullopt;
       }
     }
 
-    metrics_.Update(rtc::Optional<size_t>(echo_path_delay_samples_), delay_);
+    metrics_.Update(echo_path_delay_samples_, delay_);
   } else {
-    metrics_.Update(rtc::Optional<size_t>(), delay_);
+    metrics_.Update(rtc::nullopt, delay_);
   }
 
   data_dumper_->DumpRaw("aec3_render_delay_controller_delay", 1,
diff --git a/modules/audio_processing/aec3/render_delay_controller_metrics_unittest.cc b/modules/audio_processing/aec3/render_delay_controller_metrics_unittest.cc
index 974d75d..433c249 100644
--- a/modules/audio_processing/aec3/render_delay_controller_metrics_unittest.cc
+++ b/modules/audio_processing/aec3/render_delay_controller_metrics_unittest.cc
@@ -22,10 +22,10 @@
 
   for (int j = 0; j < 3; ++j) {
     for (int k = 0; k < kMetricsReportingIntervalBlocks - 1; ++k) {
-      metrics.Update(rtc::Optional<size_t>(), 0);
+      metrics.Update(rtc::nullopt, 0);
       EXPECT_FALSE(metrics.MetricsReported());
     }
-    metrics.Update(rtc::Optional<size_t>(), 0);
+    metrics.Update(rtc::nullopt, 0);
     EXPECT_TRUE(metrics.MetricsReported());
   }
 }
diff --git a/modules/audio_processing/aec3/render_signal_analyzer.cc b/modules/audio_processing/aec3/render_signal_analyzer.cc
index 5e29542..22aa352 100644
--- a/modules/audio_processing/aec3/render_signal_analyzer.cc
+++ b/modules/audio_processing/aec3/render_signal_analyzer.cc
@@ -77,11 +77,11 @@
   // Detect whether the spectal peak has as strong narrowband nature.
   if (peak_bin > 6 && max_abs > 100 &&
       X2_latest[peak_bin] > 100 * non_peak_power) {
-    *narrow_peak_band = rtc::Optional<int>(peak_bin);
+    *narrow_peak_band = peak_bin;
     *narrow_peak_counter = 0;
   } else {
     if (*narrow_peak_band && ++(*narrow_peak_counter) > 7) {
-      *narrow_peak_band = rtc::Optional<int>();
+      *narrow_peak_band = rtc::nullopt;
     }
   }
 }
diff --git a/modules/audio_processing/aec3/render_signal_analyzer_unittest.cc b/modules/audio_processing/aec3/render_signal_analyzer_unittest.cc
index dca9a04..7e01f3f 100644
--- a/modules/audio_processing/aec3/render_signal_analyzer_unittest.cc
+++ b/modules/audio_processing/aec3/render_signal_analyzer_unittest.cc
@@ -69,7 +69,7 @@
     RandomizeSampleVector(&random_generator, x[0]);
     fft.PaddedFft(x[0], x_old, &X);
     render_buffer.Insert(x);
-    analyzer.Update(render_buffer, rtc::Optional<size_t>(0));
+    analyzer.Update(render_buffer, 0);
   }
 
   mask.fill(1.f);
@@ -99,7 +99,7 @@
                       &sample_counter, x[0]);
       render_buffer.Insert(x);
       analyzer.Update(render_buffer, known_delay ? rtc::Optional<size_t>(0)
-                                                 : rtc::Optional<size_t>());
+                                                 : rtc::nullopt);
     }
   };
 
diff --git a/modules/audio_processing/aec3/residual_echo_estimator_unittest.cc b/modules/audio_processing/aec3/residual_echo_estimator_unittest.cc
index 76a9739..b85bc1d 100644
--- a/modules/audio_processing/aec3/residual_echo_estimator_unittest.cc
+++ b/modules/audio_processing/aec3/residual_echo_estimator_unittest.cc
@@ -83,8 +83,8 @@
     render_buffer.Insert(x);
 
     aec_state.HandleEchoPathChange(echo_path_variability);
-    aec_state.Update(H2, h, true, rtc::Optional<size_t>(2), render_buffer,
-                     E2_main, Y2, x[0], s, false);
+    aec_state.Update(H2, h, true, 2, render_buffer, E2_main, Y2, x[0], s,
+                     false);
 
     estimator.Estimate(aec_state, render_buffer, S2_linear, Y2, &R2);
   }
diff --git a/modules/audio_processing/aec3/shadow_filter_update_gain_unittest.cc b/modules/audio_processing/aec3/shadow_filter_update_gain_unittest.cc
index da514d9..0d79a0d 100644
--- a/modules/audio_processing/aec3/shadow_filter_update_gain_unittest.cc
+++ b/modules/audio_processing/aec3/shadow_filter_update_gain_unittest.cc
@@ -68,8 +68,7 @@
     RandomizeSampleVector(&random_generator, x[0]);
     delay_buffer.Delay(x[0], y);
     render_buffer.Insert(x);
-    render_signal_analyzer.Update(
-        render_buffer, rtc::Optional<size_t>(delay_samples / kBlockSize));
+    render_signal_analyzer.Update(render_buffer, delay_samples / kBlockSize);
 
     shadow_filter.Filter(render_buffer, &S);
     fft.Ifft(S, &s);
diff --git a/modules/audio_processing/aec3/subtractor_unittest.cc b/modules/audio_processing/aec3/subtractor_unittest.cc
index 0c296a7..b10421b 100644
--- a/modules/audio_processing/aec3/subtractor_unittest.cc
+++ b/modules/audio_processing/aec3/subtractor_unittest.cc
@@ -69,8 +69,7 @@
     aec_state.HandleEchoPathChange(EchoPathVariability(false, false));
     aec_state.Update(subtractor.FilterFrequencyResponse(),
                      subtractor.FilterImpulseResponse(),
-                     subtractor.ConvergedFilter(),
-                     rtc::Optional<size_t>(delay_samples / kBlockSize),
+                     subtractor.ConvergedFilter(), delay_samples / kBlockSize,
                      render_buffer, E2_main, Y2, x[0], output.s_main, false);
   }
 
diff --git a/modules/audio_processing/aec3/suppression_gain_unittest.cc b/modules/audio_processing/aec3/suppression_gain_unittest.cc
index 5774079..9fee6a2 100644
--- a/modules/audio_processing/aec3/suppression_gain_unittest.cc
+++ b/modules/audio_processing/aec3/suppression_gain_unittest.cc
@@ -70,10 +70,9 @@
   R2.fill(10000000000000.f);
   N2.fill(0.f);
   s.fill(10.f);
-  aec_state.Update(subtractor.FilterFrequencyResponse(),
-                   subtractor.FilterImpulseResponse(),
-                   subtractor.ConvergedFilter(), rtc::Optional<size_t>(10),
-                   render_buffer, E2, Y2, x[0], s, false);
+  aec_state.Update(
+      subtractor.FilterFrequencyResponse(), subtractor.FilterImpulseResponse(),
+      subtractor.ConvergedFilter(), 10, render_buffer, E2, Y2, x[0], s, false);
   suppression_gain.GetGain(E2, R2, N2, analyzer, aec_state, x, &high_bands_gain,
                            &g);
   std::for_each(g.begin(), g.end(), [](float a) { EXPECT_FLOAT_EQ(0.f, a); });
@@ -88,15 +87,15 @@
   for (int k = 0; k <= kNumBlocksPerSecond / 5 + 1; ++k) {
     aec_state.Update(subtractor.FilterFrequencyResponse(),
                      subtractor.FilterImpulseResponse(),
-                     subtractor.ConvergedFilter(), rtc::Optional<size_t>(10),
-                     render_buffer, E2, Y2, x[0], s, false);
+                     subtractor.ConvergedFilter(), 10, render_buffer, E2, Y2,
+                     x[0], s, false);
   }
 
   for (int k = 0; k < 100; ++k) {
     aec_state.Update(subtractor.FilterFrequencyResponse(),
                      subtractor.FilterImpulseResponse(),
-                     subtractor.ConvergedFilter(), rtc::Optional<size_t>(10),
-                     render_buffer, E2, Y2, x[0], s, false);
+                     subtractor.ConvergedFilter(), 10, render_buffer, E2, Y2,
+                     x[0], s, false);
     suppression_gain.GetGain(E2, R2, N2, analyzer, aec_state, x,
                              &high_bands_gain, &g);
   }
@@ -111,8 +110,8 @@
   for (int k = 0; k < 100; ++k) {
     aec_state.Update(subtractor.FilterFrequencyResponse(),
                      subtractor.FilterImpulseResponse(),
-                     subtractor.ConvergedFilter(), rtc::Optional<size_t>(10),
-                     render_buffer, E2, Y2, x[0], s, false);
+                     subtractor.ConvergedFilter(), 10, render_buffer, E2, Y2,
+                     x[0], s, false);
     suppression_gain.GetGain(E2, R2, N2, analyzer, aec_state, x,
                              &high_bands_gain, &g);
   }
diff --git a/modules/audio_processing/beamformer/array_util.cc b/modules/audio_processing/beamformer/array_util.cc
index f5862bb..e853559 100644
--- a/modules/audio_processing/beamformer/array_util.cc
+++ b/modules/audio_processing/beamformer/array_util.cc
@@ -65,10 +65,10 @@
     const Point pair_direction =
         PairDirection(array_geometry[i - 1], array_geometry[i]);
     if (!AreParallel(first_pair_direction, pair_direction)) {
-      return rtc::Optional<Point>();
+      return rtc::nullopt;
     }
   }
-  return rtc::Optional<Point>(first_pair_direction);
+  return first_pair_direction;
 }
 
 rtc::Optional<Point> GetNormalIfPlanar(
@@ -86,30 +86,30 @@
     }
   }
   if (is_linear) {
-    return rtc::Optional<Point>();
+    return rtc::nullopt;
   }
   const Point normal_direction =
       CrossProduct(first_pair_direction, pair_direction);
   for (; i < array_geometry.size(); ++i) {
     pair_direction = PairDirection(array_geometry[i - 1], array_geometry[i]);
     if (!ArePerpendicular(normal_direction, pair_direction)) {
-      return rtc::Optional<Point>();
+      return rtc::nullopt;
     }
   }
-  return rtc::Optional<Point>(normal_direction);
+  return normal_direction;
 }
 
 rtc::Optional<Point> GetArrayNormalIfExists(
     const std::vector<Point>& array_geometry) {
   const rtc::Optional<Point> direction = GetDirectionIfLinear(array_geometry);
   if (direction) {
-    return rtc::Optional<Point>(Point(direction->y(), -direction->x(), 0.f));
+    return Point(direction->y(), -direction->x(), 0.f);
   }
   const rtc::Optional<Point> normal = GetNormalIfPlanar(array_geometry);
   if (normal && normal->z() < kMaxDotProduct) {
     return normal;
   }
-  return rtc::Optional<Point>();
+  return rtc::nullopt;
 }
 
 Point AzimuthToPoint(float azimuth) {
diff --git a/modules/audio_processing/echo_detector/circular_buffer.cc b/modules/audio_processing/echo_detector/circular_buffer.cc
index dc4fd93..0c6cc8a 100644
--- a/modules/audio_processing/echo_detector/circular_buffer.cc
+++ b/modules/audio_processing/echo_detector/circular_buffer.cc
@@ -30,14 +30,14 @@
 
 rtc::Optional<float> CircularBuffer::Pop() {
   if (nr_elements_in_buffer_ == 0) {
-    return rtc::Optional<float>();
+    return rtc::nullopt;
   }
   const size_t index =
       (buffer_.size() + next_insertion_index_ - nr_elements_in_buffer_) %
       buffer_.size();
   RTC_DCHECK_LT(index, buffer_.size());
   --nr_elements_in_buffer_;
-  return rtc::Optional<float>(buffer_[index]);
+  return buffer_[index];
 }
 
 void CircularBuffer::Clear() {
diff --git a/modules/audio_processing/echo_detector/circular_buffer_unittest.cc b/modules/audio_processing/echo_detector/circular_buffer_unittest.cc
index 41f276b..657bd05 100644
--- a/modules/audio_processing/echo_detector/circular_buffer_unittest.cc
+++ b/modules/audio_processing/echo_detector/circular_buffer_unittest.cc
@@ -17,8 +17,8 @@
   CircularBuffer test_buffer(3);
   test_buffer.Push(1.f);
   test_buffer.Push(2.f);
-  EXPECT_EQ(rtc::Optional<float>(1.f), test_buffer.Pop());
-  EXPECT_EQ(rtc::Optional<float>(2.f), test_buffer.Pop());
+  EXPECT_EQ(1.f, test_buffer.Pop());
+  EXPECT_EQ(2.f, test_buffer.Pop());
 }
 
 TEST(CircularBufferTests, FillTest) {
@@ -26,9 +26,9 @@
   test_buffer.Push(1.f);
   test_buffer.Push(2.f);
   test_buffer.Push(3.f);
-  EXPECT_EQ(rtc::Optional<float>(1.f), test_buffer.Pop());
-  EXPECT_EQ(rtc::Optional<float>(2.f), test_buffer.Pop());
-  EXPECT_EQ(rtc::Optional<float>(3.f), test_buffer.Pop());
+  EXPECT_EQ(1.f, test_buffer.Pop());
+  EXPECT_EQ(2.f, test_buffer.Pop());
+  EXPECT_EQ(3.f, test_buffer.Pop());
 }
 
 TEST(CircularBufferTests, OverflowTest) {
@@ -39,14 +39,14 @@
   test_buffer.Push(4.f);
   // Because the circular buffer has a size of 3, the first insert should have
   // been forgotten.
-  EXPECT_EQ(rtc::Optional<float>(2.f), test_buffer.Pop());
-  EXPECT_EQ(rtc::Optional<float>(3.f), test_buffer.Pop());
-  EXPECT_EQ(rtc::Optional<float>(4.f), test_buffer.Pop());
+  EXPECT_EQ(2.f, test_buffer.Pop());
+  EXPECT_EQ(3.f, test_buffer.Pop());
+  EXPECT_EQ(4.f, test_buffer.Pop());
 }
 
 TEST(CircularBufferTests, ReadFromEmpty) {
   CircularBuffer test_buffer(3);
-  EXPECT_EQ(rtc::Optional<float>(), test_buffer.Pop());
+  EXPECT_EQ(rtc::nullopt, test_buffer.Pop());
 }
 
 }  // namespace webrtc
diff --git a/modules/audio_processing/gain_control_impl.cc b/modules/audio_processing/gain_control_impl.cc
index eeab1e0..e550ebb 100644
--- a/modules/audio_processing/gain_control_impl.cc
+++ b/modules/audio_processing/gain_control_impl.cc
@@ -68,7 +68,7 @@
   }
 
   void set_capture_level(int capture_level) {
-    capture_level_ = rtc::Optional<int>(capture_level);
+    capture_level_ = capture_level;
   }
 
   int get_capture_level() {
@@ -394,8 +394,8 @@
   rtc::CritScope cs_capture(crit_capture_);
   data_dumper_->InitiateNewSetOfRecordings();
 
-  num_proc_channels_ = rtc::Optional<size_t>(num_proc_channels);
-  sample_rate_hz_ = rtc::Optional<int>(sample_rate_hz);
+  num_proc_channels_ = num_proc_channels;
+  sample_rate_hz_ = sample_rate_hz;
 
   if (!enabled_) {
     return;
diff --git a/modules/audio_processing/level_controller/level_controller.cc b/modules/audio_processing/level_controller/level_controller.cc
index 6343ef7..521f82e 100644
--- a/modules/audio_processing/level_controller/level_controller.cc
+++ b/modules/audio_processing/level_controller/level_controller.cc
@@ -202,7 +202,7 @@
   metrics_.Initialize(sample_rate_hz);
 
   last_gain_ = 1.0f;
-  sample_rate_hz_ = rtc::Optional<int>(sample_rate_hz);
+  sample_rate_hz_ = sample_rate_hz;
   dc_forgetting_factor_ = 0.01f * sample_rate_hz / 48000.f;
   std::fill(dc_level_, dc_level_ + arraysize(dc_level_), 0.f);
 }
diff --git a/modules/audio_processing/level_controller/level_controller_unittest.cc b/modules/audio_processing/level_controller/level_controller_unittest.cc
index 837cfc3..cb36ae0 100644
--- a/modules/audio_processing/level_controller/level_controller_unittest.cc
+++ b/modules/audio_processing/level_controller/level_controller_unittest.cc
@@ -90,20 +90,20 @@
 
 TEST(LevelControlBitExactnessTest, Mono8kHz) {
   const float kOutputReference[] = {-0.013939f, -0.012154f, -0.009054f};
-  RunBitexactnessTest(AudioProcessing::kSampleRate8kHz, 1,
-                      rtc::Optional<float>(), kOutputReference);
+  RunBitexactnessTest(AudioProcessing::kSampleRate8kHz, 1, rtc::nullopt,
+                      kOutputReference);
 }
 
 TEST(LevelControlBitExactnessTest, Mono16kHz) {
   const float kOutputReference[] = {-0.013706f, -0.013215f, -0.013018f};
-  RunBitexactnessTest(AudioProcessing::kSampleRate16kHz, 1,
-                      rtc::Optional<float>(), kOutputReference);
+  RunBitexactnessTest(AudioProcessing::kSampleRate16kHz, 1, rtc::nullopt,
+                      kOutputReference);
 }
 
 TEST(LevelControlBitExactnessTest, Mono32kHz) {
   const float kOutputReference[] = {-0.014495f, -0.016425f, -0.016085f};
-  RunBitexactnessTest(AudioProcessing::kSampleRate32kHz, 1,
-                      rtc::Optional<float>(), kOutputReference);
+  RunBitexactnessTest(AudioProcessing::kSampleRate32kHz, 1, rtc::nullopt,
+                      kOutputReference);
 }
 
 // TODO(peah): Investigate why this particular testcase differ between Android
@@ -115,42 +115,42 @@
 #else
   const float kOutputReference[] = {-0.014306f, -0.015209f, -0.017466f};
 #endif
-  RunBitexactnessTest(AudioProcessing::kSampleRate48kHz, 1,
-                      rtc::Optional<float>(), kOutputReference);
+  RunBitexactnessTest(AudioProcessing::kSampleRate48kHz, 1, rtc::nullopt,
+                      kOutputReference);
 }
 
 TEST(LevelControlBitExactnessTest, Stereo8kHz) {
   const float kOutputReference[] = {-0.014063f, -0.008450f, -0.012159f,
                                     -0.051967f, -0.023202f, -0.047858f};
-  RunBitexactnessTest(AudioProcessing::kSampleRate8kHz, 2,
-                      rtc::Optional<float>(), kOutputReference);
+  RunBitexactnessTest(AudioProcessing::kSampleRate8kHz, 2, rtc::nullopt,
+                      kOutputReference);
 }
 
 TEST(LevelControlBitExactnessTest, Stereo16kHz) {
   const float kOutputReference[] = {-0.012714f, -0.005896f, -0.012220f,
                                     -0.053306f, -0.024549f, -0.051527f};
-  RunBitexactnessTest(AudioProcessing::kSampleRate16kHz, 2,
-                      rtc::Optional<float>(), kOutputReference);
+  RunBitexactnessTest(AudioProcessing::kSampleRate16kHz, 2, rtc::nullopt,
+                      kOutputReference);
 }
 
 TEST(LevelControlBitExactnessTest, Stereo32kHz) {
   const float kOutputReference[] = {-0.011764f, -0.007044f, -0.013472f,
                                     -0.053537f, -0.026322f, -0.056253f};
-  RunBitexactnessTest(AudioProcessing::kSampleRate32kHz, 2,
-                      rtc::Optional<float>(), kOutputReference);
+  RunBitexactnessTest(AudioProcessing::kSampleRate32kHz, 2, rtc::nullopt,
+                      kOutputReference);
 }
 
 TEST(LevelControlBitExactnessTest, Stereo48kHz) {
   const float kOutputReference[] = {-0.010643f, -0.006334f, -0.011377f,
                                     -0.049088f, -0.023600f, -0.050465f};
-  RunBitexactnessTest(AudioProcessing::kSampleRate48kHz, 2,
-                      rtc::Optional<float>(), kOutputReference);
+  RunBitexactnessTest(AudioProcessing::kSampleRate48kHz, 2, rtc::nullopt,
+                      kOutputReference);
 }
 
 TEST(LevelControlBitExactnessTest, MonoInitial48kHz) {
   const float kOutputReference[] = {-0.013884f, -0.014761f, -0.016951f};
-  RunBitexactnessTest(AudioProcessing::kSampleRate48kHz, 1,
-                      rtc::Optional<float>(-50), kOutputReference);
+  RunBitexactnessTest(AudioProcessing::kSampleRate48kHz, 1, -50,
+                      kOutputReference);
 }
 
 }  // namespace webrtc
diff --git a/modules/audio_processing/rms_level.cc b/modules/audio_processing/rms_level.cc
index 1470267..55db226 100644
--- a/modules/audio_processing/rms_level.cc
+++ b/modules/audio_processing/rms_level.cc
@@ -54,7 +54,7 @@
   sum_square_ = 0.f;
   sample_count_ = 0;
   max_sum_square_ = 0.f;
-  block_size_ = rtc::Optional<size_t>();
+  block_size_ = rtc::nullopt;
 }
 
 void RmsLevel::Analyze(rtc::ArrayView<const int16_t> data) {
@@ -99,9 +99,9 @@
 }
 
 void RmsLevel::CheckBlockSize(size_t block_size) {
-  if (block_size_ != rtc::Optional<size_t>(block_size)) {
+  if (block_size_ != block_size) {
     Reset();
-    block_size_ = rtc::Optional<size_t>(block_size);
+    block_size_ = block_size;
   }
 }
 }  // namespace webrtc
diff --git a/modules/audio_processing/test/audioproc_float.cc b/modules/audio_processing/test/audioproc_float.cc
index 45ca8f01..c5229a4 100644
--- a/modules/audio_processing/test/audioproc_float.cc
+++ b/modules/audio_processing/test/audioproc_float.cc
@@ -186,39 +186,39 @@
 void SetSettingIfSpecified(const std::string& value,
                            rtc::Optional<std::string>* parameter) {
   if (value.compare("") != 0) {
-    *parameter = rtc::Optional<std::string>(value);
+    *parameter = value;
   }
 }
 
 void SetSettingIfSpecified(int value, rtc::Optional<int>* parameter) {
   if (value != kParameterNotSpecifiedValue) {
-    *parameter = rtc::Optional<int>(value);
+    *parameter = value;
   }
 }
 
 void SetSettingIfFlagSet(int32_t flag, rtc::Optional<bool>* parameter) {
   if (flag == 0) {
-    *parameter = rtc::Optional<bool>(false);
+    *parameter = false;
   } else if (flag == 1) {
-    *parameter = rtc::Optional<bool>(true);
+    *parameter = true;
   }
 }
 
 SimulationSettings CreateSettings() {
   SimulationSettings settings;
   if (FLAG_all_default) {
-    settings.use_le = rtc::Optional<bool>(true);
-    settings.use_vad = rtc::Optional<bool>(true);
-    settings.use_ie = rtc::Optional<bool>(false);
-    settings.use_bf = rtc::Optional<bool>(false);
-    settings.use_ts = rtc::Optional<bool>(true);
-    settings.use_ns = rtc::Optional<bool>(true);
-    settings.use_hpf = rtc::Optional<bool>(true);
-    settings.use_agc = rtc::Optional<bool>(true);
-    settings.use_agc2 = rtc::Optional<bool>(false);
-    settings.use_aec = rtc::Optional<bool>(true);
-    settings.use_aecm = rtc::Optional<bool>(false);
-    settings.use_ed = rtc::Optional<bool>(false);
+    settings.use_le = true;
+    settings.use_vad = true;
+    settings.use_ie = false;
+    settings.use_bf = false;
+    settings.use_ts = true;
+    settings.use_ns = true;
+    settings.use_hpf = true;
+    settings.use_agc = true;
+    settings.use_agc2 = false;
+    settings.use_aec = true;
+    settings.use_aecm = false;
+    settings.use_ed = false;
   }
   SetSettingIfSpecified(FLAG_dump_input, &settings.aec_dump_input_filename);
   SetSettingIfSpecified(FLAG_dump_output, &settings.aec_dump_output_filename);
diff --git a/modules/audio_processing/test/debug_dump_replayer.cc b/modules/audio_processing/test/debug_dump_replayer.cc
index a3c4d63..a027d07 100644
--- a/modules/audio_processing/test/debug_dump_replayer.cc
+++ b/modules/audio_processing/test/debug_dump_replayer.cc
@@ -51,9 +51,9 @@
 // Get next event that has not run.
 rtc::Optional<audioproc::Event> DebugDumpReplayer::GetNextEvent() const {
   if (!has_next_event_)
-    return rtc::Optional<audioproc::Event>();
+    return rtc::nullopt;
   else
-    return rtc::Optional<audioproc::Event>(next_event_);
+    return next_event_;
 }
 
 // Run the next event. Returns the event type.
diff --git a/modules/audio_processing/test/fake_recording_device.cc b/modules/audio_processing/test/fake_recording_device.cc
index ccf5080..aee3dce 100644
--- a/modules/audio_processing/test/fake_recording_device.cc
+++ b/modules/audio_processing/test/fake_recording_device.cc
@@ -34,9 +34,7 @@
       : mic_level_(initial_mic_level) {}
   int mic_level() const { return mic_level_; }
   void set_mic_level(const int level) { mic_level_ = level; }
-  void set_undo_mic_level(const int level) {
-    undo_mic_level_ = rtc::Optional<int>(level);
-  }
+  void set_undo_mic_level(const int level) { undo_mic_level_ = level; }
   virtual ~FakeRecordingDeviceWorker() = default;
   virtual void ModifyBufferInt16(AudioFrame* buffer) = 0;
   virtual void ModifyBufferFloat(ChannelBuffer<float>* buffer) = 0;
diff --git a/modules/audio_processing/test/performance_timer.cc b/modules/audio_processing/test/performance_timer.cc
index c59aeed..1a82258 100644
--- a/modules/audio_processing/test/performance_timer.cc
+++ b/modules/audio_processing/test/performance_timer.cc
@@ -27,7 +27,7 @@
 PerformanceTimer::~PerformanceTimer() = default;
 
 void PerformanceTimer::StartTimer() {
-  start_timestamp_us_ = rtc::Optional<int64_t>(clock_->TimeInMicroseconds());
+  start_timestamp_us_ = clock_->TimeInMicroseconds();
 }
 
 void PerformanceTimer::StopTimer() {