From 3d61ab12e6d3bd2df884cdf40aeaf9b9f5fb6399 Mon Sep 17 00:00:00 2001 From: Sebastian Jansson Date: Fri, 14 Jun 2019 13:35:51 +0200 Subject: [PATCH] Adds send time to ReceivedPacket struct. Bug: webrtc:10742 Change-Id: I7e83d5ec2e23d1db38d02a0c883466ecdcd387c6 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/141874 Commit-Queue: Sebastian Jansson Reviewed-by: Per Kjellander Cr-Commit-Position: refs/heads/master@{#28290} --- api/BUILD.gn | 1 + api/rtp_headers.h | 10 ++++++++++ api/transport/network_types.h | 1 + call/call.cc | 3 +++ .../remote_bitrate_estimator_abs_send_time.cc | 11 ++++++----- 5 files changed, 21 insertions(+), 5 deletions(-) diff --git a/api/BUILD.gn b/api/BUILD.gn index 6d9b7c11b7..906ae633dc 100644 --- a/api/BUILD.gn +++ b/api/BUILD.gn @@ -73,6 +73,7 @@ rtc_source_set("rtp_headers") { deps = [ ":array_view", "..:webrtc_common", + "units:timestamp", "video:video_frame", "video:video_rtp_headers", "//third_party/abseil-cpp/absl/types:optional", diff --git a/api/rtp_headers.h b/api/rtp_headers.h index a7ae5cdf86..cdf1e28f95 100644 --- a/api/rtp_headers.h +++ b/api/rtp_headers.h @@ -17,6 +17,7 @@ #include "absl/types/optional.h" #include "api/array_view.h" +#include "api/units/timestamp.h" #include "api/video/color_space.h" #include "api/video/video_content_type.h" #include "api/video/video_frame_marking.h" @@ -42,6 +43,15 @@ struct RTPHeaderExtension { RTPHeaderExtension(const RTPHeaderExtension& other); RTPHeaderExtension& operator=(const RTPHeaderExtension& other); + static constexpr int kAbsSendTimeFraction = 18; + + Timestamp GetAbsoluteSendTimestamp() const { + RTC_DCHECK(hasAbsoluteSendTime); + RTC_DCHECK(absoluteSendTime < (1ul << 24)); + return Timestamp::us((absoluteSendTime * 1000000L) / + (1 << kAbsSendTimeFraction)); + } + bool hasTransmissionTimeOffset; int32_t transmissionTimeOffset; bool hasAbsoluteSendTime; diff --git a/api/transport/network_types.h b/api/transport/network_types.h index dfb89d2481..a415c09e50 100644 --- a/api/transport/network_types.h +++ b/api/transport/network_types.h @@ -102,6 +102,7 @@ struct SentPacket { }; struct ReceivedPacket { + Timestamp send_time = Timestamp::MinusInfinity(); Timestamp receive_time = Timestamp::PlusInfinity(); DataSize size = DataSize::Zero(); }; diff --git a/call/call.cc b/call/call.cc index a25e161ea3..fe922e40b6 100644 --- a/call/call.cc +++ b/call/call.cc @@ -1500,6 +1500,9 @@ void Call::NotifyBweOfReceivedPacket(const RtpPacketReceived& packet, ReceivedPacket packet_msg; packet_msg.size = DataSize::bytes(packet.payload_size()); packet_msg.receive_time = Timestamp::ms(packet.arrival_time_ms()); + if (header.extension.hasAbsoluteSendTime) { + packet_msg.send_time = header.extension.GetAbsoluteSendTimestamp(); + } transport_send_ptr_->OnReceivedPacket(packet_msg); if (!use_send_side_bwe && header.extension.hasTransportSequenceNumber) { diff --git a/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time.cc b/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time.cc index ed2d061c3a..61dd3e2bfd 100644 --- a/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time.cc +++ b/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time.cc @@ -36,9 +36,9 @@ absl::optional OptionalRateFromOptionalBps( enum { kTimestampGroupLengthMs = 5, - kAbsSendTimeFraction = 18, kAbsSendTimeInterArrivalUpshift = 8, - kInterArrivalShift = kAbsSendTimeFraction + kAbsSendTimeInterArrivalUpshift, + kInterArrivalShift = RTPHeaderExtension::kAbsSendTimeFraction + + kAbsSendTimeInterArrivalUpshift, kInitialProbingIntervalMs = 2000, kMinClusterSize = 4, kMaxProbePackets = 15, @@ -61,9 +61,10 @@ std::vector Keys(const std::map& map) { uint32_t ConvertMsTo24Bits(int64_t time_ms) { uint32_t time_24_bits = - static_cast( - ((static_cast(time_ms) << kAbsSendTimeFraction) + 500) / - 1000) & + static_cast(((static_cast(time_ms) + << RTPHeaderExtension::kAbsSendTimeFraction) + + 500) / + 1000) & 0x00FFFFFF; return time_24_bits; }