Allow padding packet in video streams.

BUG=webrtc:5514

Review-Url: https://codereview.webrtc.org/2763813003
Cr-Commit-Position: refs/heads/master@{#17319}
diff --git a/webrtc/video/rtp_stream_receiver.cc b/webrtc/video/rtp_stream_receiver.cc
index c2e9950..499ee09 100644
--- a/webrtc/video/rtp_stream_receiver.cc
+++ b/webrtc/video/rtp_stream_receiver.cc
@@ -250,6 +250,14 @@
   packet.timesNacked =
       nack_module_ ? nack_module_->OnReceivedPacket(packet) : -1;
 
+  // In the case of a video stream without picture ids and no rtx the
+  // RtpFrameReferenceFinder will need to know about padding to
+  // correctly calculate frame references.
+  if (packet.sizeBytes == 0) {
+    reference_finder_->PaddingReceived(packet.seqNum);
+    return 0;
+  }
+
   if (packet.codec == kVideoCodecH264) {
     // Only when we start to receive packets will we know what payload type
     // that will be used. When we know the payload type insert the correct
diff --git a/webrtc/video/rtp_stream_receiver_unittest.cc b/webrtc/video/rtp_stream_receiver_unittest.cc
index 4eb5b6e..aace1b7 100644
--- a/webrtc/video/rtp_stream_receiver_unittest.cc
+++ b/webrtc/video/rtp_stream_receiver_unittest.cc
@@ -296,4 +296,39 @@
                                               &idr_packet);
 }
 
+TEST_F(RtpStreamReceiverTest, PaddingInMediaStream) {
+  WebRtcRTPHeader header = GetDefaultPacket();
+  std::vector<uint8_t> data;
+  data.insert(data.end(), {1, 2, 3});
+  header.header.payloadType = 99;
+  header.type.Video.is_first_packet_in_frame = true;
+  header.header.sequenceNumber = 2;
+  header.header.markerBit = true;
+  header.frameType = kVideoFrameKey;
+  header.type.Video.codec = kRtpVideoGeneric;
+  mock_on_complete_frame_callback_.AppendExpectedBitstream(data.data(),
+                                                           data.size());
+
+  EXPECT_CALL(mock_on_complete_frame_callback_, DoOnCompleteFrame(_));
+  rtp_stream_receiver_->OnReceivedPayloadData(data.data(), data.size(),
+                                              &header);
+
+  header.header.sequenceNumber = 3;
+  rtp_stream_receiver_->OnReceivedPayloadData(nullptr, 0, &header);
+
+  header.frameType = kVideoFrameDelta;
+  header.header.sequenceNumber = 4;
+  EXPECT_CALL(mock_on_complete_frame_callback_, DoOnCompleteFrame(_));
+  rtp_stream_receiver_->OnReceivedPayloadData(data.data(), data.size(),
+                                              &header);
+
+  header.header.sequenceNumber = 6;
+  rtp_stream_receiver_->OnReceivedPayloadData(data.data(), data.size(),
+                                              &header);
+
+  EXPECT_CALL(mock_on_complete_frame_callback_, DoOnCompleteFrame(_));
+  header.header.sequenceNumber = 5;
+  rtp_stream_receiver_->OnReceivedPayloadData(nullptr, 0, &header);
+}
+
 }  // namespace webrtc