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 <srte@webrtc.org>
Reviewed-by: Per Kjellander <perkj@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#28290}
diff --git a/api/BUILD.gn b/api/BUILD.gn
index 6d9b7c1..906ae63 100644
--- a/api/BUILD.gn
+++ b/api/BUILD.gn
@@ -73,6 +73,7 @@
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 a7ae5cd..cdf1e28 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 @@
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 dfb89d2..a415c09 100644
--- a/api/transport/network_types.h
+++ b/api/transport/network_types.h
@@ -102,6 +102,7 @@
};
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 a25e161..fe922e4 100644
--- a/call/call.cc
+++ b/call/call.cc
@@ -1500,6 +1500,9 @@
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 ed2d061..61dd3e2 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 @@
enum {
kTimestampGroupLengthMs = 5,
- kAbsSendTimeFraction = 18,
kAbsSendTimeInterArrivalUpshift = 8,
- kInterArrivalShift = kAbsSendTimeFraction + kAbsSendTimeInterArrivalUpshift,
+ kInterArrivalShift = RTPHeaderExtension::kAbsSendTimeFraction +
+ kAbsSendTimeInterArrivalUpshift,
kInitialProbingIntervalMs = 2000,
kMinClusterSize = 4,
kMaxProbePackets = 15,
@@ -61,9 +61,10 @@
uint32_t ConvertMsTo24Bits(int64_t time_ms) {
uint32_t time_24_bits =
- static_cast<uint32_t>(
- ((static_cast<uint64_t>(time_ms) << kAbsSendTimeFraction) + 500) /
- 1000) &
+ static_cast<uint32_t>(((static_cast<uint64_t>(time_ms)
+ << RTPHeaderExtension::kAbsSendTimeFraction) +
+ 500) /
+ 1000) &
0x00FFFFFF;
return time_24_bits;
}