diff --git a/webrtc/api/android/jni/androidmediaencoder_jni.cc b/webrtc/api/android/jni/androidmediaencoder_jni.cc
index 92b5aae..3361154 100644
--- a/webrtc/api/android/jni/androidmediaencoder_jni.cc
+++ b/webrtc/api/android/jni/androidmediaencoder_jni.cc
@@ -404,7 +404,7 @@
   // TODO(pbos): Extract automaticResizeOn out of VP8 settings.
   scale_ = false;
   if (codecType_ == kVideoCodecVP8) {
-    scale_ = codec_settings->codecSpecific.VP8.automaticResizeOn;
+    scale_ = codec_settings->VP8().automaticResizeOn;
   } else if (codecType_ != kVideoCodecVP9) {
     scale_ = true;
   }
diff --git a/webrtc/common_types.cc b/webrtc/common_types.cc
index e78a4aa..8238443 100644
--- a/webrtc/common_types.cc
+++ b/webrtc/common_types.cc
@@ -59,36 +59,36 @@
       simulcastStream(),
       spatialLayers(),
       mode(kRealtimeVideo),
-      codecSpecific() {}
+      codec_specific_() {}
 
 VideoCodecVP8* VideoCodec::VP8() {
   RTC_DCHECK_EQ(codecType, kVideoCodecVP8);
-  return &codecSpecific.VP8;
+  return &codec_specific_.VP8;
 }
 
 const VideoCodecVP8& VideoCodec::VP8() const {
   RTC_DCHECK_EQ(codecType, kVideoCodecVP8);
-  return codecSpecific.VP8;
+  return codec_specific_.VP8;
 }
 
 VideoCodecVP9* VideoCodec::VP9() {
   RTC_DCHECK_EQ(codecType, kVideoCodecVP9);
-  return &codecSpecific.VP9;
+  return &codec_specific_.VP9;
 }
 
 const VideoCodecVP9& VideoCodec::VP9() const {
   RTC_DCHECK_EQ(codecType, kVideoCodecVP9);
-  return codecSpecific.VP9;
+  return codec_specific_.VP9;
 }
 
 VideoCodecH264* VideoCodec::H264() {
   RTC_DCHECK_EQ(codecType, kVideoCodecH264);
-  return &codecSpecific.H264;
+  return &codec_specific_.H264;
 }
 
 const VideoCodecH264& VideoCodec::H264() const {
   RTC_DCHECK_EQ(codecType, kVideoCodecH264);
-  return codecSpecific.H264;
+  return codec_specific_.H264;
 }
 
 }  // namespace webrtc
diff --git a/webrtc/common_types.h b/webrtc/common_types.h
index 24ba00a..d4f2f90 100644
--- a/webrtc/common_types.h
+++ b/webrtc/common_types.h
@@ -632,11 +632,10 @@
   VideoCodecH264* H264();
   const VideoCodecH264& H264() const;
 
-  // This variable will be declared private and renamed to codec_specific_
-  // once Chromium is not accessing it.
+ private:
   // TODO(hta): Consider replacing the union with a pointer type.
   // This will allow removing the VideoCodec* types from this file.
-  VideoCodecUnion codecSpecific;
+  VideoCodecUnion codec_specific_;
 };
 
 // Bandwidth over-use detector options.  These are used to drive
diff --git a/webrtc/config.cc b/webrtc/config.cc
index 281b89f..4b437e2 100644
--- a/webrtc/config.cc
+++ b/webrtc/config.cc
@@ -167,11 +167,11 @@
 void VideoEncoderConfig::EncoderSpecificSettings::FillEncoderSpecificSettings(
     VideoCodec* codec) const {
   if (codec->codecType == kVideoCodecH264) {
-    FillVideoCodecH264(&codec->codecSpecific.H264);
+    FillVideoCodecH264(codec->H264());
   } else if (codec->codecType == kVideoCodecVP8) {
-    FillVideoCodecVp8(&codec->codecSpecific.VP8);
+    FillVideoCodecVp8(codec->VP8());
   } else if (codec->codecType == kVideoCodecVP9) {
-    FillVideoCodecVp9(&codec->codecSpecific.VP9);
+    FillVideoCodecVp9(codec->VP9());
   } else {
     RTC_NOTREACHED() << "Encoder specifics set/used for unknown codec type.";
   }
diff --git a/webrtc/video/vie_encoder.cc b/webrtc/video/vie_encoder.cc
index 7cc799a..a1709bf 100644
--- a/webrtc/video/vie_encoder.cc
+++ b/webrtc/video/vie_encoder.cc
@@ -74,30 +74,28 @@
   switch (video_codec.codecType) {
     case kVideoCodecVP8: {
       if (!config.encoder_specific_settings)
-        video_codec.codecSpecific.VP8 = VideoEncoder::GetDefaultVp8Settings();
-      video_codec.codecSpecific.VP8.numberOfTemporalLayers =
-          static_cast<unsigned char>(
-              streams.back().temporal_layer_thresholds_bps.size() + 1);
+        *video_codec.VP8() = VideoEncoder::GetDefaultVp8Settings();
+      video_codec.VP8()->numberOfTemporalLayers = static_cast<unsigned char>(
+          streams.back().temporal_layer_thresholds_bps.size() + 1);
       break;
     }
     case kVideoCodecVP9: {
       if (!config.encoder_specific_settings)
-        video_codec.codecSpecific.VP9 = VideoEncoder::GetDefaultVp9Settings();
+        *video_codec.VP9() = VideoEncoder::GetDefaultVp9Settings();
       if (video_codec.mode == kScreensharing &&
           config.encoder_specific_settings) {
-        video_codec.codecSpecific.VP9.flexibleMode = true;
+        video_codec.VP9()->flexibleMode = true;
         // For now VP9 screensharing use 1 temporal and 2 spatial layers.
-        RTC_DCHECK_EQ(1, video_codec.codecSpecific.VP9.numberOfTemporalLayers);
-        RTC_DCHECK_EQ(2, video_codec.codecSpecific.VP9.numberOfSpatialLayers);
+        RTC_DCHECK_EQ(1, video_codec.VP9()->numberOfTemporalLayers);
+        RTC_DCHECK_EQ(2, video_codec.VP9()->numberOfSpatialLayers);
       }
-      video_codec.codecSpecific.VP9.numberOfTemporalLayers =
-          static_cast<unsigned char>(
-              streams.back().temporal_layer_thresholds_bps.size() + 1);
+      video_codec.VP9()->numberOfTemporalLayers = static_cast<unsigned char>(
+          streams.back().temporal_layer_thresholds_bps.size() + 1);
       break;
     }
     case kVideoCodecH264: {
       if (!config.encoder_specific_settings)
-        video_codec.codecSpecific.H264 = VideoEncoder::GetDefaultH264Settings();
+        *video_codec.H264() = VideoEncoder::GetDefaultH264Settings();
       break;
     }
     default:
@@ -120,8 +118,8 @@
     // If the vector is empty, bitrates will be configured automatically.
     RTC_DCHECK(config.spatial_layers.empty() ||
                config.spatial_layers.size() ==
-                   video_codec.codecSpecific.VP9.numberOfSpatialLayers);
-    RTC_DCHECK_LE(video_codec.codecSpecific.VP9.numberOfSpatialLayers,
+                   video_codec.VP9()->numberOfSpatialLayers);
+    RTC_DCHECK_LE(video_codec.VP9()->numberOfSpatialLayers,
                   kMaxSimulcastStreams);
     for (size_t i = 0; i < config.spatial_layers.size(); ++i)
       video_codec.spatialLayers[i] = config.spatial_layers[i];
@@ -663,19 +661,15 @@
     webrtc::CodecSpecificInfo codec_specific_info;
     codec_specific_info.codecType = webrtc::kVideoCodecVP8;
 
-      codec_specific_info.codecSpecific.VP8.hasReceivedRPSI =
-          has_received_rpsi_;
-      codec_specific_info.codecSpecific.VP8.hasReceivedSLI =
-          has_received_sli_;
-      codec_specific_info.codecSpecific.VP8.pictureIdRPSI =
-          picture_id_rpsi_;
-      codec_specific_info.codecSpecific.VP8.pictureIdSLI  =
-          picture_id_sli_;
-      has_received_sli_ = false;
-      has_received_rpsi_ = false;
+    codec_specific_info.codecSpecific.VP8.hasReceivedRPSI = has_received_rpsi_;
+    codec_specific_info.codecSpecific.VP8.hasReceivedSLI = has_received_sli_;
+    codec_specific_info.codecSpecific.VP8.pictureIdRPSI = picture_id_rpsi_;
+    codec_specific_info.codecSpecific.VP8.pictureIdSLI = picture_id_sli_;
+    has_received_sli_ = false;
+    has_received_rpsi_ = false;
 
-      video_sender_.AddVideoFrame(video_frame, &codec_specific_info);
-      return;
+    video_sender_.AddVideoFrame(video_frame, &codec_specific_info);
+    return;
   }
   video_sender_.AddVideoFrame(video_frame, nullptr);
 }
