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:
Sebastian Jansson 2019-06-14 13:35:51 +02:00 committed by Commit Bot
parent 8aba8fe851
commit 3d61ab12e6
5 changed files with 21 additions and 5 deletions

View File

@ -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",

View File

@ -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;

View File

@ -102,6 +102,7 @@ struct SentPacket {
};
struct ReceivedPacket {
Timestamp send_time = Timestamp::MinusInfinity();
Timestamp receive_time = Timestamp::PlusInfinity();
DataSize size = DataSize::Zero();
};

View File

@ -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) {

View File

@ -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;
}