Optional: Use nullopt and implicit construction in /media

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.

TBR=pthatcher@webrtc.org

Bug: None
Change-Id: I6dd8677a65f897877fc848aefa7ab37d844e70ed
Reviewed-on: https://webrtc-review.googlesource.com/23573
Commit-Queue: Oskar Sundbom <ossu@webrtc.org>
Reviewed-by: Steve Anton <steveanton@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20816}
diff --git a/media/base/adaptedvideotracksource.cc b/media/base/adaptedvideotracksource.cc
index 16f11b9..5a7168b 100644
--- a/media/base/adaptedvideotracksource.cc
+++ b/media/base/adaptedvideotracksource.cc
@@ -95,7 +95,7 @@
                                          int* crop_y) {
   {
     rtc::CritScope lock(&stats_crit_);
-    stats_ = rtc::Optional<Stats>({width, height});
+    stats_ = Stats{width, height};
   }
 
   if (!broadcaster_.frame_wanted()) {
diff --git a/media/base/codec.cc b/media/base/codec.cc
index 5c486ee..59c61fe 100644
--- a/media/base/codec.cc
+++ b/media/base/codec.cc
@@ -152,7 +152,7 @@
   webrtc::RtpCodecParameters codec_params;
   codec_params.payload_type = id;
   codec_params.name = name;
-  codec_params.clock_rate = rtc::Optional<int>(clockrate);
+  codec_params.clock_rate = clockrate;
   return codec_params;
 }
 
@@ -201,7 +201,7 @@
 
 webrtc::RtpCodecParameters AudioCodec::ToCodecParameters() const {
   webrtc::RtpCodecParameters codec_params = Codec::ToCodecParameters();
-  codec_params.num_channels = rtc::Optional<int>(static_cast<int>(channels));
+  codec_params.num_channels = static_cast<int>(channels);
   codec_params.kind = MEDIA_TYPE_AUDIO;
   return codec_params;
 }
diff --git a/media/base/codec_unittest.cc b/media/base/codec_unittest.cc
index 394385e..00d23ee 100644
--- a/media/base/codec_unittest.cc
+++ b/media/base/codec_unittest.cc
@@ -313,15 +313,14 @@
   EXPECT_EQ(96, codec_params_1.payload_type);
   EXPECT_EQ(cricket::MEDIA_TYPE_VIDEO, codec_params_1.kind);
   EXPECT_EQ("V", codec_params_1.name);
-  EXPECT_EQ(rtc::Optional<int>(cricket::kVideoCodecClockrate),
-            codec_params_1.clock_rate);
-  EXPECT_EQ(rtc::Optional<int>(), codec_params_1.num_channels);
+  EXPECT_EQ(cricket::kVideoCodecClockrate, codec_params_1.clock_rate);
+  EXPECT_EQ(rtc::nullopt, codec_params_1.num_channels);
 
   const AudioCodec a(97, "A", 44100, 20000, 2);
   webrtc::RtpCodecParameters codec_params_2 = a.ToCodecParameters();
   EXPECT_EQ(97, codec_params_2.payload_type);
   EXPECT_EQ(cricket::MEDIA_TYPE_AUDIO, codec_params_2.kind);
   EXPECT_EQ("A", codec_params_2.name);
-  EXPECT_EQ(rtc::Optional<int>(44100), codec_params_2.clock_rate);
-  EXPECT_EQ(rtc::Optional<int>(2), codec_params_2.num_channels);
+  EXPECT_EQ(44100, codec_params_2.clock_rate);
+  EXPECT_EQ(2, codec_params_2.num_channels);
 }
diff --git a/media/base/h264_profile_level_id.cc b/media/base/h264_profile_level_id.cc
index 824c03b..c81921d 100644
--- a/media/base/h264_profile_level_id.cc
+++ b/media/base/h264_profile_level_id.cc
@@ -121,10 +121,10 @@
 rtc::Optional<ProfileLevelId> ParseProfileLevelId(const char* str) {
   // The string should consist of 3 bytes in hexadecimal format.
   if (strlen(str) != 6u)
-    return rtc::Optional<ProfileLevelId>();
+    return rtc::nullopt;
   const uint32_t profile_level_id_numeric = strtol(str, nullptr, 16);
   if (profile_level_id_numeric == 0)
-    return rtc::Optional<ProfileLevelId>();
+    return rtc::nullopt;
 
   // Separate into three bytes.
   const uint8_t level_idc =
@@ -159,19 +159,19 @@
       break;
     default:
       // Unrecognized level_idc.
-      return rtc::Optional<ProfileLevelId>();
+      return rtc::nullopt;
   }
 
   // Parse profile_idc/profile_iop into a Profile enum.
   for (const ProfilePattern& pattern : kProfilePatterns) {
     if (profile_idc == pattern.profile_idc &&
         pattern.profile_iop.IsMatch(profile_iop)) {
-      return rtc::Optional<ProfileLevelId>({pattern.profile, level});
+      return ProfileLevelId(pattern.profile, level);
     }
   }
 
   // Unrecognized profile_idc/profile_iop combination.
-  return rtc::Optional<ProfileLevelId>();
+  return rtc::nullopt;
 }
 
 rtc::Optional<Level> SupportedLevel(int max_frame_pixel_count, float max_fps) {
@@ -183,12 +183,12 @@
             max_frame_pixel_count &&
         level_constraint.max_macroblocks_per_second <=
             max_fps * level_constraint.max_macroblock_frame_size) {
-      return rtc::Optional<Level>(level_constraint.level);
+      return level_constraint.level;
     }
   }
 
   // No level supported.
-  return rtc::Optional<Level>();
+  return rtc::nullopt;
 }
 
 rtc::Optional<ProfileLevelId> ParseSdpProfileLevelId(
@@ -205,7 +205,7 @@
 
   const auto profile_level_id_it = params.find(kProfileLevelId);
   return (profile_level_id_it == params.end())
-             ? rtc::Optional<ProfileLevelId>(kDefaultProfileLevelId)
+             ? kDefaultProfileLevelId
              : ParseProfileLevelId(profile_level_id_it->second.c_str());
 }
 
@@ -215,14 +215,14 @@
   if (profile_level_id.level == kLevel1_b) {
     switch (profile_level_id.profile) {
       case kProfileConstrainedBaseline:
-        return rtc::Optional<std::string>("42f00b");
+        return {"42f00b"};
       case kProfileBaseline:
-        return rtc::Optional<std::string>("42100b");
+        return {"42100b"};
       case kProfileMain:
-        return rtc::Optional<std::string>("4d100b");
+        return {"4d100b"};
       // Level 1b is not allowed for other profiles.
       default:
-        return rtc::Optional<std::string>();
+        return rtc::nullopt;
     }
   }
 
@@ -245,12 +245,12 @@
       break;
     // Unrecognized profile.
     default:
-      return rtc::Optional<std::string>();
+      return rtc::nullopt;
   }
 
   char str[7];
   snprintf(str, 7u, "%s%02x", profile_idc_iop_string, profile_level_id.level);
-  return rtc::Optional<std::string>(str);
+  return {str};
 }
 
 // Set level according to https://tools.ietf.org/html/rfc6184#section-8.2.2.
diff --git a/media/base/videoadapter.cc b/media/base/videoadapter.cc
index c678444..553c2c3 100644
--- a/media/base/videoadapter.cc
+++ b/media/base/videoadapter.cc
@@ -151,8 +151,7 @@
   // First timestamp received or timestamp is way outside expected range, so
   // reset. Set first timestamp target to just half the interval to prefer
   // keeping frames in case of jitter.
-  next_frame_timestamp_ns_ =
-      rtc::Optional<int64_t>(in_timestamp_ns + frame_interval_ns / 2);
+  next_frame_timestamp_ns_ = in_timestamp_ns + frame_interval_ns / 2;
   return true;
 }
 
@@ -258,8 +257,8 @@
 
 void VideoAdapter::OnOutputFormatRequest(const VideoFormat& format) {
   rtc::CritScope cs(&critical_section_);
-  requested_format_ = rtc::Optional<VideoFormat>(format);
-  next_frame_timestamp_ns_ = rtc::Optional<int64_t>();
+  requested_format_ = format;
+  next_frame_timestamp_ns_ = rtc::nullopt;
 }
 
 void VideoAdapter::OnResolutionFramerateRequest(
diff --git a/media/base/videoadapter_unittest.cc b/media/base/videoadapter_unittest.cc
index 522cd5d..039d1da 100644
--- a/media/base/videoadapter_unittest.cc
+++ b/media/base/videoadapter_unittest.cc
@@ -391,7 +391,7 @@
 // Do not adapt the frame rate or the resolution. Expect no frame drop, no
 // cropping, and no resolution change.
 TEST_F(VideoAdapterTest, OnFramerateRequestMax) {
-  adapter_.OnResolutionFramerateRequest(rtc::Optional<int>(),
+  adapter_.OnResolutionFramerateRequest(rtc::nullopt,
                                         std::numeric_limits<int>::max(),
                                         std::numeric_limits<int>::max());
 
@@ -409,7 +409,7 @@
 }
 
 TEST_F(VideoAdapterTest, OnFramerateRequestZero) {
-  adapter_.OnResolutionFramerateRequest(rtc::Optional<int>(),
+  adapter_.OnResolutionFramerateRequest(rtc::nullopt,
                                         std::numeric_limits<int>::max(), 0);
   EXPECT_EQ(CS_RUNNING, capturer_->Start(capture_format_));
   for (int i = 0; i < 10; ++i)
@@ -425,7 +425,7 @@
 // the number of dropped frames to be half of the number the captured frames.
 TEST_F(VideoAdapterTest, OnFramerateRequestHalf) {
   adapter_.OnResolutionFramerateRequest(
-      rtc::Optional<int>(), std::numeric_limits<int>::max(), kDefaultFps / 2);
+      rtc::nullopt, std::numeric_limits<int>::max(), kDefaultFps / 2);
   EXPECT_EQ(CS_RUNNING, capturer_->Start(capture_format_));
   for (int i = 0; i < 10; ++i)
     capturer_->CaptureFrame();
@@ -750,7 +750,7 @@
   EXPECT_EQ(720, out_height_);
 
   // Adapt down one step.
-  adapter_.OnResolutionFramerateRequest(rtc::Optional<int>(), 1280 * 720 - 1,
+  adapter_.OnResolutionFramerateRequest(rtc::nullopt, 1280 * 720 - 1,
                                         std::numeric_limits<int>::max());
   EXPECT_TRUE(adapter_.AdaptFrameResolution(1280, 720, 0,
                                             &cropped_width_, &cropped_height_,
@@ -761,7 +761,7 @@
   EXPECT_EQ(540, out_height_);
 
   // Adapt down one step more.
-  adapter_.OnResolutionFramerateRequest(rtc::Optional<int>(), 960 * 540 - 1,
+  adapter_.OnResolutionFramerateRequest(rtc::nullopt, 960 * 540 - 1,
                                         std::numeric_limits<int>::max());
   EXPECT_TRUE(adapter_.AdaptFrameResolution(1280, 720, 0,
                                             &cropped_width_, &cropped_height_,
@@ -772,7 +772,7 @@
   EXPECT_EQ(360, out_height_);
 
   // Adapt down one step more.
-  adapter_.OnResolutionFramerateRequest(rtc::Optional<int>(), 640 * 360 - 1,
+  adapter_.OnResolutionFramerateRequest(rtc::nullopt, 640 * 360 - 1,
                                         std::numeric_limits<int>::max());
   EXPECT_TRUE(adapter_.AdaptFrameResolution(1280, 720, 0,
                                             &cropped_width_, &cropped_height_,
@@ -783,7 +783,7 @@
   EXPECT_EQ(270, out_height_);
 
   // Adapt up one step.
-  adapter_.OnResolutionFramerateRequest(rtc::Optional<int>(640 * 360),
+  adapter_.OnResolutionFramerateRequest(640 * 360,
                                         960 * 540,
                                         std::numeric_limits<int>::max());
   EXPECT_TRUE(adapter_.AdaptFrameResolution(1280, 720, 0,
@@ -795,7 +795,7 @@
   EXPECT_EQ(360, out_height_);
 
   // Adapt up one step more.
-  adapter_.OnResolutionFramerateRequest(rtc::Optional<int>(960 * 540),
+  adapter_.OnResolutionFramerateRequest(960 * 540,
                                         1280 * 720,
                                         std::numeric_limits<int>::max());
   EXPECT_TRUE(adapter_.AdaptFrameResolution(1280, 720, 0,
@@ -807,7 +807,7 @@
   EXPECT_EQ(540, out_height_);
 
   // Adapt up one step more.
-  adapter_.OnResolutionFramerateRequest(rtc::Optional<int>(1280 * 720),
+  adapter_.OnResolutionFramerateRequest(1280 * 720,
                                         1920 * 1080,
                                         std::numeric_limits<int>::max());
   EXPECT_TRUE(adapter_.AdaptFrameResolution(1280, 720, 0,
@@ -828,7 +828,7 @@
   EXPECT_EQ(1280, out_width_);
   EXPECT_EQ(720, out_height_);
 
-  adapter_.OnResolutionFramerateRequest(rtc::Optional<int>(), 0,
+  adapter_.OnResolutionFramerateRequest(rtc::nullopt, 0,
                                         std::numeric_limits<int>::max());
   EXPECT_FALSE(adapter_.AdaptFrameResolution(1280, 720, 0,
                                              &cropped_width_, &cropped_height_,
@@ -837,7 +837,7 @@
 
 TEST_F(VideoAdapterTest, TestOnResolutionRequestInLargeSteps) {
   // Large step down.
-  adapter_.OnResolutionFramerateRequest(rtc::Optional<int>(), 640 * 360 - 1,
+  adapter_.OnResolutionFramerateRequest(rtc::nullopt, 640 * 360 - 1,
                                         std::numeric_limits<int>::max());
   EXPECT_TRUE(adapter_.AdaptFrameResolution(1280, 720, 0,
                                             &cropped_width_, &cropped_height_,
@@ -848,8 +848,7 @@
   EXPECT_EQ(270, out_height_);
 
   // Large step up.
-  adapter_.OnResolutionFramerateRequest(rtc::Optional<int>(1280 * 720),
-                                        1920 * 1080,
+  adapter_.OnResolutionFramerateRequest(1280 * 720, 1920 * 1080,
                                         std::numeric_limits<int>::max());
   EXPECT_TRUE(adapter_.AdaptFrameResolution(1280, 720, 0,
                                             &cropped_width_, &cropped_height_,
@@ -861,7 +860,7 @@
 }
 
 TEST_F(VideoAdapterTest, TestOnOutputFormatRequestCapsMaxResolution) {
-  adapter_.OnResolutionFramerateRequest(rtc::Optional<int>(), 640 * 360 - 1,
+  adapter_.OnResolutionFramerateRequest(rtc::nullopt, 640 * 360 - 1,
                                         std::numeric_limits<int>::max());
   EXPECT_TRUE(adapter_.AdaptFrameResolution(1280, 720, 0,
                                             &cropped_width_, &cropped_height_,
@@ -881,7 +880,7 @@
   EXPECT_EQ(480, out_width_);
   EXPECT_EQ(270, out_height_);
 
-  adapter_.OnResolutionFramerateRequest(rtc::Optional<int>(), 960 * 720,
+  adapter_.OnResolutionFramerateRequest(rtc::nullopt, 960 * 720,
                                         std::numeric_limits<int>::max());
   EXPECT_TRUE(adapter_.AdaptFrameResolution(1280, 720, 0,
                                             &cropped_width_, &cropped_height_,
@@ -901,7 +900,7 @@
   EXPECT_EQ(1280, out_width_);
   EXPECT_EQ(720, out_height_);
 
-  adapter_.OnResolutionFramerateRequest(rtc::Optional<int>(), 640 * 360 - 1,
+  adapter_.OnResolutionFramerateRequest(rtc::nullopt, 640 * 360 - 1,
                                         std::numeric_limits<int>::max());
   EXPECT_TRUE(adapter_.AdaptFrameResolution(1280, 720, 0,
                                             &cropped_width_, &cropped_height_,
@@ -911,7 +910,7 @@
   EXPECT_EQ(480, out_width_);
   EXPECT_EQ(270, out_height_);
 
-  adapter_.OnResolutionFramerateRequest(rtc::Optional<int>(),
+  adapter_.OnResolutionFramerateRequest(rtc::nullopt,
                                         std::numeric_limits<int>::max(),
                                         std::numeric_limits<int>::max());
   EXPECT_TRUE(adapter_.AdaptFrameResolution(1280, 720, 0,
@@ -937,7 +936,7 @@
   EXPECT_EQ(360, out_height_);
 
   // Adapt down one step.
-  adapter_.OnResolutionFramerateRequest(rtc::Optional<int>(), 640 * 360 - 1,
+  adapter_.OnResolutionFramerateRequest(rtc::nullopt, 640 * 360 - 1,
                                         std::numeric_limits<int>::max());
   // Expect cropping to 16:9 format and 3/4 scaling.
   EXPECT_TRUE(adapter_.AdaptFrameResolution(640, 480, 0,
@@ -949,7 +948,7 @@
   EXPECT_EQ(270, out_height_);
 
   // Adapt down one step more.
-  adapter_.OnResolutionFramerateRequest(rtc::Optional<int>(), 480 * 270 - 1,
+  adapter_.OnResolutionFramerateRequest(rtc::nullopt, 480 * 270 - 1,
                                         std::numeric_limits<int>::max());
   // Expect cropping to 16:9 format and 1/2 scaling.
   EXPECT_TRUE(adapter_.AdaptFrameResolution(640, 480, 0,
@@ -961,8 +960,7 @@
   EXPECT_EQ(180, out_height_);
 
   // Adapt up one step.
-  adapter_.OnResolutionFramerateRequest(rtc::Optional<int>(480 * 270),
-                                        640 * 360,
+  adapter_.OnResolutionFramerateRequest(480 * 270, 640 * 360,
                                         std::numeric_limits<int>::max());
   // Expect cropping to 16:9 format and 3/4 scaling.
   EXPECT_TRUE(adapter_.AdaptFrameResolution(640, 480, 0,
@@ -974,8 +972,7 @@
   EXPECT_EQ(270, out_height_);
 
   // Adapt up one step more.
-  adapter_.OnResolutionFramerateRequest(rtc::Optional<int>(640 * 360),
-                                        960 * 540,
+  adapter_.OnResolutionFramerateRequest(640 * 360, 960 * 540,
                                         std::numeric_limits<int>::max());
   // Expect cropping to 16:9 format and no scaling.
   EXPECT_TRUE(adapter_.AdaptFrameResolution(640, 480, 0,
@@ -987,8 +984,7 @@
   EXPECT_EQ(360, out_height_);
 
   // Try to adapt up one step more.
-  adapter_.OnResolutionFramerateRequest(rtc::Optional<int>(960 * 540),
-                                        1280 * 720,
+  adapter_.OnResolutionFramerateRequest(960 * 540, 1280 * 720,
                                         std::numeric_limits<int>::max());
   // Expect cropping to 16:9 format and no scaling.
   EXPECT_TRUE(adapter_.AdaptFrameResolution(640, 480, 0,
@@ -1004,7 +1000,7 @@
   // Ask for 640x360 (16:9 aspect), with 3/16 scaling.
   adapter_.OnOutputFormatRequest(
       VideoFormat(640, 360, 0, FOURCC_I420));
-  adapter_.OnResolutionFramerateRequest(rtc::Optional<int>(),
+  adapter_.OnResolutionFramerateRequest(rtc::nullopt,
                                         640 * 360 * 3 / 16 * 3 / 16,
                                         std::numeric_limits<int>::max());
 
@@ -1026,7 +1022,7 @@
   const int w = 1920;
   const int h = 1080;
   adapter_.OnOutputFormatRequest(VideoFormat(w, h, 0, FOURCC_I420));
-  adapter_.OnResolutionFramerateRequest(rtc::Optional<int>(),
+  adapter_.OnResolutionFramerateRequest(rtc::nullopt,
                                         w * h * 1 / 16 * 1 / 16,
                                         std::numeric_limits<int>::max());
 
@@ -1042,9 +1038,9 @@
   EXPECT_EQ(67, out_height_);
 
   // Adapt back up one step to 3/32.
-  adapter_.OnResolutionFramerateRequest(
-      rtc::Optional<int>(w * h * 3 / 32 * 3 / 32), w * h * 1 / 8 * 1 / 8,
-      std::numeric_limits<int>::max());
+  adapter_.OnResolutionFramerateRequest(w * h * 3 / 32 * 3 / 32,
+                                        w * h * 1 / 8 * 1 / 8,
+                                        std::numeric_limits<int>::max());
 
   // Send 1920x1080 (16:9 aspect).
   EXPECT_TRUE(adapter_.AdaptFrameResolution(
@@ -1064,7 +1060,7 @@
       &cropped_width_, &cropped_height_,
       &out_width_, &out_height_));
 
-  adapter_.OnResolutionFramerateRequest(rtc::Optional<int>(960 * 540),
+  adapter_.OnResolutionFramerateRequest(960 * 540,
                                         std::numeric_limits<int>::max(),
                                         std::numeric_limits<int>::max());
 
@@ -1074,7 +1070,7 @@
       &cropped_width_, &cropped_height_,
       &out_width_, &out_height_));
 
-  adapter_.OnResolutionFramerateRequest(rtc::Optional<int>(), 640 * 480 - 1,
+  adapter_.OnResolutionFramerateRequest(rtc::nullopt, 640 * 480 - 1,
                                         std::numeric_limits<int>::max());
 
   // Still expect all frames to be dropped
@@ -1087,9 +1083,9 @@
 // Test that we will adapt to max given a target pixel count close to max.
 TEST_F(VideoAdapterTest, TestAdaptToMax) {
   adapter_.OnOutputFormatRequest(VideoFormat(640, 360, 0, FOURCC_I420));
-  adapter_.OnResolutionFramerateRequest(
-      rtc::Optional<int>(640 * 360 - 1) /* target */,
-      std::numeric_limits<int>::max(), std::numeric_limits<int>::max());
+  adapter_.OnResolutionFramerateRequest(640 * 360 - 1 /* target */,
+                                        std::numeric_limits<int>::max(),
+                                        std::numeric_limits<int>::max());
 
   EXPECT_TRUE(adapter_.AdaptFrameResolution(640, 360, 0, &cropped_width_,
                                             &cropped_height_, &out_width_,
diff --git a/media/base/videobroadcaster_unittest.cc b/media/base/videobroadcaster_unittest.cc
index 779a5d0..0f2057e 100644
--- a/media/base/videobroadcaster_unittest.cc
+++ b/media/base/videobroadcaster_unittest.cc
@@ -115,14 +115,14 @@
 
   FakeVideoRenderer sink1;
   VideoSinkWants wants1;
-  wants1.target_pixel_count = rtc::Optional<int>(1280 * 720);
+  wants1.target_pixel_count = 1280 * 720;
 
   broadcaster.AddOrUpdateSink(&sink1, wants1);
   EXPECT_EQ(1280 * 720, *broadcaster.wants().target_pixel_count);
 
   FakeVideoRenderer sink2;
   VideoSinkWants wants2;
-  wants2.target_pixel_count = rtc::Optional<int>(640 * 360);
+  wants2.target_pixel_count = 640 * 360;
   broadcaster.AddOrUpdateSink(&sink2, wants2);
   EXPECT_EQ(640 * 360, *broadcaster.wants().target_pixel_count);
 
diff --git a/media/base/videoengine_unittest.h b/media/base/videoengine_unittest.h
index 1cbb245..d49f73b 100644
--- a/media/base/videoengine_unittest.h
+++ b/media/base/videoengine_unittest.h
@@ -767,7 +767,7 @@
     // screencast. It's unclear why, I see nothing obvious in this
     // test which is related to screencast logic.
     cricket::VideoOptions video_options;
-    video_options.is_screencast = rtc::Optional<bool>(true);
+    video_options.is_screencast = true;
     channel_->SetVideoSend(kSsrc, true, &video_options, nullptr);
 
     cricket::VideoFormat format(480, 360,
diff --git a/media/engine/fakewebrtccall.cc b/media/engine/fakewebrtccall.cc
index edeaa1a..9c266bc 100644
--- a/media/engine/fakewebrtccall.cc
+++ b/media/engine/fakewebrtccall.cc
@@ -189,7 +189,7 @@
     video_streams_ = encoder_config_.video_stream_factory->CreateEncoderStreams(
         frame.width(), frame.height(), encoder_config_);
   }
-  last_frame_ = rtc::Optional<webrtc::VideoFrame>(frame);
+  last_frame_ = frame;
 }
 
 void FakeVideoSendStream::SetStats(
diff --git a/media/engine/payload_type_mapper.cc b/media/engine/payload_type_mapper.cc
index f34bb03..1927f43 100644
--- a/media/engine/payload_type_mapper.cc
+++ b/media/engine/payload_type_mapper.cc
@@ -89,7 +89,7 @@
     const webrtc::SdpAudioFormat& format) {
   auto iter = mappings_.find(format);
   if (iter != mappings_.end())
-    return rtc::Optional<int>(iter->second);
+    return iter->second;
 
   for (; next_unused_payload_type_ <= max_payload_type_;
        ++next_unused_payload_type_) {
@@ -98,20 +98,20 @@
       used_payload_types_.insert(payload_type);
       mappings_[format] = payload_type;
       ++next_unused_payload_type_;
-      return rtc::Optional<int>(payload_type);
+      return payload_type;
     }
   }
 
-  return rtc::Optional<int>();
+  return rtc::nullopt;
 }
 
 rtc::Optional<int> PayloadTypeMapper::FindMappingFor(
     const webrtc::SdpAudioFormat& format) const {
   auto iter = mappings_.find(format);
   if (iter != mappings_.end())
-    return rtc::Optional<int>(iter->second);
+    return iter->second;
 
-  return rtc::Optional<int>();
+  return rtc::nullopt;
 }
 
 rtc::Optional<AudioCodec> PayloadTypeMapper::ToAudioCodec(
@@ -126,10 +126,10 @@
     AudioCodec codec(*opt_payload_type, format.name, format.clockrate_hz, 0,
                      format.num_channels);
     codec.params = format.parameters;
-    return rtc::Optional<AudioCodec>(std::move(codec));
+    return std::move(codec);
   }
 
-  return rtc::Optional<AudioCodec>();
+  return rtc::nullopt;
 }
 
 bool PayloadTypeMapper::SdpAudioFormatOrdering::operator()(
diff --git a/media/engine/payload_type_mapper_unittest.cc b/media/engine/payload_type_mapper_unittest.cc
index dca8e61..96d56c2 100644
--- a/media/engine/payload_type_mapper_unittest.cc
+++ b/media/engine/payload_type_mapper_unittest.cc
@@ -17,70 +17,53 @@
 namespace cricket {
 
 class PayloadTypeMapperTest : public testing::Test {
- public:
-  // TODO(ossu): These are to work around missing comparison operators in
-  // rtc::Optional. They should be removed once Optional has been updated.
-  int FindMapping(const webrtc::SdpAudioFormat& format) {
-    auto opt_mapping = mapper_.FindMappingFor(format);
-    if (opt_mapping)
-      return *opt_mapping;
-    return -1;
-  }
-
-  int GetMapping(const webrtc::SdpAudioFormat& format) {
-    auto opt_mapping = mapper_.GetMappingFor(format);
-    if (opt_mapping)
-      return *opt_mapping;
-    return -1;
-  }
-
  protected:
   PayloadTypeMapper mapper_;
 };
 
 TEST_F(PayloadTypeMapperTest, StaticPayloadTypes) {
-  EXPECT_EQ(0,  FindMapping({"pcmu",   8000, 1}));
-  EXPECT_EQ(3,  FindMapping({"gsm",    8000, 1}));
-  EXPECT_EQ(4,  FindMapping({"g723",   8000, 1}));
-  EXPECT_EQ(5,  FindMapping({"dvi4",   8000, 1}));
-  EXPECT_EQ(6,  FindMapping({"dvi4",  16000, 1}));
-  EXPECT_EQ(7,  FindMapping({"lpc",    8000, 1}));
-  EXPECT_EQ(8,  FindMapping({"pcma",   8000, 1}));
-  EXPECT_EQ(9,  FindMapping({"g722",   8000, 1}));
-  EXPECT_EQ(10, FindMapping({"l16",   44100, 2}));
-  EXPECT_EQ(11, FindMapping({"l16",   44100, 1}));
-  EXPECT_EQ(12, FindMapping({"qcelp",  8000, 1}));
-  EXPECT_EQ(13, FindMapping({"cn",     8000, 1}));
-  EXPECT_EQ(14, FindMapping({"mpa",   90000, 0}));
-  EXPECT_EQ(14, FindMapping({"mpa",   90000, 1}));
-  EXPECT_EQ(15, FindMapping({"g728",   8000, 1}));
-  EXPECT_EQ(16, FindMapping({"dvi4",  11025, 1}));
-  EXPECT_EQ(17, FindMapping({"dvi4",  22050, 1}));
-  EXPECT_EQ(18, FindMapping({"g729",   8000, 1}));
+  EXPECT_EQ(0,  mapper_.FindMappingFor({"pcmu",   8000, 1}));
+  EXPECT_EQ(3,  mapper_.FindMappingFor({"gsm",    8000, 1}));
+  EXPECT_EQ(4,  mapper_.FindMappingFor({"g723",   8000, 1}));
+  EXPECT_EQ(5,  mapper_.FindMappingFor({"dvi4",   8000, 1}));
+  EXPECT_EQ(6,  mapper_.FindMappingFor({"dvi4",  16000, 1}));
+  EXPECT_EQ(7,  mapper_.FindMappingFor({"lpc",    8000, 1}));
+  EXPECT_EQ(8,  mapper_.FindMappingFor({"pcma",   8000, 1}));
+  EXPECT_EQ(9,  mapper_.FindMappingFor({"g722",   8000, 1}));
+  EXPECT_EQ(10, mapper_.FindMappingFor({"l16",   44100, 2}));
+  EXPECT_EQ(11, mapper_.FindMappingFor({"l16",   44100, 1}));
+  EXPECT_EQ(12, mapper_.FindMappingFor({"qcelp",  8000, 1}));
+  EXPECT_EQ(13, mapper_.FindMappingFor({"cn",     8000, 1}));
+  EXPECT_EQ(14, mapper_.FindMappingFor({"mpa",   90000, 0}));
+  EXPECT_EQ(14, mapper_.FindMappingFor({"mpa",   90000, 1}));
+  EXPECT_EQ(15, mapper_.FindMappingFor({"g728",   8000, 1}));
+  EXPECT_EQ(16, mapper_.FindMappingFor({"dvi4",  11025, 1}));
+  EXPECT_EQ(17, mapper_.FindMappingFor({"dvi4",  22050, 1}));
+  EXPECT_EQ(18, mapper_.FindMappingFor({"g729",   8000, 1}));
 }
 
 TEST_F(PayloadTypeMapperTest, WebRTCPayloadTypes) {
   // Tests that the payload mapper knows about the audio and data formats we've
   // been using in WebRTC, with their hard coded values.
   auto data_mapping = [this] (const char *name) {
-    return FindMapping({name, 0, 0});
+    return mapper_.FindMappingFor({name, 0, 0});
   };
   EXPECT_EQ(kGoogleRtpDataCodecPlType, data_mapping(kGoogleRtpDataCodecName));
   EXPECT_EQ(kGoogleSctpDataCodecPlType, data_mapping(kGoogleSctpDataCodecName));
 
-  EXPECT_EQ(102, FindMapping({kIlbcCodecName,  8000, 1}));
-  EXPECT_EQ(103, FindMapping({kIsacCodecName, 16000, 1}));
-  EXPECT_EQ(104, FindMapping({kIsacCodecName, 32000, 1}));
-  EXPECT_EQ(105, FindMapping({kCnCodecName,   16000, 1}));
-  EXPECT_EQ(106, FindMapping({kCnCodecName,   32000, 1}));
-  EXPECT_EQ(111, FindMapping({kOpusCodecName, 48000, 2,
+  EXPECT_EQ(102, mapper_.FindMappingFor({kIlbcCodecName,  8000, 1}));
+  EXPECT_EQ(103, mapper_.FindMappingFor({kIsacCodecName, 16000, 1}));
+  EXPECT_EQ(104, mapper_.FindMappingFor({kIsacCodecName, 32000, 1}));
+  EXPECT_EQ(105, mapper_.FindMappingFor({kCnCodecName,   16000, 1}));
+  EXPECT_EQ(106, mapper_.FindMappingFor({kCnCodecName,   32000, 1}));
+  EXPECT_EQ(111, mapper_.FindMappingFor({kOpusCodecName, 48000, 2,
         {{"minptime", "10"}, {"useinbandfec", "1"}}}));
   // TODO(solenberg): Remove 16k, 32k, 48k DTMF checks once these payload types
   // are dynamically assigned.
-  EXPECT_EQ(110, FindMapping({kDtmfCodecName, 48000, 1}));
-  EXPECT_EQ(112, FindMapping({kDtmfCodecName, 32000, 1}));
-  EXPECT_EQ(113, FindMapping({kDtmfCodecName, 16000, 1}));
-  EXPECT_EQ(126, FindMapping({kDtmfCodecName, 8000, 1}));
+  EXPECT_EQ(110, mapper_.FindMappingFor({kDtmfCodecName, 48000, 1}));
+  EXPECT_EQ(112, mapper_.FindMappingFor({kDtmfCodecName, 32000, 1}));
+  EXPECT_EQ(113, mapper_.FindMappingFor({kDtmfCodecName, 16000, 1}));
+  EXPECT_EQ(126, mapper_.FindMappingFor({kDtmfCodecName, 8000, 1}));
 }
 
 TEST_F(PayloadTypeMapperTest, ValidDynamicPayloadTypes) {
@@ -118,10 +101,10 @@
       if (payload_type < 96)
         has_been_below_96 = true;
 
-      EXPECT_EQ(payload_type, FindMapping(format))
+      EXPECT_EQ(payload_type, mapper_.FindMappingFor(format))
           << "Mapping must be permanent after successful call to "
              "GetMappingFor";
-      EXPECT_EQ(payload_type, GetMapping(format))
+      EXPECT_EQ(payload_type, mapper_.GetMappingFor(format))
           << "Subsequent calls to GetMappingFor must return the same value";
     } else {
       mapper_is_full = true;
diff --git a/media/engine/webrtcvideoengine.cc b/media/engine/webrtcvideoengine.cc
index 24d60a6..c4ad5a4 100644
--- a/media/engine/webrtcvideoengine.cc
+++ b/media/engine/webrtcvideoengine.cc
@@ -380,25 +380,25 @@
 
 rtc::Optional<int> GetFallbackMinBpsFromFieldTrial() {
   if (!webrtc::field_trial::IsEnabled(kForcedFallbackFieldTrial))
-    return rtc::Optional<int>();
+    return rtc::nullopt;
 
   std::string group =
       webrtc::field_trial::FindFullName(kForcedFallbackFieldTrial);
   if (group.empty())
-    return rtc::Optional<int>();
+    return rtc::nullopt;
 
   int min_pixels;
   int max_pixels;
   int min_bps;
   if (sscanf(group.c_str(), "Enabled-%d,%d,%d", &min_pixels, &max_pixels,
              &min_bps) != 3) {
-    return rtc::Optional<int>();
+    return rtc::nullopt;
   }
 
   if (min_bps <= 0)
-    return rtc::Optional<int>();
+    return rtc::nullopt;
 
-  return rtc::Optional<int>(min_bps);
+  return min_bps;
 }
 
 int GetMinVideoBitrateBps() {
@@ -626,10 +626,10 @@
     // since we should limit the encode level to the lower of local and remote
     // level when level asymmetry is not allowed.
     if (FindMatchingCodec(local_supported_codecs, remote_mapped_codec.codec))
-      return rtc::Optional<VideoCodecSettings>(remote_mapped_codec);
+      return remote_mapped_codec;
   }
   // No remote codec was supported.
-  return rtc::Optional<VideoCodecSettings>();
+  return rtc::nullopt;
 }
 
 bool WebRtcVideoChannel::NonFlexfecReceiveCodecsHaveChanged(
@@ -705,21 +705,20 @@
     // 0 or -1 uncaps max bitrate.
     // TODO(pbos): Reconsider how 0 should be treated. It is not mentioned as a
     // special value and might very well be used for stopping sending.
-    changed_params->max_bandwidth_bps = rtc::Optional<int>(
-        params.max_bandwidth_bps == 0 ? -1 : params.max_bandwidth_bps);
+    changed_params->max_bandwidth_bps =
+        params.max_bandwidth_bps == 0 ? -1 : params.max_bandwidth_bps;
   }
 
   // Handle conference mode.
   if (params.conference_mode != send_params_.conference_mode) {
-    changed_params->conference_mode =
-        rtc::Optional<bool>(params.conference_mode);
+    changed_params->conference_mode = params.conference_mode;
   }
 
   // Handle RTCP mode.
   if (params.rtcp.reduced_size != send_params_.rtcp.reduced_size) {
-    changed_params->rtcp_mode = rtc::Optional<webrtc::RtcpMode>(
-        params.rtcp.reduced_size ? webrtc::RtcpMode::kReducedSize
-                                 : webrtc::RtcpMode::kCompound);
+    changed_params->rtcp_mode = params.rtcp.reduced_size
+                                    ? webrtc::RtcpMode::kReducedSize
+                                    : webrtc::RtcpMode::kCompound;
   }
 
   return true;
@@ -739,7 +738,7 @@
 
   if (changed_params.codec) {
     const VideoCodecSettings& codec_settings = *changed_params.codec;
-    send_codec_ = rtc::Optional<VideoCodecSettings>(codec_settings);
+    send_codec_ = codec_settings;
     RTC_LOG(LS_INFO) << "Using codec: " << codec_settings.codec.ToString();
   }
 
@@ -959,8 +958,7 @@
 
   int flexfec_payload_type = mapped_codecs.front().flexfec_payload_type;
   if (flexfec_payload_type != recv_flexfec_payload_type_) {
-    changed_params->flexfec_payload_type =
-        rtc::Optional<int>(flexfec_payload_type);
+    changed_params->flexfec_payload_type = flexfec_payload_type;
   }
 
   return true;
@@ -1577,8 +1575,7 @@
 
   // ValidateStreamParams should prevent this from happening.
   RTC_CHECK(!parameters_.config.rtp.ssrcs.empty());
-  rtp_parameters_.encodings[0].ssrc =
-      rtc::Optional<uint32_t>(parameters_.config.rtp.ssrcs[0]);
+  rtp_parameters_.encodings[0].ssrc = parameters_.config.rtp.ssrcs[0];
 
   // RTX.
   sp.GetFidSsrcs(parameters_.config.rtp.ssrcs,
@@ -1748,8 +1745,7 @@
   parameters_.config.rtp.nack.rtp_history_ms =
       HasNack(codec_settings.codec) ? kNackHistoryMs : 0;
 
-  parameters_.codec_settings =
-      rtc::Optional<WebRtcVideoChannel::VideoCodecSettings>(codec_settings);
+  parameters_.codec_settings = codec_settings;
 
   RTC_LOG(LS_INFO) << "RecreateWebRtcStream (send) because of SetCodec.";
   RecreateWebRtcStream();
@@ -1975,8 +1971,7 @@
 
   if (parameters_.codec_settings) {
     info.codec_name = parameters_.codec_settings->codec.name;
-    info.codec_payload_type = rtc::Optional<int>(
-        parameters_.codec_settings->codec.id);
+    info.codec_payload_type = parameters_.codec_settings->codec.id;
   }
 
   if (stream_ == NULL)
@@ -2146,9 +2141,9 @@
   if (primary_ssrcs.empty()) {
     RTC_LOG(LS_WARNING)
         << "Empty primary ssrcs vector, returning empty optional";
-    return rtc::Optional<uint32_t>();
+    return rtc::nullopt;
   } else {
-    return rtc::Optional<uint32_t>(primary_ssrcs[0]);
+    return primary_ssrcs[0];
   }
 }
 
@@ -2395,8 +2390,7 @@
   webrtc::VideoReceiveStream::Stats stats = stream_->GetStats();
   info.decoder_implementation_name = stats.decoder_implementation_name;
   if (stats.current_payload_type != -1) {
-    info.codec_payload_type = rtc::Optional<int>(
-        stats.current_payload_type);
+    info.codec_payload_type = stats.current_payload_type;
   }
   info.bytes_rcvd = stats.rtp_stats.transmitted.payload_bytes +
                     stats.rtp_stats.transmitted.header_bytes +
diff --git a/media/engine/webrtcvideoengine_unittest.cc b/media/engine/webrtcvideoengine_unittest.cc
index d3a9b9b..7b1eb4a 100644
--- a/media/engine/webrtcvideoengine_unittest.cc
+++ b/media/engine/webrtcvideoengine_unittest.cc
@@ -1374,7 +1374,7 @@
       cricket::FakeVideoCapturer* capturer,
       bool enabled) {
     cricket::VideoOptions options;
-    options.video_noise_reduction = rtc::Optional<bool>(enabled);
+    options.video_noise_reduction = enabled;
     EXPECT_TRUE(channel_->SetVideoSend(ssrc, true, &options, capturer));
     // Options only take effect on the next frame.
     EXPECT_TRUE(capturer->CaptureFrame());
@@ -1420,13 +1420,12 @@
     webrtc::RtpParameters parameters =
         channel_->GetRtpSendParameters(last_ssrc_);
     EXPECT_EQ(1UL, parameters.encodings.size());
-    parameters.encodings[0].max_bitrate_bps = rtc::Optional<int>(stream_max);
+    parameters.encodings[0].max_bitrate_bps = stream_max;
     EXPECT_TRUE(channel_->SetRtpSendParameters(last_ssrc_, parameters));
     // Read back the parameteres and verify they have the correct value
     parameters = channel_->GetRtpSendParameters(last_ssrc_);
     EXPECT_EQ(1UL, parameters.encodings.size());
-    EXPECT_EQ(rtc::Optional<int>(stream_max),
-              parameters.encodings[0].max_bitrate_bps);
+    EXPECT_EQ(stream_max, parameters.encodings[0].max_bitrate_bps);
     // Verify that the new value propagated down to the encoder
     EXPECT_EQ(expected_encoder_bitrate, GetMaxEncoderBitrate());
   }
@@ -1876,8 +1875,7 @@
 
   cricket::FakeVideoCapturer capturer;
   VideoOptions min_bitrate_options;
-  min_bitrate_options.screencast_min_bitrate_kbps =
-      rtc::Optional<int>(kScreenshareMinBitrateKbps);
+  min_bitrate_options.screencast_min_bitrate_kbps = kScreenshareMinBitrateKbps;
   EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, &min_bitrate_options,
                                      &capturer));
   cricket::VideoFormat capture_format_hd =
@@ -1908,7 +1906,7 @@
   EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, nullptr));
   EXPECT_EQ(1, send_stream->GetNumberOfSwappedFrames());
   VideoOptions screencast_options;
-  screencast_options.is_screencast = rtc::Optional<bool>(true);
+  screencast_options.is_screencast = true;
   EXPECT_TRUE(
       channel_->SetVideoSend(last_ssrc_, true, &screencast_options, &capturer));
   EXPECT_TRUE(capturer.CaptureFrame());
@@ -1940,7 +1938,7 @@
 
   AddSendStream();
   VideoOptions options;
-  options.is_screencast = rtc::Optional<bool>(true);
+  options.is_screencast = true;
   cricket::FakeVideoCapturer capturer;
   EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, &options, &capturer));
   cricket::VideoFormat capture_format_hd =
@@ -2057,7 +2055,7 @@
 
   // In screen-share mode, denoising is forced off and simulcast disabled.
   VideoOptions options;
-  options.is_screencast = rtc::Optional<bool>(true);
+  options.is_screencast = true;
   EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, &options, &capturer));
 
   stream = SetDenoisingOption(last_ssrc_, &capturer, false);
@@ -2104,7 +2102,7 @@
   EXPECT_EQ(1, send_stream->num_encoder_reconfigurations());
 
   // Change |options| and expect 2 reconfigurations.
-  options.video_noise_reduction = rtc::Optional<bool>(true);
+  options.video_noise_reduction = true;
   EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, &options, &capturer));
   EXPECT_EQ(2, send_stream->num_encoder_reconfigurations());
 
@@ -2163,7 +2161,7 @@
 
   // In screen-share mode, denoising is forced off.
   VideoOptions options;
-  options.is_screencast = rtc::Optional<bool>(true);
+  options.is_screencast = true;
   EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, &options, &capturer));
 
   stream = SetDenoisingOption(last_ssrc_, &capturer, false);
@@ -2351,7 +2349,7 @@
   // of the current stream, so we don't take too large steps.
   wants.max_pixel_count = current_pixel_count * 4;
   // Default step down is 3/5 pixel count, so go up by 5/3.
-  wants.target_pixel_count = rtc::Optional<int>((current_pixel_count * 5) / 3);
+  wants.target_pixel_count = (current_pixel_count * 5 / 3);
   send_stream->InjectVideoSinkWants(wants);
   EXPECT_TRUE(capturer.CaptureCustomFrame(1284, 724, cricket::FOURCC_I420));
   EXPECT_EQ(5, send_stream->GetNumberOfSwappedFrames());
@@ -2362,7 +2360,7 @@
   current_pixel_count =
       send_stream->GetLastWidth() * send_stream->GetLastHeight();
   wants.max_pixel_count = current_pixel_count * 4;
-  wants.target_pixel_count = rtc::Optional<int>((current_pixel_count * 5) / 3);
+  wants.target_pixel_count = (current_pixel_count * 5 / 3);
   send_stream->InjectVideoSinkWants(wants);
   EXPECT_TRUE(capturer.CaptureCustomFrame(1284, 724, cricket::FOURCC_I420));
   EXPECT_EQ(6, send_stream->GetNumberOfSwappedFrames());
@@ -2391,7 +2389,7 @@
             capturer.Start(capturer.GetSupportedFormats()->front()));
   ASSERT_TRUE(channel_->SetSend(true));
   cricket::VideoOptions camera_options;
-  camera_options.is_screencast = rtc::Optional<bool>(false);
+  camera_options.is_screencast = false;
   channel_->SetVideoSend(last_ssrc_, true /* enable */, &camera_options,
                          &capturer);
 
@@ -2418,7 +2416,7 @@
   ASSERT_EQ(cricket::CS_RUNNING,
             screen_share.Start(screen_share.GetSupportedFormats()->front()));
   cricket::VideoOptions screenshare_options;
-  screenshare_options.is_screencast = rtc::Optional<bool>(true);
+  screenshare_options.is_screencast = true;
   channel_->SetVideoSend(last_ssrc_, true /* enable */, &screenshare_options,
                          &screen_share);
   EXPECT_TRUE(screen_share.CaptureCustomFrame(1284, 724, cricket::FOURCC_I420));
@@ -2501,7 +2499,7 @@
 
   cricket::FakeVideoCapturer capturer;
   VideoOptions options;
-  options.is_screencast = rtc::Optional<bool>(is_screenshare);
+  options.is_screencast = is_screenshare;
   EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, &options, &capturer));
   cricket::VideoFormat capture_format = capturer.GetSupportedFormats()->front();
   capture_format.interval = rtc::kNumNanosecsPerSec / kDefaultFps;
@@ -3708,7 +3706,7 @@
 TEST_F(WebRtcVideoChannelTest, GetStatsReportsQpSum) {
   FakeVideoSendStream* stream = AddSendStream();
   webrtc::VideoSendStream::Stats stats;
-  stats.qp_sum = rtc::Optional<uint64_t>(13);
+  stats.qp_sum = 13;
   stream->SetStats(stats);
 
   cricket::VideoMediaInfo info;
@@ -3848,7 +3846,7 @@
   stats.frame_counts.delta_frames = 12;
   stats.frames_rendered = 13;
   stats.frames_decoded = 14;
-  stats.qp_sum = rtc::Optional<uint64_t>(15);
+  stats.qp_sum = 15;
   stream->SetStats(stats);
 
   cricket::VideoMediaInfo info;
@@ -4357,7 +4355,7 @@
 TEST_F(WebRtcVideoChannelTest, CannotSetSsrcInRtpSendParameters) {
   AddSendStream();
   webrtc::RtpParameters parameters = channel_->GetRtpSendParameters(last_ssrc_);
-  parameters.encodings[0].ssrc = rtc::Optional<uint32_t>(0xdeadbeef);
+  parameters.encodings[0].ssrc = 0xdeadbeef;
   EXPECT_FALSE(channel_->SetRtpSendParameters(last_ssrc_, parameters));
 }
 
@@ -4449,8 +4447,7 @@
   webrtc::RtpParameters rtp_parameters =
       channel_->GetRtpSendParameters(last_ssrc_);
   ASSERT_EQ(1u, rtp_parameters.encodings.size());
-  EXPECT_EQ(rtc::Optional<uint32_t>(last_ssrc_),
-            rtp_parameters.encodings[0].ssrc);
+  EXPECT_EQ(last_ssrc_, rtp_parameters.encodings[0].ssrc);
 }
 
 // Test that if we set/get parameters multiple times, we get the same results.
@@ -4532,8 +4529,7 @@
   webrtc::RtpParameters rtp_parameters =
       channel_->GetRtpReceiveParameters(last_ssrc_);
   ASSERT_EQ(1u, rtp_parameters.encodings.size());
-  EXPECT_EQ(rtc::Optional<uint32_t>(last_ssrc_),
-            rtp_parameters.encodings[0].ssrc);
+  EXPECT_EQ(last_ssrc_, rtp_parameters.encodings[0].ssrc);
 }
 
 // Test that if we set/get parameters multiple times, we get the same results.
@@ -4692,7 +4688,7 @@
     cricket::FakeVideoCapturer capturer;
     VideoOptions options;
     if (screenshare)
-      options.is_screencast = rtc::Optional<bool>(screenshare);
+      options.is_screencast = screenshare;
     EXPECT_TRUE(
         channel_->SetVideoSend(ssrcs.front(), true, &options, &capturer));
     // Fetch the latest stream since SetVideoSend() may recreate it if the
diff --git a/media/engine/webrtcvoiceengine.cc b/media/engine/webrtcvoiceengine.cc
index cab9f82..19619a3 100644
--- a/media/engine/webrtcvoiceengine.cc
+++ b/media/engine/webrtcvoiceengine.cc
@@ -155,7 +155,7 @@
     // equals true and |options_.audio_network_adaptor_config| has a value.
     return options.audio_network_adaptor_config;
   }
-  return rtc::Optional<std::string>();
+  return rtc::nullopt;
 }
 
 webrtc::AudioState::Config MakeAudioStateConfig(
@@ -185,7 +185,7 @@
           ? webrtc::MinPositive(max_send_bitrate_bps, *rtp_max_bitrate_bps)
           : max_send_bitrate_bps;
   if (bps <= 0) {
-    return rtc::Optional<int>(spec.info.default_bitrate_bps);
+    return spec.info.default_bitrate_bps;
   }
 
   if (bps < spec.info.min_bitrate_bps) {
@@ -196,14 +196,14 @@
                       << " to bitrate " << bps << " bps"
                       << ", requires at least " << spec.info.min_bitrate_bps
                       << " bps.";
-    return rtc::Optional<int>();
+    return rtc::nullopt;
   }
 
   if (spec.info.HasFixedBitrate()) {
-    return rtc::Optional<int>(spec.info.default_bitrate_bps);
+    return spec.info.default_bitrate_bps;
   } else {
     // If codec is multi-rate then just set the bitrate.
-    return rtc::Optional<int>(std::min(bps, spec.info.max_bitrate_bps));
+    return std::min(bps, spec.info.max_bitrate_bps);
   }
 }
 
@@ -302,22 +302,22 @@
   // Set default engine options.
   {
     AudioOptions options;
-    options.echo_cancellation = rtc::Optional<bool>(true);
-    options.auto_gain_control = rtc::Optional<bool>(true);
-    options.noise_suppression = rtc::Optional<bool>(true);
-    options.highpass_filter = rtc::Optional<bool>(true);
-    options.stereo_swapping = rtc::Optional<bool>(false);
-    options.audio_jitter_buffer_max_packets = rtc::Optional<int>(50);
-    options.audio_jitter_buffer_fast_accelerate = rtc::Optional<bool>(false);
-    options.typing_detection = rtc::Optional<bool>(true);
-    options.adjust_agc_delta = rtc::Optional<int>(0);
-    options.experimental_agc = rtc::Optional<bool>(false);
-    options.extended_filter_aec = rtc::Optional<bool>(false);
-    options.delay_agnostic_aec = rtc::Optional<bool>(false);
-    options.experimental_ns = rtc::Optional<bool>(false);
-    options.intelligibility_enhancer = rtc::Optional<bool>(false);
-    options.level_control = rtc::Optional<bool>(false);
-    options.residual_echo_detector = rtc::Optional<bool>(true);
+    options.echo_cancellation = true;
+    options.auto_gain_control = true;
+    options.noise_suppression = true;
+    options.highpass_filter = true;
+    options.stereo_swapping = false;
+    options.audio_jitter_buffer_max_packets = 50;
+    options.audio_jitter_buffer_fast_accelerate = false;
+    options.typing_detection = true;
+    options.adjust_agc_delta = 0;
+    options.experimental_agc = false;
+    options.extended_filter_aec = false;
+    options.delay_agnostic_aec = false;
+    options.experimental_ns = false;
+    options.intelligibility_enhancer = false;
+    options.level_control = false;
+    options.residual_echo_detector = true;
     bool error = ApplyOptions(options);
     RTC_DCHECK(error);
   }
@@ -369,12 +369,12 @@
 
 #if defined(WEBRTC_IOS)
   // On iOS, VPIO provides built-in EC.
-  options.echo_cancellation = rtc::Optional<bool>(false);
-  options.extended_filter_aec = rtc::Optional<bool>(false);
+  options.echo_cancellation = false;
+  options.extended_filter_aec = false;
   RTC_LOG(LS_INFO) << "Always disable AEC on iOS. Use built-in instead.";
 #elif defined(WEBRTC_ANDROID)
   ec_mode = webrtc::kEcAecm;
-  options.extended_filter_aec = rtc::Optional<bool>(false);
+  options.extended_filter_aec = false;
 #endif
 
   // Delay Agnostic AEC automatically turns on EC if not set except on iOS
@@ -384,8 +384,8 @@
   if (options.delay_agnostic_aec) {
     use_delay_agnostic_aec = *options.delay_agnostic_aec;
     if (use_delay_agnostic_aec) {
-      options.echo_cancellation = rtc::Optional<bool>(true);
-      options.extended_filter_aec = rtc::Optional<bool>(true);
+      options.echo_cancellation = true;
+      options.extended_filter_aec = true;
       ec_mode = webrtc::kEcConference;
     }
   }
@@ -394,23 +394,23 @@
 // Set and adjust noise suppressor options.
 #if defined(WEBRTC_IOS)
   // On iOS, VPIO provides built-in NS.
-  options.noise_suppression = rtc::Optional<bool>(false);
-  options.typing_detection = rtc::Optional<bool>(false);
-  options.experimental_ns = rtc::Optional<bool>(false);
+  options.noise_suppression = false;
+  options.typing_detection = false;
+  options.experimental_ns = false;
   RTC_LOG(LS_INFO) << "Always disable NS on iOS. Use built-in instead.";
 #elif defined(WEBRTC_ANDROID)
-  options.typing_detection = rtc::Optional<bool>(false);
-  options.experimental_ns = rtc::Optional<bool>(false);
+  options.typing_detection = false;
+  options.experimental_ns = false;
 #endif
 
 // Set and adjust gain control options.
 #if defined(WEBRTC_IOS)
   // On iOS, VPIO provides built-in AGC.
-  options.auto_gain_control = rtc::Optional<bool>(false);
-  options.experimental_agc = rtc::Optional<bool>(false);
+  options.auto_gain_control = false;
+  options.experimental_agc = false;
   RTC_LOG(LS_INFO) << "Always disable AGC on iOS. Use built-in instead.";
 #elif defined(WEBRTC_ANDROID)
-  options.experimental_agc = rtc::Optional<bool>(false);
+  options.experimental_agc = false;
 #endif
 
 #if defined(WEBRTC_IOS) || defined(WEBRTC_ANDROID)
@@ -421,21 +421,21 @@
   // (https://bugs.chromium.org/p/webrtc/issues/detail?id=6181).
   if (webrtc::field_trial::IsEnabled(
           "WebRTC-Audio-MinimizeResamplingOnMobile")) {
-    options.auto_gain_control = rtc::Optional<bool>(false);
+    options.auto_gain_control = false;
     RTC_LOG(LS_INFO) << "Disable AGC according to field trial.";
     if (!(options.noise_suppression.value_or(false) ||
           options.echo_cancellation.value_or(false))) {
       // If possible, turn off the high-pass filter.
       RTC_LOG(LS_INFO)
           << "Disable high-pass filter in response to field trial.";
-      options.highpass_filter = rtc::Optional<bool>(false);
+      options.highpass_filter = false;
     }
   }
 #endif
 
 #if (WEBRTC_INTELLIGIBILITY_ENHANCER == 0)
   // Hardcode the intelligibility enhancer to be off.
-  options.intelligibility_enhancer = rtc::Optional<bool>(false);
+  options.intelligibility_enhancer = false;
 #endif
 
   if (options.echo_cancellation) {
@@ -454,7 +454,7 @@
           enable_built_in_aec) {
         // Disable internal software EC if built-in EC is enabled,
         // i.e., replace the software EC with the built-in EC.
-        options.echo_cancellation = rtc::Optional<bool>(false);
+        options.echo_cancellation = false;
         RTC_LOG(LS_INFO)
             << "Disabling EC since built-in EC will be used instead";
       }
@@ -477,7 +477,7 @@
           *options.auto_gain_control) {
         // Disable internal software AGC if built-in AGC is enabled,
         // i.e., replace the software AGC with the built-in AGC.
-        options.auto_gain_control = rtc::Optional<bool>(false);
+        options.auto_gain_control = false;
         RTC_LOG(LS_INFO)
             << "Disabling AGC since built-in AGC will be used instead";
       }
@@ -529,7 +529,7 @@
       if (adm()->EnableBuiltInNS(builtin_ns) == 0 && builtin_ns) {
         // Disable internal software NS if built-in NS is enabled,
         // i.e., replace the software NS with the built-in NS.
-        options.noise_suppression = rtc::Optional<bool>(false);
+        options.noise_suppression = false;
         RTC_LOG(LS_INFO)
             << "Disabling NS since built-in NS will be used instead";
       }
@@ -834,7 +834,7 @@
     config_.audio_network_adaptor_config = audio_network_adaptor_config;
     config_.encoder_factory = encoder_factory;
     config_.track_id = track_id;
-    rtp_parameters_.encodings[0].ssrc = rtc::Optional<uint32_t>(ssrc);
+    rtp_parameters_.encodings[0].ssrc = ssrc;
 
     if (send_codec_spec) {
       UpdateSendCodecSpec(*send_codec_spec);
@@ -1096,9 +1096,7 @@
     RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
     config_.rtp.nack.rtp_history_ms =
         send_codec_spec.nack_enabled ? kNackRtpHistoryMs : 0;
-    config_.send_codec_spec =
-        rtc::Optional<webrtc::AudioSendStream::Config::SendCodecSpec>(
-            send_codec_spec);
+    config_.send_codec_spec = send_codec_spec;
     auto info =
         config_.encoder_factory->QueryAudioEncoder(send_codec_spec.format);
     RTC_DCHECK(info);
@@ -1455,7 +1453,7 @@
     }
     rtp_params.encodings.emplace_back();
     // TODO(deadbeef): Return stream-specific parameters.
-    rtp_params.encodings[0].ssrc = rtc::Optional<uint32_t>(ssrc);
+    rtp_params.encodings[0].ssrc = ssrc;
   }
 
   for (const AudioCodec& codec : recv_codecs_) {
@@ -1603,7 +1601,7 @@
 bool WebRtcVoiceMediaChannel::SetSendCodecs(
     const std::vector<AudioCodec>& codecs) {
   RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
-  dtmf_payload_type_ = rtc::Optional<int>();
+  dtmf_payload_type_ = rtc::nullopt;
   dtmf_payload_freq_ = -1;
 
   // Validate supplied codecs list.
@@ -1626,7 +1624,7 @@
     if (IsCodec(codec, kDtmfCodecName)) {
       dtmf_codecs.push_back(codec);
       if (!dtmf_payload_type_ || codec.clockrate < dtmf_payload_freq_) {
-        dtmf_payload_type_ = rtc::Optional<int>(codec.id);
+        dtmf_payload_type_ = codec.id;
         dtmf_payload_freq_ = codec.clockrate;
       }
     }
@@ -1649,12 +1647,10 @@
         continue;
       }
 
-      send_codec_spec =
-          rtc::Optional<webrtc::AudioSendStream::Config::SendCodecSpec>(
-              {voice_codec.id, format});
+      send_codec_spec = webrtc::AudioSendStream::Config::SendCodecSpec(
+          voice_codec.id, format);
       if (voice_codec.bitrate > 0) {
-        send_codec_spec->target_bitrate_bps =
-            rtc::Optional<int>(voice_codec.bitrate);
+        send_codec_spec->target_bitrate_bps = voice_codec.bitrate;
       }
       send_codec_spec->transport_cc_enabled = HasTransportCc(voice_codec);
       send_codec_spec->nack_enabled = HasNack(voice_codec);
@@ -1678,7 +1674,7 @@
           case 8000:
           case 16000:
           case 32000:
-            send_codec_spec->cng_payload_type = rtc::Optional<int>(cn_codec.id);
+            send_codec_spec->cng_payload_type = cn_codec.id;
             break;
           default:
             RTC_LOG(LS_WARNING)
@@ -1692,7 +1688,7 @@
     // Find the telephone-event PT exactly matching the preferred send codec.
     for (const AudioCodec& dtmf_codec : dtmf_codecs) {
       if (dtmf_codec.clockrate == send_codec_spec->format.clockrate_hz) {
-        dtmf_payload_type_ = rtc::Optional<int>(dtmf_codec.id);
+        dtmf_payload_type_ = dtmf_codec.id;
         dtmf_payload_freq_ = dtmf_codec.clockrate;
         break;
       }
diff --git a/media/engine/webrtcvoiceengine_unittest.cc b/media/engine/webrtcvoiceengine_unittest.cc
index e370612..ef56473 100644
--- a/media/engine/webrtcvoiceengine_unittest.cc
+++ b/media/engine/webrtcvoiceengine_unittest.cc
@@ -370,7 +370,7 @@
     webrtc::RtpParameters parameters = channel_->GetRtpSendParameters(ssrc);
     EXPECT_EQ(1UL, parameters.encodings.size());
 
-    parameters.encodings[0].max_bitrate_bps = rtc::Optional<int>(bitrate);
+    parameters.encodings[0].max_bitrate_bps = bitrate;
     return channel_->SetRtpSendParameters(ssrc, parameters);
   }
 
@@ -534,7 +534,7 @@
     stats.packets_lost = 9012;
     stats.fraction_lost = 34.56f;
     stats.codec_name = "codec_name_send";
-    stats.codec_payload_type = rtc::Optional<int>(42);
+    stats.codec_payload_type = 42;
     stats.ext_seqnum = 789;
     stats.jitter_ms = 12;
     stats.rtt_ms = 345;
@@ -546,16 +546,13 @@
     stats.echo_return_loss_enhancement = 1234;
     stats.residual_echo_likelihood = 0.432f;
     stats.residual_echo_likelihood_recent_max = 0.6f;
-    stats.ana_statistics.bitrate_action_counter = rtc::Optional<uint32_t>(321);
-    stats.ana_statistics.channel_action_counter = rtc::Optional<uint32_t>(432);
-    stats.ana_statistics.dtx_action_counter = rtc::Optional<uint32_t>(543);
-    stats.ana_statistics.fec_action_counter = rtc::Optional<uint32_t>(654);
-    stats.ana_statistics.frame_length_increase_counter =
-        rtc::Optional<uint32_t>(765);
-    stats.ana_statistics.frame_length_decrease_counter =
-        rtc::Optional<uint32_t>(876);
-    stats.ana_statistics.uplink_packet_loss_fraction =
-        rtc::Optional<float>(987.0);
+    stats.ana_statistics.bitrate_action_counter = 321;
+    stats.ana_statistics.channel_action_counter = 432;
+    stats.ana_statistics.dtx_action_counter = 543;
+    stats.ana_statistics.fec_action_counter = 654;
+    stats.ana_statistics.frame_length_increase_counter = 765;
+    stats.ana_statistics.frame_length_decrease_counter = 876;
+    stats.ana_statistics.uplink_packet_loss_fraction = 987.0;
     stats.typing_noise_detected = true;
     return stats;
   }
@@ -613,7 +610,7 @@
     stats.packets_lost = 101;
     stats.fraction_lost = 23.45f;
     stats.codec_name = "codec_name_recv";
-    stats.codec_payload_type = rtc::Optional<int>(42);
+    stats.codec_payload_type = 42;
     stats.ext_seqnum = 678;
     stats.jitter_ms = 901;
     stats.jitter_buffer_ms = 234;
@@ -1070,7 +1067,7 @@
 TEST_F(WebRtcVoiceEngineTestFake, CannotSetSsrcInRtpSendParameters) {
   EXPECT_TRUE(SetupSendStream());
   webrtc::RtpParameters parameters = channel_->GetRtpSendParameters(kSsrcX);
-  parameters.encodings[0].ssrc = rtc::Optional<uint32_t>(0xdeadbeef);
+  parameters.encodings[0].ssrc = 0xdeadbeef;
   EXPECT_FALSE(channel_->SetRtpSendParameters(kSsrcX, parameters));
 }
 
@@ -1178,8 +1175,7 @@
   EXPECT_FALSE(rtp_parameters.encodings[0].max_bitrate_bps);
 
   constexpr int kMaxBitrateBps = 6000;
-  rtp_parameters.encodings[0].max_bitrate_bps =
-      rtc::Optional<int>(kMaxBitrateBps);
+  rtp_parameters.encodings[0].max_bitrate_bps = kMaxBitrateBps;
   EXPECT_TRUE(channel_->SetRtpSendParameters(kSsrcX, rtp_parameters));
 
   const int max_bitrate = GetSendStreamConfig(kSsrcX).max_bitrate_bps;
@@ -1282,7 +1278,7 @@
   EXPECT_EQ(22000, send_codec_spec.target_bitrate_bps);
   EXPECT_STRCASEEQ("ISAC", send_codec_spec.format.name.c_str());
   EXPECT_NE(send_codec_spec.format.clockrate_hz, 8000);
-  EXPECT_EQ(rtc::Optional<int>(), send_codec_spec.cng_payload_type);
+  EXPECT_EQ(rtc::nullopt, send_codec_spec.cng_payload_type);
   EXPECT_FALSE(channel_->CanInsertDtmf());
 }
 
@@ -1859,7 +1855,7 @@
   {
     const auto& send_codec_spec = *GetSendStreamConfig(kSsrcX).send_codec_spec;
     EXPECT_STRCASEEQ("PCMU", send_codec_spec.format.name.c_str());
-    EXPECT_EQ(rtc::Optional<int>(), send_codec_spec.cng_payload_type);
+    EXPECT_EQ(rtc::nullopt, send_codec_spec.cng_payload_type);
   }
   // Set PCMU(8K) and CN(8K). VAD should be activated.
   parameters.codecs[1] = kCn8000Codec;
@@ -1876,7 +1872,7 @@
   {
     const auto& send_codec_spec = *GetSendStreamConfig(kSsrcX).send_codec_spec;
     EXPECT_STRCASEEQ("ISAC", send_codec_spec.format.name.c_str());
-    EXPECT_EQ(rtc::Optional<int>(), send_codec_spec.cng_payload_type);
+    EXPECT_EQ(rtc::nullopt, send_codec_spec.cng_payload_type);
   }
 }
 
@@ -2070,7 +2066,7 @@
     const auto& send_codec_spec =
         *call_.GetAudioSendStream(ssrc)->GetConfig().send_codec_spec;
     EXPECT_STRCASEEQ("PCMU", send_codec_spec.format.name.c_str());
-    EXPECT_EQ(rtc::Optional<int>(), send_codec_spec.cng_payload_type);
+    EXPECT_EQ(rtc::nullopt, send_codec_spec.cng_payload_type);
   }
 }
 
@@ -2205,7 +2201,7 @@
 // and start sending on it.
 TEST_F(WebRtcVoiceEngineTestFake, CodianSend) {
   EXPECT_TRUE(SetupSendStream());
-  send_parameters_.options.adjust_agc_delta = rtc::Optional<int>(-10);
+  send_parameters_.options.adjust_agc_delta = -10;
   EXPECT_CALL(apm_gc_,
               set_target_level_dbfs(11)).Times(2).WillRepeatedly(Return(0));
   SetSendParameters(send_parameters_);
@@ -2221,11 +2217,10 @@
               BuiltInAGCIsAvailable()).Times(2).WillRepeatedly(Return(false));
   EXPECT_CALL(adm_, SetAGC(true)).Times(2).WillRepeatedly(Return(0));
   EXPECT_CALL(apm_gc_, Enable(true)).Times(2).WillOnce(Return(0));
-  send_parameters_.options.tx_agc_target_dbov = rtc::Optional<uint16_t>(3);
-  send_parameters_.options.tx_agc_digital_compression_gain =
-      rtc::Optional<uint16_t>(9);
-  send_parameters_.options.tx_agc_limiter = rtc::Optional<bool>(true);
-  send_parameters_.options.auto_gain_control = rtc::Optional<bool>(true);
+  send_parameters_.options.tx_agc_target_dbov = 3;
+  send_parameters_.options.tx_agc_digital_compression_gain = 9;
+  send_parameters_.options.tx_agc_limiter = true;
+  send_parameters_.options.auto_gain_control = true;
   EXPECT_CALL(apm_gc_, set_target_level_dbfs(3)).WillOnce(Return(0));
   EXPECT_CALL(apm_gc_, set_compression_gain_db(9)).WillRepeatedly(Return(0));
   EXPECT_CALL(apm_gc_, enable_limiter(true)).WillRepeatedly(Return(0));
@@ -2233,16 +2228,15 @@
 
   // Check interaction with adjust_agc_delta. Both should be respected, for
   // backwards compatibility.
-  send_parameters_.options.adjust_agc_delta = rtc::Optional<int>(-10);
+  send_parameters_.options.adjust_agc_delta = -10;
   EXPECT_CALL(apm_gc_, set_target_level_dbfs(13)).WillOnce(Return(0));
   SetSendParameters(send_parameters_);
 }
 
 TEST_F(WebRtcVoiceEngineTestFake, SetAudioNetworkAdaptorViaOptions) {
   EXPECT_TRUE(SetupSendStream());
-  send_parameters_.options.audio_network_adaptor = rtc::Optional<bool>(true);
-  send_parameters_.options.audio_network_adaptor_config =
-      rtc::Optional<std::string>("1234");
+  send_parameters_.options.audio_network_adaptor = true;
+  send_parameters_.options.audio_network_adaptor_config = {"1234"};
   SetSendParameters(send_parameters_);
   EXPECT_EQ(send_parameters_.options.audio_network_adaptor_config,
             GetAudioNetworkAdaptorConfig(kSsrcX));
@@ -2250,29 +2244,27 @@
 
 TEST_F(WebRtcVoiceEngineTestFake, AudioSendResetAudioNetworkAdaptor) {
   EXPECT_TRUE(SetupSendStream());
-  send_parameters_.options.audio_network_adaptor = rtc::Optional<bool>(true);
-  send_parameters_.options.audio_network_adaptor_config =
-      rtc::Optional<std::string>("1234");
+  send_parameters_.options.audio_network_adaptor = true;
+  send_parameters_.options.audio_network_adaptor_config = {"1234"};
   SetSendParameters(send_parameters_);
   EXPECT_EQ(send_parameters_.options.audio_network_adaptor_config,
             GetAudioNetworkAdaptorConfig(kSsrcX));
   cricket::AudioOptions options;
-  options.audio_network_adaptor = rtc::Optional<bool>(false);
+  options.audio_network_adaptor = false;
   SetAudioSend(kSsrcX, true, nullptr, &options);
-  EXPECT_EQ(rtc::Optional<std::string>(), GetAudioNetworkAdaptorConfig(kSsrcX));
+  EXPECT_EQ(rtc::nullopt, GetAudioNetworkAdaptorConfig(kSsrcX));
 }
 
 TEST_F(WebRtcVoiceEngineTestFake, AudioNetworkAdaptorNotGetOverridden) {
   EXPECT_TRUE(SetupSendStream());
-  send_parameters_.options.audio_network_adaptor = rtc::Optional<bool>(true);
-  send_parameters_.options.audio_network_adaptor_config =
-      rtc::Optional<std::string>("1234");
+  send_parameters_.options.audio_network_adaptor = true;
+  send_parameters_.options.audio_network_adaptor_config = {"1234"};
   SetSendParameters(send_parameters_);
   EXPECT_EQ(send_parameters_.options.audio_network_adaptor_config,
             GetAudioNetworkAdaptorConfig(kSsrcX));
   const int initial_num = call_.GetNumCreatedSendStreams();
   cricket::AudioOptions options;
-  options.audio_network_adaptor = rtc::Optional<bool>();
+  options.audio_network_adaptor = rtc::nullopt;
   // Unvalued |options.audio_network_adaptor|.should not reset audio network
   // adaptor.
   SetAudioSend(kSsrcX, true, nullptr, &options);
@@ -2312,9 +2304,8 @@
   EXPECT_EQ(kOpusBitrateFbBps + kMinOverheadBps,
             GetSendStreamConfig(kSsrcX).max_bitrate_bps);
 
-  parameters.options.audio_network_adaptor = rtc::Optional<bool>(true);
-  parameters.options.audio_network_adaptor_config =
-      rtc::Optional<std::string>("1234");
+  parameters.options.audio_network_adaptor = true;
+  parameters.options.audio_network_adaptor_config = {"1234"};
   SetSendParameters(parameters);
 
   constexpr int kMinOverheadWithAnaBps =
@@ -2342,8 +2333,7 @@
   EXPECT_FALSE(rtp_parameters.encodings[0].max_bitrate_bps);
 
   constexpr int kMaxBitrateBps = 6000;
-  rtp_parameters.encodings[0].max_bitrate_bps =
-      rtc::Optional<int>(kMaxBitrateBps);
+  rtp_parameters.encodings[0].max_bitrate_bps = kMaxBitrateBps;
   EXPECT_TRUE(channel_->SetRtpSendParameters(kSsrcX, rtp_parameters));
 
   const int max_bitrate = GetSendStreamConfig(kSsrcX).max_bitrate_bps;
@@ -2745,35 +2735,35 @@
   // Turn echo cancellation off
   EXPECT_CALL(apm_ec_, Enable(false)).WillOnce(Return(0));
   EXPECT_CALL(apm_ec_, enable_metrics(false)).WillOnce(Return(0));
-  send_parameters_.options.echo_cancellation = rtc::Optional<bool>(false);
+  send_parameters_.options.echo_cancellation = false;
   SetSendParameters(send_parameters_);
 
   // Turn echo cancellation back on, with settings, and make sure
   // nothing else changed.
   EXPECT_CALL(apm_ec_, Enable(true)).WillOnce(Return(0));
   EXPECT_CALL(apm_ec_, enable_metrics(true)).WillOnce(Return(0));
-  send_parameters_.options.echo_cancellation = rtc::Optional<bool>(true);
+  send_parameters_.options.echo_cancellation = true;
   SetSendParameters(send_parameters_);
 
   // Turn on delay agnostic aec and make sure nothing change w.r.t. echo
   // control.
   EXPECT_CALL(apm_ec_, Enable(true)).WillOnce(Return(0));
   EXPECT_CALL(apm_ec_, enable_metrics(true)).WillOnce(Return(0));
-  send_parameters_.options.delay_agnostic_aec = rtc::Optional<bool>(true);
+  send_parameters_.options.delay_agnostic_aec = true;
   SetSendParameters(send_parameters_);
 
   // Turn off echo cancellation and delay agnostic aec.
   EXPECT_CALL(apm_ec_, Enable(false)).WillOnce(Return(0));
   EXPECT_CALL(apm_ec_, enable_metrics(false)).WillOnce(Return(0));
-  send_parameters_.options.delay_agnostic_aec = rtc::Optional<bool>(false);
-  send_parameters_.options.extended_filter_aec = rtc::Optional<bool>(false);
-  send_parameters_.options.echo_cancellation = rtc::Optional<bool>(false);
+  send_parameters_.options.delay_agnostic_aec = false;
+  send_parameters_.options.extended_filter_aec = false;
+  send_parameters_.options.echo_cancellation = false;
   SetSendParameters(send_parameters_);
 
   // Turning delay agnostic aec back on should also turn on echo cancellation.
   EXPECT_CALL(apm_ec_, Enable(true)).WillOnce(Return(0));
   EXPECT_CALL(apm_ec_, enable_metrics(true)).WillOnce(Return(0));
-  send_parameters_.options.delay_agnostic_aec = rtc::Optional<bool>(true);
+  send_parameters_.options.delay_agnostic_aec = true;
   SetSendParameters(send_parameters_);
 
   // Turn off AGC
@@ -2781,7 +2771,7 @@
   EXPECT_CALL(apm_ec_, Enable(true)).WillOnce(Return(0));
   EXPECT_CALL(apm_ec_, enable_metrics(true)).WillOnce(Return(0));
   EXPECT_CALL(apm_gc_, Enable(false)).WillOnce(Return(0));
-  send_parameters_.options.auto_gain_control = rtc::Optional<bool>(false);
+  send_parameters_.options.auto_gain_control = false;
   SetSendParameters(send_parameters_);
 
   // Turn AGC back on
@@ -2789,8 +2779,8 @@
   EXPECT_CALL(apm_ec_, Enable(true)).WillOnce(Return(0));
   EXPECT_CALL(apm_ec_, enable_metrics(true)).WillOnce(Return(0));
   EXPECT_CALL(apm_gc_, Enable(true)).WillOnce(Return(0));
-  send_parameters_.options.auto_gain_control = rtc::Optional<bool>(true);
-  send_parameters_.options.adjust_agc_delta = rtc::Optional<int>();
+  send_parameters_.options.auto_gain_control = true;
+  send_parameters_.options.adjust_agc_delta = rtc::nullopt;
   SetSendParameters(send_parameters_);
 
   // Turn off other options (and stereo swapping on).
@@ -2801,10 +2791,10 @@
   EXPECT_CALL(apm_ns_, Enable(false)).WillOnce(Return(0));
   EXPECT_CALL(apm_vd_, Enable(false)).WillOnce(Return(0));
   EXPECT_CALL(transmit_mixer_, EnableStereoChannelSwapping(true));
-  send_parameters_.options.noise_suppression = rtc::Optional<bool>(false);
-  send_parameters_.options.highpass_filter = rtc::Optional<bool>(false);
-  send_parameters_.options.typing_detection = rtc::Optional<bool>(false);
-  send_parameters_.options.stereo_swapping = rtc::Optional<bool>(true);
+  send_parameters_.options.noise_suppression = false;
+  send_parameters_.options.highpass_filter = false;
+  send_parameters_.options.typing_detection = false;
+  send_parameters_.options.stereo_swapping = true;
   SetSendParameters(send_parameters_);
   EXPECT_FALSE(IsHighPassFilterEnabled());
 
@@ -2857,9 +2847,9 @@
 
   // AEC and AGC and NS
   cricket::AudioSendParameters parameters_options_all = send_parameters_;
-  parameters_options_all.options.echo_cancellation = rtc::Optional<bool>(true);
-  parameters_options_all.options.auto_gain_control = rtc::Optional<bool>(true);
-  parameters_options_all.options.noise_suppression = rtc::Optional<bool>(true);
+  parameters_options_all.options.echo_cancellation = true;
+  parameters_options_all.options.auto_gain_control = true;
+  parameters_options_all.options.noise_suppression = true;
   EXPECT_CALL(adm_, SetAGC(true)).Times(2).WillRepeatedly(Return(0));
   EXPECT_CALL(apm_ec_, Enable(true)).Times(2).WillRepeatedly(Return(0));
   EXPECT_CALL(apm_ec_, enable_metrics(true)).Times(2).WillRepeatedly(Return(0));
@@ -2872,8 +2862,7 @@
 
   // unset NS
   cricket::AudioSendParameters parameters_options_no_ns = send_parameters_;
-  parameters_options_no_ns.options.noise_suppression =
-      rtc::Optional<bool>(false);
+  parameters_options_no_ns.options.noise_suppression = false;
   EXPECT_CALL(adm_, SetAGC(true)).WillOnce(Return(0));
   EXPECT_CALL(apm_ec_, Enable(true)).WillOnce(Return(0));
   EXPECT_CALL(apm_ec_, enable_metrics(true)).WillOnce(Return(0));
@@ -2881,24 +2870,23 @@
   EXPECT_CALL(apm_ns_, Enable(false)).WillOnce(Return(0));
   EXPECT_TRUE(channel1->SetSendParameters(parameters_options_no_ns));
   cricket::AudioOptions expected_options = parameters_options_all.options;
-  expected_options.echo_cancellation = rtc::Optional<bool>(true);
-  expected_options.auto_gain_control = rtc::Optional<bool>(true);
-  expected_options.noise_suppression = rtc::Optional<bool>(false);
+  expected_options.echo_cancellation = true;
+  expected_options.auto_gain_control = true;
+  expected_options.noise_suppression = false;
   EXPECT_EQ(expected_options, channel1->options());
 
   // unset AGC
   cricket::AudioSendParameters parameters_options_no_agc = send_parameters_;
-  parameters_options_no_agc.options.auto_gain_control =
-      rtc::Optional<bool>(false);
+  parameters_options_no_agc.options.auto_gain_control = false;
   EXPECT_CALL(adm_, SetAGC(false)).WillOnce(Return(0));
   EXPECT_CALL(apm_ec_, Enable(true)).WillOnce(Return(0));
   EXPECT_CALL(apm_ec_, enable_metrics(true)).WillOnce(Return(0));
   EXPECT_CALL(apm_gc_, Enable(false)).WillOnce(Return(0));
   EXPECT_CALL(apm_ns_, Enable(true)).WillOnce(Return(0));
   EXPECT_TRUE(channel2->SetSendParameters(parameters_options_no_agc));
-  expected_options.echo_cancellation = rtc::Optional<bool>(true);
-  expected_options.auto_gain_control = rtc::Optional<bool>(false);
-  expected_options.noise_suppression = rtc::Optional<bool>(true);
+  expected_options.echo_cancellation = true;
+  expected_options.auto_gain_control = false;
+  expected_options.noise_suppression = true;
   EXPECT_EQ(expected_options, channel2->options());
 
   EXPECT_CALL(adm_, SetAGC(true)).WillOnce(Return(0));
@@ -2925,19 +2913,17 @@
   // Make sure settings take effect while we are sending.
   cricket::AudioSendParameters parameters_options_no_agc_nor_ns =
       send_parameters_;
-  parameters_options_no_agc_nor_ns.options.auto_gain_control =
-      rtc::Optional<bool>(false);
-  parameters_options_no_agc_nor_ns.options.noise_suppression =
-      rtc::Optional<bool>(false);
+  parameters_options_no_agc_nor_ns.options.auto_gain_control = false;
+  parameters_options_no_agc_nor_ns.options.noise_suppression = false;
   EXPECT_CALL(adm_, SetAGC(false)).WillOnce(Return(0));
   EXPECT_CALL(apm_ec_, Enable(true)).WillOnce(Return(0));
   EXPECT_CALL(apm_ec_, enable_metrics(true)).WillOnce(Return(0));
   EXPECT_CALL(apm_gc_, Enable(false)).WillOnce(Return(0));
   EXPECT_CALL(apm_ns_, Enable(false)).WillOnce(Return(0));
   EXPECT_TRUE(channel2->SetSendParameters(parameters_options_no_agc_nor_ns));
-  expected_options.echo_cancellation = rtc::Optional<bool>(true);
-  expected_options.auto_gain_control = rtc::Optional<bool>(false);
-  expected_options.noise_suppression = rtc::Optional<bool>(false);
+  expected_options.echo_cancellation = true;
+  expected_options.auto_gain_control = false;
+  expected_options.noise_suppression = false;
   EXPECT_EQ(expected_options, channel2->options());
 }