Check (correctly) if packet is a padding packet based on payload size rather than the (incorrect) parsed payload size.

Bug: webrtc:12579
Change-Id: I5f2aff3b0bac8eeb31ac8066aef62b825815a601
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/235207
Commit-Queue: Philip Eliasson <philipel@webrtc.org>
Reviewed-by: Niels Moller <nisse@webrtc.org>
Reviewed-by: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#35214}
This commit is contained in:
philipel
2021-10-14 15:51:27 +02:00
committed by WebRTC LUCI CQ
parent 64e5830969
commit ff70925ca8
2 changed files with 15 additions and 30 deletions

View File

@ -92,6 +92,11 @@ RtpVideoFrameAssembler::Impl::Impl(
RtpVideoFrameAssembler::FrameVector RtpVideoFrameAssembler::Impl::InsertPacket(
const RtpPacketReceived& rtp_packet) {
if (rtp_packet.payload_size() == 0) {
ClearOldData(rtp_packet.SequenceNumber());
return UpdateWithPadding(rtp_packet.SequenceNumber());
}
absl::optional<VideoRtpDepacketizer::ParsedRtpPayload> parsed_payload =
depacketizer_->Parse(rtp_packet.PayloadBuffer());
@ -99,11 +104,6 @@ RtpVideoFrameAssembler::FrameVector RtpVideoFrameAssembler::Impl::InsertPacket(
return {};
}
if (parsed_payload->video_payload.size() == 0) {
ClearOldData(rtp_packet.SequenceNumber());
return UpdateWithPadding(rtp_packet.SequenceNumber());
}
if (rtp_packet.HasExtension<RtpDependencyDescriptorExtension>()) {
if (!ParseDependenciesDescriptorExtension(rtp_packet,
parsed_payload->video_header)) {

View File

@ -105,6 +105,13 @@ class PacketBuilder {
RtpPacketToSend packet_to_send_;
};
RtpPacketReceived PaddingPacket(uint16_t seq_num) {
RtpPacketReceived padding_packet;
padding_packet.SetSequenceNumber(seq_num);
padding_packet.SetPadding(224);
return padding_packet;
}
void AppendFrames(RtpVideoFrameAssembler::FrameVector from,
RtpVideoFrameAssembler::FrameVector& to) {
to.insert(to.end(), std::make_move_iterator(from.begin()),
@ -389,26 +396,13 @@ TEST(RtpVideoFrameAssembler, Padding) {
frames);
ASSERT_THAT(frames, SizeIs(1));
EXPECT_THAT(frames[0]->Id(), Eq(123));
EXPECT_THAT(Payload(frames[0]), ElementsAreArray(kPayload));
EXPECT_THAT(References(frames[0]), IsEmpty());
// Padding packets have no bitstream data. An easy way to generate one is to
// build a normal packet and then simply remove the bitstream portion of the
// payload.
RtpPacketReceived padding_packet = PacketBuilder(PayloadFormat::kGeneric)
.WithPayload(kPayload)
.WithVideoHeader(video_header)
.WithSeqNum(124)
.Build();
// The payload descriptor is one byte, keep it.
padding_packet.SetPayloadSize(1);
AppendFrames(assembler.InsertPacket(padding_packet), frames);
AppendFrames(assembler.InsertPacket(PaddingPacket(/*seq_num=*/124)), frames);
ASSERT_THAT(frames, SizeIs(2));
EXPECT_THAT(frames[1]->Id(), Eq(125));
EXPECT_THAT(Payload(frames[1]), ElementsAreArray(kPayload));
EXPECT_THAT(References(frames[1]), UnorderedElementsAre(123));
@ -464,17 +458,8 @@ TEST(RtpVideoFrameAssembler, ClearOldPacketsWithPadding) {
.Build()),
SizeIs(1));
// Padding packets have no bitstream data. An easy way to generate one is to
// build a normal packet and then simply remove the bitstream portion of the
// payload.
RtpPacketReceived padding_packet = PacketBuilder(PayloadFormat::kGeneric)
.WithPayload(kPayload)
.WithVideoHeader(video_header)
.WithSeqNum(2000)
.Build();
// The payload descriptor is one byte, keep it.
padding_packet.SetPayloadSize(1);
EXPECT_THAT(assembler.InsertPacket(padding_packet), SizeIs(0));
EXPECT_THAT(assembler.InsertPacket(PaddingPacket(/*seq_num=*/2000)),
SizeIs(0));
EXPECT_THAT(assembler.InsertPacket(PacketBuilder(PayloadFormat::kGeneric)
.WithPayload(kPayload)