Propagate RtpPacketReceived::arival_time_ms() when demuxing RTX packets

Bug: webrtc:11163
Change-Id: I3bf4a662c84e9b31e0b0fc15660d360413a4aee1
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/161224
Reviewed-by: Sebastian Jansson <srte@webrtc.org>
Reviewed-by: Danil Chapovalov <danilchap@webrtc.org>
Commit-Queue: Per Kjellander <perkj@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#29996}
diff --git a/call/rtx_receive_stream.cc b/call/rtx_receive_stream.cc
index 3c8b53b..9e4a41b 100644
--- a/call/rtx_receive_stream.cc
+++ b/call/rtx_receive_stream.cc
@@ -64,6 +64,7 @@
   media_packet.SetSequenceNumber((payload[0] << 8) + payload[1]);
   media_packet.SetPayloadType(it->second);
   media_packet.set_recovered(true);
+  media_packet.set_arrival_time_ms(rtx_packet.arrival_time_ms());
 
   // Skip the RTX header.
   rtc::ArrayView<const uint8_t> rtx_payload = payload.subview(kRtxHeaderSize);
diff --git a/call/rtx_receive_stream_unittest.cc b/call/rtx_receive_stream_unittest.cc
index 90027bb..75086fe 100644
--- a/call/rtx_receive_stream_unittest.cc
+++ b/call/rtx_receive_stream_unittest.cc
@@ -22,6 +22,7 @@
 namespace {
 
 using ::testing::_;
+using ::testing::Property;
 using ::testing::StrictMock;
 
 constexpr int kMediaPayloadType = 100;
@@ -188,6 +189,17 @@
   rtx_sink.OnRtpPacket(rtx_packet);
 }
 
+TEST(RtxReceiveStreamTest, PropagatesArrivalTime) {
+  StrictMock<MockRtpPacketSink> media_sink;
+  RtxReceiveStream rtx_sink(&media_sink, PayloadTypeMapping(), kMediaSSRC);
+  RtpPacketReceived rtx_packet(nullptr);
+  EXPECT_TRUE(rtx_packet.Parse(rtc::ArrayView<const uint8_t>(kRtxPacket)));
+  rtx_packet.set_arrival_time_ms(123);
+  EXPECT_CALL(media_sink,
+              OnRtpPacket(Property(&RtpPacketReceived::arrival_time_ms, 123)));
+  rtx_sink.OnRtpPacket(rtx_packet);
+}
+
 TEST(RtxReceiveStreamTest, SupportsLargePacket) {
   StrictMock<MockRtpPacketSink> media_sink;
   RtxReceiveStream rtx_sink(&media_sink, PayloadTypeMapping(), kMediaSSRC);