Avoid assembling complicated but unused video rtp header extensions
Bug: chromium:1219407 Change-Id: I017de10813a1e80f4af0ba55d8d1aa73077dd131 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/222615 Reviewed-by: Philip Eliasson <philipel@webrtc.org> Commit-Queue: Danil Chapovalov <danilchap@webrtc.org> Cr-Commit-Position: refs/heads/master@{#34326}
This commit is contained in:
parent
afb28116d3
commit
7d5418233d
@ -114,6 +114,11 @@ class RtpPacket {
|
||||
bool HasExtension() const;
|
||||
bool HasExtension(ExtensionType type) const;
|
||||
|
||||
// Returns whether there is an associated id for the extension and thus it is
|
||||
// possible to set the extension.
|
||||
template <typename Extension>
|
||||
bool IsRegistered() const;
|
||||
|
||||
template <typename Extension, typename FirstValue, typename... Values>
|
||||
bool GetExtension(FirstValue, Values...) const;
|
||||
|
||||
@ -207,6 +212,11 @@ bool RtpPacket::HasExtension() const {
|
||||
return HasExtension(Extension::kId);
|
||||
}
|
||||
|
||||
template <typename Extension>
|
||||
bool RtpPacket::IsRegistered() const {
|
||||
return extensions_.IsRegistered(Extension::kId);
|
||||
}
|
||||
|
||||
template <typename Extension, typename FirstValue, typename... Values>
|
||||
bool RtpPacket::GetExtension(FirstValue first, Values... values) const {
|
||||
auto raw = FindExtension(Extension::kId);
|
||||
|
||||
@ -354,6 +354,35 @@ TEST(RtpPacketTest, CreateWithMaxSizeHeaderExtension) {
|
||||
EXPECT_EQ(read, kValue);
|
||||
}
|
||||
|
||||
TEST(RtpPacketTest, SetsRegisteredExtension) {
|
||||
RtpPacketToSend::ExtensionManager extensions;
|
||||
extensions.Register<TransmissionOffset>(kTransmissionOffsetExtensionId);
|
||||
RtpPacketToSend packet(&extensions);
|
||||
|
||||
EXPECT_TRUE(packet.IsRegistered<TransmissionOffset>());
|
||||
EXPECT_FALSE(packet.HasExtension<TransmissionOffset>());
|
||||
|
||||
// Try to set the extensions.
|
||||
EXPECT_TRUE(packet.SetExtension<TransmissionOffset>(kTimeOffset));
|
||||
|
||||
EXPECT_TRUE(packet.HasExtension<TransmissionOffset>());
|
||||
EXPECT_EQ(packet.GetExtension<TransmissionOffset>(), kTimeOffset);
|
||||
}
|
||||
|
||||
TEST(RtpPacketTest, FailsToSetUnregisteredExtension) {
|
||||
RtpPacketToSend::ExtensionManager extensions;
|
||||
extensions.Register<TransmissionOffset>(kTransmissionOffsetExtensionId);
|
||||
RtpPacketToSend packet(&extensions);
|
||||
|
||||
EXPECT_FALSE(packet.IsRegistered<TransportSequenceNumber>());
|
||||
EXPECT_FALSE(packet.HasExtension<TransportSequenceNumber>());
|
||||
|
||||
EXPECT_FALSE(packet.SetExtension<TransportSequenceNumber>(42));
|
||||
|
||||
EXPECT_FALSE(packet.HasExtension<TransportSequenceNumber>());
|
||||
EXPECT_EQ(packet.GetExtension<TransportSequenceNumber>(), absl::nullopt);
|
||||
}
|
||||
|
||||
TEST(RtpPacketTest, SetReservedExtensionsAfterPayload) {
|
||||
const size_t kPayloadSize = 4;
|
||||
RtpPacketToSend::ExtensionManager extensions;
|
||||
|
||||
@ -361,7 +361,8 @@ void RTPSenderVideo::AddRtpHeaderExtensions(
|
||||
|
||||
if (video_header.generic) {
|
||||
bool extension_is_set = false;
|
||||
if (video_structure_ != nullptr) {
|
||||
if (packet->IsRegistered<RtpDependencyDescriptorExtension>() &&
|
||||
video_structure_ != nullptr) {
|
||||
DependencyDescriptor descriptor;
|
||||
descriptor.first_packet_in_frame = first_packet;
|
||||
descriptor.last_packet_in_frame = last_packet;
|
||||
@ -407,7 +408,8 @@ void RTPSenderVideo::AddRtpHeaderExtensions(
|
||||
}
|
||||
|
||||
// Do not use generic frame descriptor when dependency descriptor is stored.
|
||||
if (!extension_is_set) {
|
||||
if (packet->IsRegistered<RtpGenericFrameDescriptorExtension00>() &&
|
||||
!extension_is_set) {
|
||||
RtpGenericFrameDescriptor generic_descriptor;
|
||||
generic_descriptor.SetFirstPacketInSubFrame(first_packet);
|
||||
generic_descriptor.SetLastPacketInSubFrame(last_packet);
|
||||
@ -437,7 +439,8 @@ void RTPSenderVideo::AddRtpHeaderExtensions(
|
||||
}
|
||||
}
|
||||
|
||||
if (first_packet &&
|
||||
if (packet->IsRegistered<RtpVideoLayersAllocationExtension>() &&
|
||||
first_packet &&
|
||||
send_allocation_ != SendVideoLayersAllocation::kDontSend &&
|
||||
(video_header.frame_type == VideoFrameType::kVideoFrameKey ||
|
||||
PacketWillLikelyBeRequestedForRestransmitionIfLost(video_header))) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user