From b7cb8fe75a0b0f19a003e4f78f83fb7bd8fa84ef Mon Sep 17 00:00:00 2001 From: Philipp Hancke Date: Mon, 25 Nov 2024 10:14:35 -0800 Subject: [PATCH] h264: skip empty NAL units, do not reject them BUG=webrtc:380291923 Change-Id: If05268bde2ac0c600dcef479c88ca54dce708dcb Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/368893 Reviewed-by: Danil Chapovalov Reviewed-by: Sergey Silkin Commit-Queue: Philipp Hancke Cr-Commit-Position: refs/heads/main@{#43451} --- modules/rtp_rtcp/source/video_rtp_depacketizer_h264.cc | 4 ++-- .../source/video_rtp_depacketizer_h264_unittest.cc | 10 ++++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/modules/rtp_rtcp/source/video_rtp_depacketizer_h264.cc b/modules/rtp_rtcp/source/video_rtp_depacketizer_h264.cc index 97bbe7db24..b9e74f5781 100644 --- a/modules/rtp_rtcp/source/video_rtp_depacketizer_h264.cc +++ b/modules/rtp_rtcp/source/video_rtp_depacketizer_h264.cc @@ -101,8 +101,8 @@ std::optional ProcessStapAOrSingleNalu( nal_unit.subview(H264::kNaluTypeSize); if (nalu_data.empty()) { - RTC_LOG(LS_ERROR) << "Empty NAL unit found."; - return std::nullopt; + RTC_LOG(LS_WARNING) << "Skipping empty NAL unit."; + continue; } switch (nalu.type) { diff --git a/modules/rtp_rtcp/source/video_rtp_depacketizer_h264_unittest.cc b/modules/rtp_rtcp/source/video_rtp_depacketizer_h264_unittest.cc index 8f1d272b77..8330bf2d6b 100644 --- a/modules/rtp_rtcp/source/video_rtp_depacketizer_h264_unittest.cc +++ b/modules/rtp_rtcp/source/video_rtp_depacketizer_h264_unittest.cc @@ -542,5 +542,15 @@ TEST(VideoRtpDepacketizerH264Test, SeiSetsFirstPacketInFrame) { EXPECT_TRUE(parsed->video_header.is_first_packet_in_frame); } +TEST(VideoRtpDepacketizerH264Test, EmptyNaluPayload) { + const uint8_t kPayload[] = { + 0x10, // End of sequence. + }; + VideoRtpDepacketizerH264 depacketizer; + std::optional parsed = + depacketizer.Parse(rtc::CopyOnWriteBuffer(kPayload)); + ASSERT_TRUE(parsed); +} + } // namespace } // namespace webrtc