Remove RTPVideoHeader::vp8() accessors.

Bug: none
Change-Id: Ia7d65148fb36a8f26647bee8a876ce7217ff8a68
Reviewed-on: https://webrtc-review.googlesource.com/93321
Reviewed-by: Niels Moller <nisse@webrtc.org>
Reviewed-by: Stefan Holmer <stefan@webrtc.org>
Reviewed-by: Danil Chapovalov <danilchap@webrtc.org>
Commit-Queue: Philip Eliasson <philipel@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24626}
diff --git a/modules/video_coding/decoding_state_unittest.cc b/modules/video_coding/decoding_state_unittest.cc
index 0049ca7..82c6f12 100644
--- a/modules/video_coding/decoding_state_unittest.cc
+++ b/modules/video_coding/decoding_state_unittest.cc
@@ -37,7 +37,9 @@
   packet.seqNum = 0xffff;
   packet.frameType = kVideoFrameDelta;
   packet.video_header.codec = kVideoCodecVP8;
-  packet.video_header.vp8().pictureId = 0x007F;
+  auto& vp8_header =
+      packet.video_header.video_type_header.emplace<RTPVideoHeaderVP8>();
+  vp8_header.pictureId = 0x007F;
   FrameData frame_data;
   frame_data.rtt_ms = 0;
   frame_data.rolling_average_packets_per_frame = -1;
@@ -53,17 +55,17 @@
   packet.frameType = kVideoFrameDelta;
   // Use pictureId
   packet.is_first_packet_in_frame = false;
-  packet.video_header.vp8().pictureId = 0x0002;
+  vp8_header.pictureId = 0x0002;
   EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
   EXPECT_FALSE(dec_state.ContinuousFrame(&frame));
   frame.Reset();
-  packet.video_header.vp8().pictureId = 0;
+  vp8_header.pictureId = 0;
   packet.seqNum = 10;
   EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
   EXPECT_TRUE(dec_state.ContinuousFrame(&frame));
 
   // Use sequence numbers.
-  packet.video_header.vp8().pictureId = kNoPictureId;
+  vp8_header.pictureId = kNoPictureId;
   frame.Reset();
   packet.seqNum = dec_state.sequence_num() - 1u;
   EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
@@ -82,9 +84,9 @@
   // Insert packet with temporal info.
   dec_state.Reset();
   frame.Reset();
-  packet.video_header.vp8().tl0PicIdx = 0;
-  packet.video_header.vp8().temporalIdx = 0;
-  packet.video_header.vp8().pictureId = 0;
+  vp8_header.tl0PicIdx = 0;
+  vp8_header.temporalIdx = 0;
+  vp8_header.pictureId = 0;
   packet.seqNum = 1;
   packet.timestamp = 1;
   EXPECT_TRUE(dec_state.full_sync());
@@ -93,9 +95,9 @@
   EXPECT_TRUE(dec_state.full_sync());
   frame.Reset();
   // 1 layer up - still good.
-  packet.video_header.vp8().tl0PicIdx = 0;
-  packet.video_header.vp8().temporalIdx = 1;
-  packet.video_header.vp8().pictureId = 1;
+  vp8_header.tl0PicIdx = 0;
+  vp8_header.temporalIdx = 1;
+  vp8_header.pictureId = 1;
   packet.seqNum = 2;
   packet.timestamp = 2;
   EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
@@ -104,18 +106,18 @@
   EXPECT_TRUE(dec_state.full_sync());
   frame.Reset();
   // Lost non-base layer packet => should update sync parameter.
-  packet.video_header.vp8().tl0PicIdx = 0;
-  packet.video_header.vp8().temporalIdx = 3;
-  packet.video_header.vp8().pictureId = 3;
+  vp8_header.tl0PicIdx = 0;
+  vp8_header.temporalIdx = 3;
+  vp8_header.pictureId = 3;
   packet.seqNum = 4;
   packet.timestamp = 4;
   EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
   EXPECT_FALSE(dec_state.ContinuousFrame(&frame));
   // Now insert the next non-base layer (belonging to a next tl0PicId).
   frame.Reset();
-  packet.video_header.vp8().tl0PicIdx = 1;
-  packet.video_header.vp8().temporalIdx = 2;
-  packet.video_header.vp8().pictureId = 4;
+  vp8_header.tl0PicIdx = 1;
+  vp8_header.temporalIdx = 2;
+  vp8_header.pictureId = 4;
   packet.seqNum = 5;
   packet.timestamp = 5;
   EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
@@ -125,9 +127,9 @@
   EXPECT_TRUE(dec_state.full_sync());
   // Next base layer (dropped interim non-base layers) - should update sync.
   frame.Reset();
-  packet.video_header.vp8().tl0PicIdx = 1;
-  packet.video_header.vp8().temporalIdx = 0;
-  packet.video_header.vp8().pictureId = 5;
+  vp8_header.tl0PicIdx = 1;
+  vp8_header.temporalIdx = 0;
+  vp8_header.pictureId = 5;
   packet.seqNum = 6;
   packet.timestamp = 6;
   EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
@@ -137,18 +139,18 @@
 
   // Check wrap for temporal layers.
   frame.Reset();
-  packet.video_header.vp8().tl0PicIdx = 0x00FF;
-  packet.video_header.vp8().temporalIdx = 0;
-  packet.video_header.vp8().pictureId = 6;
+  vp8_header.tl0PicIdx = 0x00FF;
+  vp8_header.temporalIdx = 0;
+  vp8_header.pictureId = 6;
   packet.seqNum = 7;
   packet.timestamp = 7;
   EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
   dec_state.SetState(&frame);
   EXPECT_FALSE(dec_state.full_sync());
   frame.Reset();
-  packet.video_header.vp8().tl0PicIdx = 0x0000;
-  packet.video_header.vp8().temporalIdx = 0;
-  packet.video_header.vp8().pictureId = 7;
+  vp8_header.tl0PicIdx = 0x0000;
+  vp8_header.temporalIdx = 0;
+  vp8_header.pictureId = 7;
   packet.seqNum = 8;
   packet.timestamp = 8;
   EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
@@ -214,9 +216,11 @@
   packet.video_header.codec = kVideoCodecVP8;
   packet.timestamp = 0;
   packet.seqNum = 0;
-  packet.video_header.vp8().tl0PicIdx = 0;
-  packet.video_header.vp8().temporalIdx = 0;
-  packet.video_header.vp8().pictureId = 0;
+  auto& vp8_header =
+      packet.video_header.video_type_header.emplace<RTPVideoHeaderVP8>();
+  vp8_header.tl0PicIdx = 0;
+  vp8_header.temporalIdx = 0;
+  vp8_header.pictureId = 0;
   FrameData frame_data;
   frame_data.rtt_ms = 0;
   frame_data.rolling_average_packets_per_frame = -1;
@@ -226,9 +230,9 @@
   frame.Reset();
   packet.timestamp = 1;
   packet.seqNum = 1;
-  packet.video_header.vp8().tl0PicIdx = 0;
-  packet.video_header.vp8().temporalIdx = 1;
-  packet.video_header.vp8().pictureId = 1;
+  vp8_header.tl0PicIdx = 0;
+  vp8_header.temporalIdx = 1;
+  vp8_header.pictureId = 1;
   EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
   EXPECT_TRUE(dec_state.ContinuousFrame(&frame));
   dec_state.SetState(&frame);
@@ -238,9 +242,9 @@
   frame.Reset();
   packet.timestamp = 3;
   packet.seqNum = 3;
-  packet.video_header.vp8().tl0PicIdx = 0;
-  packet.video_header.vp8().temporalIdx = 3;
-  packet.video_header.vp8().pictureId = 3;
+  vp8_header.tl0PicIdx = 0;
+  vp8_header.temporalIdx = 3;
+  vp8_header.pictureId = 3;
   EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
   EXPECT_FALSE(dec_state.ContinuousFrame(&frame));
   dec_state.SetState(&frame);
@@ -249,9 +253,9 @@
   frame.Reset();
   packet.timestamp = 4;
   packet.seqNum = 4;
-  packet.video_header.vp8().tl0PicIdx = 1;
-  packet.video_header.vp8().temporalIdx = 0;
-  packet.video_header.vp8().pictureId = 4;
+  vp8_header.tl0PicIdx = 1;
+  vp8_header.temporalIdx = 0;
+  vp8_header.pictureId = 4;
   EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
   EXPECT_TRUE(dec_state.ContinuousFrame(&frame));
   dec_state.SetState(&frame);
@@ -263,9 +267,9 @@
   packet.is_first_packet_in_frame = 1;
   packet.timestamp = 5;
   packet.seqNum = 5;
-  packet.video_header.vp8().tl0PicIdx = 2;
-  packet.video_header.vp8().temporalIdx = 0;
-  packet.video_header.vp8().pictureId = 5;
+  vp8_header.tl0PicIdx = 2;
+  vp8_header.temporalIdx = 0;
+  vp8_header.pictureId = 5;
   EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
   EXPECT_TRUE(dec_state.ContinuousFrame(&frame));
   dec_state.SetState(&frame);
@@ -276,9 +280,9 @@
   packet.frameType = kVideoFrameDelta;
   packet.timestamp = 6;
   packet.seqNum = 6;
-  packet.video_header.vp8().tl0PicIdx = 3;
-  packet.video_header.vp8().temporalIdx = 0;
-  packet.video_header.vp8().pictureId = 6;
+  vp8_header.tl0PicIdx = 3;
+  vp8_header.temporalIdx = 0;
+  vp8_header.pictureId = 6;
   EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
   EXPECT_TRUE(dec_state.ContinuousFrame(&frame));
   EXPECT_TRUE(dec_state.full_sync());
@@ -287,9 +291,9 @@
   packet.is_first_packet_in_frame = 1;
   packet.timestamp = 8;
   packet.seqNum = 8;
-  packet.video_header.vp8().tl0PicIdx = 4;
-  packet.video_header.vp8().temporalIdx = 0;
-  packet.video_header.vp8().pictureId = 8;
+  vp8_header.tl0PicIdx = 4;
+  vp8_header.temporalIdx = 0;
+  vp8_header.pictureId = 8;
   EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
   EXPECT_FALSE(dec_state.ContinuousFrame(&frame));
   EXPECT_TRUE(dec_state.full_sync());
@@ -302,10 +306,10 @@
   packet.is_first_packet_in_frame = 1;
   packet.timestamp = 9;
   packet.seqNum = 9;
-  packet.video_header.vp8().tl0PicIdx = 4;
-  packet.video_header.vp8().temporalIdx = 2;
-  packet.video_header.vp8().pictureId = 9;
-  packet.video_header.vp8().layerSync = true;
+  vp8_header.tl0PicIdx = 4;
+  vp8_header.temporalIdx = 2;
+  vp8_header.pictureId = 9;
+  vp8_header.layerSync = true;
   EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
   dec_state.SetState(&frame);
   EXPECT_TRUE(dec_state.full_sync());
@@ -323,10 +327,10 @@
   packet.markerBit = 1;
   packet.timestamp = 0;
   packet.seqNum = 0;
-  packet.video_header.vp8().tl0PicIdx = 0;
-  packet.video_header.vp8().temporalIdx = 0;
-  packet.video_header.vp8().pictureId = 0;
-  packet.video_header.vp8().layerSync = false;
+  vp8_header.tl0PicIdx = 0;
+  vp8_header.temporalIdx = 0;
+  vp8_header.pictureId = 0;
+  vp8_header.layerSync = false;
   EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
   dec_state.SetState(&frame);
   EXPECT_TRUE(dec_state.full_sync());
@@ -337,10 +341,10 @@
   packet.markerBit = 0;
   packet.timestamp = 1;
   packet.seqNum = 1;
-  packet.video_header.vp8().tl0PicIdx = 0;
-  packet.video_header.vp8().temporalIdx = 2;
-  packet.video_header.vp8().pictureId = 1;
-  packet.video_header.vp8().layerSync = true;
+  vp8_header.tl0PicIdx = 0;
+  vp8_header.temporalIdx = 2;
+  vp8_header.pictureId = 1;
+  vp8_header.layerSync = true;
   EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
   EXPECT_TRUE(dec_state.ContinuousFrame(&frame));
   // Layer 1
@@ -350,10 +354,10 @@
   packet.markerBit = 1;
   packet.timestamp = 2;
   packet.seqNum = 3;
-  packet.video_header.vp8().tl0PicIdx = 0;
-  packet.video_header.vp8().temporalIdx = 1;
-  packet.video_header.vp8().pictureId = 2;
-  packet.video_header.vp8().layerSync = true;
+  vp8_header.tl0PicIdx = 0;
+  vp8_header.temporalIdx = 1;
+  vp8_header.pictureId = 2;
+  vp8_header.layerSync = true;
   EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
   EXPECT_FALSE(dec_state.ContinuousFrame(&frame));
   EXPECT_TRUE(dec_state.full_sync());
@@ -368,9 +372,11 @@
   packet.video_header.codec = kVideoCodecVP8;
   packet.timestamp = 0;
   packet.seqNum = 0;
-  packet.video_header.vp8().tl0PicIdx = 0;
-  packet.video_header.vp8().temporalIdx = 0;
-  packet.video_header.vp8().pictureId = 0;
+  auto& vp8_header =
+      packet.video_header.video_type_header.emplace<RTPVideoHeaderVP8>();
+  vp8_header.tl0PicIdx = 0;
+  vp8_header.temporalIdx = 0;
+  vp8_header.pictureId = 0;
   FrameData frame_data;
   frame_data.rtt_ms = 0;
   frame_data.rolling_average_packets_per_frame = -1;
@@ -384,8 +390,8 @@
   packet.frameType = kVideoFrameDelta;
   packet.timestamp += 3000;
   ++packet.seqNum;
-  packet.video_header.vp8().temporalIdx = 1;
-  packet.video_header.vp8().pictureId = 2;
+  vp8_header.temporalIdx = 1;
+  vp8_header.pictureId = 2;
   EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
   EXPECT_FALSE(dec_state.ContinuousFrame(&frame));
   dec_state.SetState(&frame);
@@ -421,9 +427,11 @@
   packet.video_header.codec = kVideoCodecVP8;
   packet.timestamp = 0;
   packet.seqNum = 0;
-  packet.video_header.vp8().tl0PicIdx = 0;
-  packet.video_header.vp8().temporalIdx = 0;
-  packet.video_header.vp8().pictureId = 0;
+  auto& vp8_header =
+      packet.video_header.video_type_header.emplace<RTPVideoHeaderVP8>();
+  vp8_header.tl0PicIdx = 0;
+  vp8_header.temporalIdx = 0;
+  vp8_header.pictureId = 0;
   FrameData frame_data;
   frame_data.rtt_ms = 0;
   frame_data.rolling_average_packets_per_frame = -1;
@@ -433,15 +441,15 @@
   frame.Reset();
   ++packet.timestamp;
   ++packet.seqNum;
-  packet.video_header.vp8().temporalIdx++;
-  packet.video_header.vp8().pictureId++;
+  vp8_header.temporalIdx++;
+  vp8_header.pictureId++;
   EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
   EXPECT_TRUE(dec_state.ContinuousFrame(&frame));
   frame.Reset();
   // Testing only gap in tl0PicIdx when tl0PicIdx in continuous.
-  packet.video_header.vp8().tl0PicIdx += 3;
-  packet.video_header.vp8().temporalIdx++;
-  packet.video_header.vp8().tl0PicIdx = 1;
+  vp8_header.tl0PicIdx += 3;
+  vp8_header.temporalIdx++;
+  vp8_header.tl0PicIdx = 1;
   EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
   EXPECT_FALSE(dec_state.ContinuousFrame(&frame));
 }
diff --git a/modules/video_coding/encoded_frame.cc b/modules/video_coding/encoded_frame.cc
index 37914e4..8124b6b 100644
--- a/modules/video_coding/encoded_frame.cc
+++ b/modules/video_coding/encoded_frame.cc
@@ -56,6 +56,8 @@
   if (header) {
     switch (header->codec) {
       case kVideoCodecVP8: {
+        const auto& vp8_header =
+            absl::get<RTPVideoHeaderVP8>(header->video_type_header);
         if (_codecSpecificInfo.codecType != kVideoCodecVP8) {
           // This is the first packet for this frame.
           _codecSpecificInfo.codecSpecific.VP8.temporalIdx = 0;
@@ -64,15 +66,14 @@
           _codecSpecificInfo.codecType = kVideoCodecVP8;
         }
         _codecSpecificInfo.codecSpecific.VP8.nonReference =
-            header->vp8().nonReference;
-        if (header->vp8().temporalIdx != kNoTemporalIdx) {
+            vp8_header.nonReference;
+        if (vp8_header.temporalIdx != kNoTemporalIdx) {
           _codecSpecificInfo.codecSpecific.VP8.temporalIdx =
-              header->vp8().temporalIdx;
-          _codecSpecificInfo.codecSpecific.VP8.layerSync =
-              header->vp8().layerSync;
+              vp8_header.temporalIdx;
+          _codecSpecificInfo.codecSpecific.VP8.layerSync = vp8_header.layerSync;
         }
-        if (header->vp8().keyIdx != kNoKeyIdx) {
-          _codecSpecificInfo.codecSpecific.VP8.keyIdx = header->vp8().keyIdx;
+        if (vp8_header.keyIdx != kNoKeyIdx) {
+          _codecSpecificInfo.codecSpecific.VP8.keyIdx = vp8_header.keyIdx;
         }
         break;
       }
diff --git a/modules/video_coding/rtp_frame_reference_finder_unittest.cc b/modules/video_coding/rtp_frame_reference_finder_unittest.cc
index 1b9fe17..63c94ed 100644
--- a/modules/video_coding/rtp_frame_reference_finder_unittest.cc
+++ b/modules/video_coding/rtp_frame_reference_finder_unittest.cc
@@ -108,10 +108,12 @@
     packet.seqNum = seq_num_start;
     packet.markerBit = (seq_num_start == seq_num_end);
     packet.frameType = keyframe ? kVideoFrameKey : kVideoFrameDelta;
-    packet.video_header.vp8().pictureId = pid % (1 << 15);
-    packet.video_header.vp8().temporalIdx = tid;
-    packet.video_header.vp8().tl0PicIdx = tl0;
-    packet.video_header.vp8().layerSync = sync;
+    auto& vp8_header =
+        packet.video_header.video_type_header.emplace<RTPVideoHeaderVP8>();
+    vp8_header.pictureId = pid % (1 << 15);
+    vp8_header.temporalIdx = tid;
+    vp8_header.tl0PicIdx = tl0;
+    vp8_header.layerSync = sync;
     ref_packet_buffer_->InsertPacket(&packet);
 
     if (seq_num_start != seq_num_end) {
diff --git a/modules/video_coding/session_info.cc b/modules/video_coding/session_info.cc
index a80c7b2..0887109 100644
--- a/modules/video_coding/session_info.cc
+++ b/modules/video_coding/session_info.cc
@@ -62,7 +62,9 @@
   if (packets_.empty())
     return kNoPictureId;
   if (packets_.front().video_header.codec == kVideoCodecVP8) {
-    return packets_.front().video_header.vp8().pictureId;
+    return absl::get<RTPVideoHeaderVP8>(
+               packets_.front().video_header.video_type_header)
+        .pictureId;
   } else if (packets_.front().video_header.codec == kVideoCodecVP9) {
     return absl::get<RTPVideoHeaderVP9>(
                packets_.front().video_header.video_type_header)
@@ -76,7 +78,9 @@
   if (packets_.empty())
     return kNoTemporalIdx;
   if (packets_.front().video_header.codec == kVideoCodecVP8) {
-    return packets_.front().video_header.vp8().temporalIdx;
+    return absl::get<RTPVideoHeaderVP8>(
+               packets_.front().video_header.video_type_header)
+        .temporalIdx;
   } else if (packets_.front().video_header.codec == kVideoCodecVP9) {
     return absl::get<RTPVideoHeaderVP9>(
                packets_.front().video_header.video_type_header)
@@ -90,7 +94,9 @@
   if (packets_.empty())
     return false;
   if (packets_.front().video_header.codec == kVideoCodecVP8) {
-    return packets_.front().video_header.vp8().layerSync;
+    return absl::get<RTPVideoHeaderVP8>(
+               packets_.front().video_header.video_type_header)
+        .layerSync;
   } else if (packets_.front().video_header.codec == kVideoCodecVP9) {
     return absl::get<RTPVideoHeaderVP9>(
                packets_.front().video_header.video_type_header)
@@ -104,7 +110,9 @@
   if (packets_.empty())
     return kNoTl0PicIdx;
   if (packets_.front().video_header.codec == kVideoCodecVP8) {
-    return packets_.front().video_header.vp8().tl0PicIdx;
+    return absl::get<RTPVideoHeaderVP8>(
+               packets_.front().video_header.video_type_header)
+        .tl0PicIdx;
   } else if (packets_.front().video_header.codec == kVideoCodecVP9) {
     return absl::get<RTPVideoHeaderVP9>(
                packets_.front().video_header.video_type_header)
@@ -347,7 +355,8 @@
 VCMSessionInfo::PacketIterator VCMSessionInfo::FindNextPartitionBeginning(
     PacketIterator it) const {
   while (it != packets_.end()) {
-    if ((*it).video_header.vp8().beginningOfPartition) {
+    if (absl::get<RTPVideoHeaderVP8>((*it).video_header.video_type_header)
+            .beginningOfPartition) {
       return it;
     }
     ++it;
@@ -359,10 +368,16 @@
     PacketIterator it) const {
   assert((*it).codec == kVideoCodecVP8);
   PacketIterator prev_it = it;
-  const int partition_id = (*it).video_header.vp8().partitionId;
+  const int partition_id =
+      absl::get<RTPVideoHeaderVP8>((*it).video_header.video_type_header)
+          .partitionId;
   while (it != packets_.end()) {
-    bool beginning = (*it).video_header.vp8().beginningOfPartition;
-    int current_partition_id = (*it).video_header.vp8().partitionId;
+    bool beginning =
+        absl::get<RTPVideoHeaderVP8>((*it).video_header.video_type_header)
+            .beginningOfPartition;
+    int current_partition_id =
+        absl::get<RTPVideoHeaderVP8>((*it).video_header.video_type_header)
+            .partitionId;
     bool packet_loss_found = (!beginning && !InSequence(it, prev_it));
     if (packet_loss_found ||
         (beginning && current_partition_id != partition_id)) {
diff --git a/modules/video_coding/video_receiver_unittest.cc b/modules/video_coding/video_receiver_unittest.cc
index bec1e96..0b32daa 100644
--- a/modules/video_coding/video_receiver_unittest.cc
+++ b/modules/video_coding/video_receiver_unittest.cc
@@ -129,6 +129,7 @@
   header.header.ssrc = 1;
   header.header.headerLength = 12;
   header.video_header().codec = kVideoCodecVP8;
+  header.video_header().video_type_header.emplace<RTPVideoHeaderVP8>();
   // Insert one video frame to get one frame decoded.
   header.frameType = kVideoFrameKey;
   header.video_header().is_first_packet_in_frame = true;
@@ -180,8 +181,10 @@
   header.header.ssrc = 1;
   header.header.headerLength = 12;
   header.video_header().codec = kVideoCodecVP8;
-  header.video_header().vp8().pictureId = -1;
-  header.video_header().vp8().tl0PicIdx = -1;
+  auto& vp8_header =
+      header.video.video_type_header.emplace<RTPVideoHeaderVP8>();
+  vp8_header.pictureId = -1;
+  vp8_header.tl0PicIdx = -1;
   for (int i = 0; i < 3; ++i) {
     // Insert 2 video frames.
     for (int j = 0; j < 2; ++j) {