blob: 6ec7671f99730029a43c1f850a7ccb0382eceef3 [file] [log] [blame]
/*
* Copyright (c) 2024 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
#include <cstdint>
#include "absl/types/optional.h"
#include "modules/rtp_rtcp/include/rtp_rtcp_defines.h"
#include "modules/rtp_rtcp/source/rtp_header_extensions.h"
#include "modules/rtp_rtcp/source/rtp_packet_to_send.h"
namespace webrtc {
RtpPacketSendInfo RtpPacketSendInfo::From(const RtpPacketToSend& packet,
const PacedPacketInfo& pacing_info) {
RtpPacketSendInfo packet_info;
if (packet.transport_sequence_number()) {
packet_info.transport_sequence_number =
*packet.transport_sequence_number() & 0xFFFF;
} else {
absl::optional<uint16_t> packet_id =
packet.GetExtension<TransportSequenceNumber>();
if (packet_id) {
packet_info.transport_sequence_number = *packet_id;
}
}
packet_info.rtp_timestamp = packet.Timestamp();
packet_info.length = packet.size();
packet_info.pacing_info = pacing_info;
packet_info.packet_type = packet.packet_type();
switch (*packet_info.packet_type) {
case RtpPacketMediaType::kAudio:
case RtpPacketMediaType::kVideo:
packet_info.media_ssrc = packet.Ssrc();
packet_info.rtp_sequence_number = packet.SequenceNumber();
break;
case RtpPacketMediaType::kRetransmission:
RTC_DCHECK(packet.original_ssrc() &&
packet.retransmitted_sequence_number());
// For retransmissions, we're want to remove the original media packet
// if the retransmit arrives - so populate that in the packet info.
packet_info.media_ssrc = packet.original_ssrc().value_or(0);
packet_info.rtp_sequence_number =
packet.retransmitted_sequence_number().value_or(0);
break;
case RtpPacketMediaType::kPadding:
case RtpPacketMediaType::kForwardErrorCorrection:
// We're not interested in feedback about these packets being received
// or lost.
break;
}
return packet_info;
}
} // namespace webrtc