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:
@ -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)) {
|
||||
|
@ -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)
|
||||
|
Reference in New Issue
Block a user