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}
This commit is contained in:
parent
8aba8fe851
commit
3d61ab12e6
@ -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",
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -102,6 +102,7 @@ struct SentPacket {
|
||||
};
|
||||
|
||||
struct ReceivedPacket {
|
||||
Timestamp send_time = Timestamp::MinusInfinity();
|
||||
Timestamp receive_time = Timestamp::PlusInfinity();
|
||||
DataSize size = DataSize::Zero();
|
||||
};
|
||||
|
||||
@ -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) {
|
||||
|
||||
@ -36,9 +36,9 @@ absl::optional<DataRate> 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<K> Keys(const std::map<K, V>& map) {
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user