webrtc/modules/rtp_rtcp/source
Harsh Maniar 6ef4af9546 Purge old FEC packets from receiver's queue before media sequence numbers wrap around
- Received FEC packets are purged from the queue if:
  1. All media packets protected by the FEC packet are received.
  2. All media packets protected by the FEC packet are recovered.
  3. Newer FEC packet(s) with sequence number '0x3fff' larger than an old FEC packet is received.
- When FEC packets get separated from their protected media packets by more than 48, none of the first conditions ever delete that FEC packet, no matter how old/ irrelevant it gets.
- Under specific circumstances, the new FEC packet (condition 3) is not received before the media sequence number space wraps around, and incorrectly activates the old FEC packet, resulting in FEC decode for the wrong packet.
- This change purges such old FEC packets in time before the media sequence numbers wrap around.

Bug: webrtc:12656
Change-Id: I6ddf5382638c8c7e9a65724b2544dfbbc4803342
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/215100
Reviewed-by: Rasmus Brandt <brandtr@webrtc.org>
Reviewed-by: Åsa Persson <asapersson@webrtc.org>
Commit-Queue: Rasmus Brandt <brandtr@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#33795}
2021-04-21 07:33:14 +00:00
..
deprecated Remove passing rtp packet metadata through webrtc as array of bytes 2021-02-02 12:22:57 +00:00
rtcp_packet Clean up previously deleted RTCP VOIP metrics block. 2021-02-04 18:34:28 +00:00
absolute_capture_time_receiver.cc Migrate modules/rtp_rtcp to webrtc::Mutex. 2020-07-07 12:13:47 +00:00
absolute_capture_time_receiver.h Migrate modules/rtp_rtcp to webrtc::Mutex. 2020-07-07 12:13:47 +00:00
absolute_capture_time_receiver_unittest.cc Add helper classes to send and receive abs-capture-time extensions. 2019-08-22 09:09:17 +00:00
absolute_capture_time_sender.cc Migrate modules/rtp_rtcp to webrtc::Mutex. 2020-07-07 12:13:47 +00:00
absolute_capture_time_sender.h Migrate modules/rtp_rtcp to webrtc::Mutex. 2020-07-07 12:13:47 +00:00
absolute_capture_time_sender_unittest.cc Add helper classes to send and receive abs-capture-time extensions. 2019-08-22 09:09:17 +00:00
active_decode_targets_helper.cc In DependencyDescriptor rtp header extension drop partial chain support 2020-07-21 14:01:27 +00:00
active_decode_targets_helper.h Propagate active decode targets bitmask into DependencyDescriptor 2020-06-29 12:54:43 +00:00
active_decode_targets_helper_unittest.cc In DependencyDescriptor rtp header extension drop partial chain support 2020-07-21 14:01:27 +00:00
byte_io.h
byte_io_unittest.cc
create_video_rtp_depacketizer.cc Introduce RTC_CHECK_NOTREACHED(), an always-checking RTC_NOTREACHED() 2020-11-09 10:47:55 +00:00
create_video_rtp_depacketizer.h Add implementations of the VideoRtpDepacketizer interface 2019-12-06 15:20:29 +00:00
dtmf_queue.cc Migrate modules/rtp_rtcp to webrtc::Mutex. 2020-07-07 12:13:47 +00:00
dtmf_queue.h Migrate modules/rtp_rtcp to webrtc::Mutex. 2020-07-07 12:13:47 +00:00
fec_private_tables_bursty.cc
fec_private_tables_bursty.h
fec_private_tables_bursty_unittest.cc
fec_private_tables_random.cc
fec_private_tables_random.h
fec_test_helper.cc Updates ulpfec reader to accept padding on media packets. 2021-03-16 19:47:09 +00:00
fec_test_helper.h Fix: don't use recovered packets in UlpFEC recovery 2020-03-11 12:49:11 +00:00
flexfec_header_reader_writer.cc Use rtc::CopyOnWriteBuffer::MutableData through webrtc 2021-01-11 11:31:33 +00:00
flexfec_header_reader_writer.h
flexfec_header_reader_writer_unittest.cc Use rtc::CopyOnWriteBuffer::MutableData through webrtc 2021-01-11 11:31:33 +00:00
flexfec_receiver.cc Add Slice method to CopyOnWriteBuffer and use it in FEC code. 2019-09-26 09:48:07 +00:00
flexfec_receiver_unittest.cc Purge old FEC packets from receiver's queue before media sequence numbers wrap around 2021-04-21 07:33:14 +00:00
flexfec_sender.cc Migrate modules/rtp_rtcp to webrtc::Mutex. 2020-07-07 12:13:47 +00:00
flexfec_sender_unittest.cc Refactors FEC in preparation for deferred packet generation. 2020-05-05 13:59:14 +00:00
forward_error_correction.cc Purge old FEC packets from receiver's queue before media sequence numbers wrap around 2021-04-21 07:33:14 +00:00
forward_error_correction.h Purge old FEC packets from receiver's queue before media sequence numbers wrap around 2021-04-21 07:33:14 +00:00
forward_error_correction_internal.cc
forward_error_correction_internal.h
nack_rtx_unittest.cc Revert "Add task queue to RtpRtcpInterface::Configuration." 2021-01-12 17:47:32 +00:00
packet_loss_stats.cc
packet_loss_stats.h
packet_loss_stats_unittest.cc
packet_sequencer.cc Extract sequencing from RtpSender 2021-02-22 14:00:06 +00:00
packet_sequencer.h Extract sequencing from RtpSender 2021-02-22 14:00:06 +00:00
receive_statistics_impl.cc Fix unspecified time origin for lastPacketReceivedTimestamp 2021-03-24 09:36:41 +00:00
receive_statistics_impl.h Fix unspecified time origin for lastPacketReceivedTimestamp 2021-03-24 09:36:41 +00:00
receive_statistics_unittest.cc Add a mutex free implementation of webrtc::ReceiveStatistics 2021-03-10 14:16:38 +00:00
remote_ntp_time_estimator.cc Stop trying to compensate for the offset between the different NTP clocks. 2021-04-08 14:48:20 +00:00
remote_ntp_time_estimator_unittest.cc Stop trying to compensate for the offset between the different NTP clocks. 2021-04-08 14:48:20 +00:00
rtcp_nack_stats.cc
rtcp_nack_stats.h
rtcp_nack_stats_unittest.cc
rtcp_packet.cc
rtcp_packet.h Replace virtual RtcpPacket::SetSenderSsrc with base member 2019-10-10 09:14:11 +00:00
rtcp_packet_unittest.cc
rtcp_receiver.cc Delete RtpRtcp::RemoteRTCPStat in favor of GetLatestReportBlockData 2021-03-16 10:31:35 +00:00
rtcp_receiver.h Delete RtpRtcp::RemoteRTCPStat in favor of GetLatestReportBlockData 2021-03-16 10:31:35 +00:00
rtcp_receiver_unittest.cc Delete RtpRtcp::RemoteRTCPStat in favor of GetLatestReportBlockData 2021-03-16 10:31:35 +00:00
rtcp_sender.cc Delete unused functions in RtpSender, RtcpSender and RtcpReceiver 2021-02-16 14:16:22 +00:00
rtcp_sender.h Delete unused functions in RtpSender, RtcpSender and RtcpReceiver 2021-02-16 14:16:22 +00:00
rtcp_sender_unittest.cc Delete unused functions in RtpSender, RtcpSender and RtcpReceiver 2021-02-16 14:16:22 +00:00
rtcp_transceiver.cc Migrate RtcpTransceiver to use webrtc::TaskQueueBase instead of rtc::TaskQueue 2020-03-06 11:26:51 +00:00
rtcp_transceiver.h Migrate RtcpTransceiver to use webrtc::TaskQueueBase instead of rtc::TaskQueue 2020-03-06 11:26:51 +00:00
rtcp_transceiver_config.cc Migrate RtcpTransceiver to use webrtc::TaskQueueBase instead of rtc::TaskQueue 2020-03-06 11:26:51 +00:00
rtcp_transceiver_config.h Add a clock to be used for getting the NTP time in RtcpTransceiverConfig. 2021-04-08 12:43:27 +00:00
rtcp_transceiver_impl.cc Migrate RtcpTransceiver to use webrtc::TaskQueueBase instead of rtc::TaskQueue 2020-03-06 11:26:51 +00:00
rtcp_transceiver_impl.h Add new_request flag to SendFullIntraRequest 2019-12-04 13:45:02 +00:00
rtcp_transceiver_impl_unittest.cc Updates rtcp::CompoundPacket to contain unique pointers to packets. 2020-09-11 14:34:07 +00:00
rtcp_transceiver_unittest.cc In modules/ replace mock macros with unified MOCK_METHOD macro 2020-05-27 10:21:08 +00:00
rtp_dependency_descriptor_extension.cc Ignore inactive chains when writing DependencyDescriptor rtp header extension. 2020-06-25 14:59:38 +00:00
rtp_dependency_descriptor_extension.h Ignore inactive chains when writing DependencyDescriptor rtp header extension. 2020-06-25 14:59:38 +00:00
rtp_dependency_descriptor_extension_unittest.cc Ignore inactive chains when writing DependencyDescriptor rtp header extension. 2020-06-25 14:59:38 +00:00
rtp_dependency_descriptor_reader.cc In DependencyDescriptor rtp header extension drop partial chain support 2020-07-21 14:01:27 +00:00
rtp_dependency_descriptor_reader.h Publish DependencyDescriptor structures in the api 2020-01-20 15:05:48 +00:00
rtp_dependency_descriptor_writer.cc In DependencyDescriptor rtp header extension drop partial chain support 2020-07-21 14:01:27 +00:00
rtp_dependency_descriptor_writer.h Ignore inactive chains when writing DependencyDescriptor rtp header extension. 2020-06-25 14:59:38 +00:00
rtp_descriptor_authentication.cc Do not propagate generic descriptor on receiving frame 2020-02-17 14:52:03 +00:00
rtp_descriptor_authentication.h Do not propagate generic descriptor on receiving frame 2020-02-17 14:52:03 +00:00
rtp_fec_unittest.cc Use rtc::CopyOnWriteBuffer::MutableData through webrtc 2021-01-11 11:31:33 +00:00
rtp_format.cc In Av1 packetizer set marker bit with respect of end_of_picture flag 2020-11-16 11:08:48 +00:00
rtp_format.h Do not propage RTPFragmentationHeader into rtp_rtcp 2020-07-21 14:37:08 +00:00
rtp_format_h264.cc h264: s/StrapA/STAP-A 2020-12-03 13:09:04 +00:00
rtp_format_h264.h Ignore fragmentation header when packetizing H264 2020-07-16 16:12:33 +00:00
rtp_format_h264_unittest.cc Ignore fragmentation header when packetizing H264 2020-07-16 16:12:33 +00:00
rtp_format_unittest.cc
rtp_format_video_generic.cc Pass picture_id from generic packetizer through codec-specific field 2020-01-28 19:26:28 +00:00
rtp_format_video_generic.h Delete RtpGenericDepacketizer as no longer used 2020-01-13 13:45:37 +00:00
rtp_format_video_generic_unittest.cc Remove RTPFragmentationHeader creation and propagation through webrtc 2020-08-17 16:37:33 +00:00
rtp_format_vp8.cc Delete RtpDepacketizerVp8 in favor of VideoRtpDepacketizerVp8 2020-01-09 12:10:19 +00:00
rtp_format_vp8.h Delete RtpDepacketizerVp8 in favor of VideoRtpDepacketizerVp8 2020-01-09 12:10:19 +00:00
rtp_format_vp8_test_helper.cc
rtp_format_vp8_test_helper.h Do not propage RTPFragmentationHeader into rtp_rtcp 2020-07-21 14:37:08 +00:00
rtp_format_vp8_unittest.cc Delete RtpDepacketizerVp8 in favor of VideoRtpDepacketizerVp8 2020-01-09 12:10:19 +00:00
rtp_format_vp9.cc Reland "[VP9] Shift spatial layers on RTP level to always start from 0." 2020-02-04 10:06:44 +00:00
rtp_format_vp9.h Delete RtpDepacketizerVp9 in favor of VideoRtpDepacketizerVp9 2020-01-09 13:07:44 +00:00
rtp_format_vp9_unittest.cc Reland "[VP9] Shift spatial layers on RTP level to always start from 0." 2020-02-04 10:06:44 +00:00
rtp_generic_frame_descriptor.cc Do not propagate generic descriptor on receiving frame 2020-02-17 14:52:03 +00:00
rtp_generic_frame_descriptor.h Delete generic frame descriptor v1 trait and enum value 2020-04-16 17:29:18 +00:00
rtp_generic_frame_descriptor_extension.cc Delete generic frame descriptor v1 trait and enum value 2020-04-16 17:29:18 +00:00
rtp_generic_frame_descriptor_extension.h Delete generic frame descriptor v1 trait and enum value 2020-04-16 17:29:18 +00:00
rtp_generic_frame_descriptor_extension_unittest.cc Delete generic frame descriptor v1 trait and enum value 2020-04-16 17:29:18 +00:00
rtp_header_extension_map.cc Create a VideoFrameTrackingId RTP header extension. 2021-03-25 17:25:18 +00:00
rtp_header_extension_map_unittest.cc
rtp_header_extension_size.cc
rtp_header_extension_size.h
rtp_header_extension_size_unittest.cc
rtp_header_extensions.cc Create a VideoFrameTrackingId RTP header extension. 2021-03-25 17:25:18 +00:00
rtp_header_extensions.h Create a VideoFrameTrackingId RTP header extension. 2021-03-25 17:25:18 +00:00
rtp_packet.cc Revert "Fix RTP header extension encryption" 2021-04-14 10:10:07 +00:00
rtp_packet.h Use rtc::CopyOnWriteBuffer::MutableData through webrtc 2021-01-11 11:31:33 +00:00
rtp_packet_history.cc Remove tautological 'unsigned expr < 0' comparisons 2021-04-12 11:40:14 +00:00
rtp_packet_history.h Delete macros RTC_DISALLOW_ASSIGN and RTC_DISALLOW_IMPLICIT_CONSTRUCTORS 2020-09-29 10:19:20 +00:00
rtp_packet_history_unittest.cc Add ability to disable padding prioritization. 2020-03-30 09:01:51 +00:00
rtp_packet_received.cc Remove framemarking RTP extension. 2020-06-15 11:18:00 +00:00
rtp_packet_received.h Replace RTC_DEPRECATED with ABSL_DEPRECATED 2021-02-22 12:53:23 +00:00
rtp_packet_to_send.cc
rtp_packet_to_send.h Remove passing rtp packet metadata through webrtc as array of bytes 2021-02-02 12:22:57 +00:00
rtp_packet_unittest.cc Rename PlayoutDelay --> VideoPlayoutDelay, move to api/video/video_timing.h 2020-09-07 08:37:14 +00:00
rtp_packetizer_av1.cc In Av1 packetizer set marker bit with respect of end_of_picture flag 2020-11-16 11:08:48 +00:00
rtp_packetizer_av1.h In Av1 packetizer set marker bit with respect of end_of_picture flag 2020-11-16 11:08:48 +00:00
rtp_packetizer_av1_unittest.cc In Av1 packetizer set marker bit with respect of end_of_picture flag 2020-11-16 11:08:48 +00:00
rtp_rtcp_config.h
rtp_rtcp_impl.cc Delete RtpRtcp::RemoteRTCPStat in favor of GetLatestReportBlockData 2021-03-16 10:31:35 +00:00
rtp_rtcp_impl.h Delete RtpRtcp::RemoteRTCPStat in favor of GetLatestReportBlockData 2021-03-16 10:31:35 +00:00
rtp_rtcp_impl2.cc Delete RtpRtcp::RemoteRTCPStat in favor of GetLatestReportBlockData 2021-03-16 10:31:35 +00:00
rtp_rtcp_impl2.h Delete RtpRtcp::RemoteRTCPStat in favor of GetLatestReportBlockData 2021-03-16 10:31:35 +00:00
rtp_rtcp_impl2_unittest.cc Refactor some RtpSender-level tests into RtpRtcp-level tests 2021-04-13 08:37:14 +00:00
rtp_rtcp_impl_unittest.cc Add remote-outbound stats for audio streams 2021-03-12 20:39:50 +00:00
rtp_rtcp_interface.h Delete RtpRtcp::RemoteRTCPStat in favor of GetLatestReportBlockData 2021-03-16 10:31:35 +00:00
rtp_sender.cc Create a VideoFrameTrackingId RTP header extension. 2021-03-25 17:25:18 +00:00
rtp_sender.h Extract sequencing from RtpSender 2021-02-22 14:00:06 +00:00
rtp_sender_audio.cc Introduce RTC_CHECK_NOTREACHED(), an always-checking RTC_NOTREACHED() 2020-11-09 10:47:55 +00:00
rtp_sender_audio.h Delete macros RTC_DISALLOW_ASSIGN and RTC_DISALLOW_IMPLICIT_CONSTRUCTORS 2020-09-29 10:19:20 +00:00
rtp_sender_audio_unittest.cc Revert "Add task queue to RtpRtcpInterface::Configuration." 2021-01-12 17:47:32 +00:00
rtp_sender_egress.cc Remove passing rtp packet metadata through webrtc as array of bytes 2021-02-02 12:22:57 +00:00
rtp_sender_egress.h Use SequenceChecker from public API 2021-02-10 15:04:55 +00:00
rtp_sender_unittest.cc Refactor some RtpSender-level tests into RtpRtcp-level tests 2021-04-13 08:37:14 +00:00
rtp_sender_video.cc Send and Receive VideoFrameTrackingid RTP header extension. 2021-03-25 21:57:29 +00:00
rtp_sender_video.h Use SequenceChecker from public API 2021-02-10 15:04:55 +00:00
rtp_sender_video_frame_transformer_delegate.cc Add RtpVideoSender::SendVideoLayersAllocation 2020-10-14 08:10:03 +00:00
rtp_sender_video_frame_transformer_delegate.h Add RtpVideoSender::SendVideoLayersAllocation 2020-10-14 08:10:03 +00:00
rtp_sender_video_unittest.cc Revert "Add task queue to RtpRtcpInterface::Configuration." 2021-01-12 17:47:32 +00:00
rtp_sequence_number_map.cc
rtp_sequence_number_map.h
rtp_sequence_number_map_unittest.cc Always pass arguments to INSTANTIATE_TEST_SUITE_P. 2019-09-24 08:56:24 +00:00
rtp_utility.cc Create a VideoFrameTrackingId RTP header extension. 2021-03-25 17:25:18 +00:00
rtp_utility.h
rtp_utility_unittest.cc
rtp_video_header.cc
rtp_video_header.h Send and Receive VideoFrameTrackingid RTP header extension. 2021-03-25 21:57:29 +00:00
rtp_video_layers_allocation_extension.cc Remove tautological 'unsigned expr < 0' comparisons 2021-04-12 11:40:14 +00:00
rtp_video_layers_allocation_extension.h Add experimental extension RtpVideoLayersAllocation 2020-10-05 13:38:13 +00:00
rtp_video_layers_allocation_extension_unittest.cc Fix RtpVideoLayersAllocationExtension::Write of invalid allocation 2021-03-24 13:53:13 +00:00
source_tracker.cc Migrate modules/rtp_rtcp to webrtc::Mutex. 2020-07-07 12:13:47 +00:00
source_tracker.h Migrate modules/rtp_rtcp to webrtc::Mutex. 2020-07-07 12:13:47 +00:00
source_tracker_unittest.cc Add absolute capture time property to rtp sources. 2019-11-20 18:50:45 +00:00
time_util.cc Delete modules/rtp_rtcp local DivideRoundToNearest in favor on one in rtc_base 2019-09-19 08:10:12 +00:00
time_util.h
time_util_unittest.cc Use newer version of TimeDelta and TimeStamp factories in modules/ 2020-02-10 11:49:57 +00:00
tmmbr_help.cc
tmmbr_help.h
ulpfec_generator.cc Update how FEC handles protection parameters for key vs delta frames. 2020-12-07 13:36:03 +00:00
ulpfec_generator.h Update how FEC handles protection parameters for key vs delta frames. 2020-12-07 13:36:03 +00:00
ulpfec_generator_unittest.cc Update how FEC handles protection parameters for key vs delta frames. 2020-12-07 13:36:03 +00:00
ulpfec_header_reader_writer.cc Use rtc::CopyOnWriteBuffer::MutableData through webrtc 2021-01-11 11:31:33 +00:00
ulpfec_header_reader_writer.h
ulpfec_header_reader_writer_unittest.cc Use rtc::CopyOnWriteBuffer::MutableData through webrtc 2021-01-11 11:31:33 +00:00
ulpfec_receiver_impl.cc Updates ulpfec reader to accept padding on media packets. 2021-03-16 19:47:09 +00:00
ulpfec_receiver_impl.h Use SequenceChecker from public API 2021-02-10 15:04:55 +00:00
ulpfec_receiver_unittest.cc Updates ulpfec reader to accept padding on media packets. 2021-03-16 19:47:09 +00:00
video_fec_generator.h Refactors FEC in preparation for deferred packet generation. 2020-05-05 13:59:14 +00:00
video_rtp_depacketizer.cc Hide Av1 specfic logic from RtpVideoReceiver into depacketizer interface. 2020-03-24 15:55:00 +00:00
video_rtp_depacketizer.h Hide Av1 specfic logic from RtpVideoReceiver into depacketizer interface. 2020-03-24 15:55:00 +00:00
video_rtp_depacketizer_av1.cc Change Av1 depacketizer to implement VideoRtpDepacketizer interface 2020-01-15 10:16:03 +00:00
video_rtp_depacketizer_av1.h Hide Av1 specfic logic from RtpVideoReceiver into depacketizer interface. 2020-03-24 15:55:00 +00:00
video_rtp_depacketizer_av1_unittest.cc Hide Av1 specfic logic from RtpVideoReceiver into depacketizer interface. 2020-03-24 15:55:00 +00:00
video_rtp_depacketizer_generic.cc Pass picture_id from generic packetizer through codec-specific field 2020-01-28 19:26:28 +00:00
video_rtp_depacketizer_generic.h Add VideoRtpDepacketizerGeneric 2020-01-07 09:27:34 +00:00
video_rtp_depacketizer_generic_unittest.cc Pass picture_id from generic packetizer through codec-specific field 2020-01-28 19:26:28 +00:00
video_rtp_depacketizer_h264.cc Use rtc::CopyOnWriteBuffer::MutableData through webrtc 2021-01-11 11:31:33 +00:00
video_rtp_depacketizer_h264.h Change H264 depacketizer to implement VideoRtpDepacketizer interface 2020-01-15 12:26:55 +00:00
video_rtp_depacketizer_h264_unittest.cc Remove RTPFragmentationHeader creation and propagation through webrtc 2020-08-17 16:37:33 +00:00
video_rtp_depacketizer_raw.cc Add implementations of the VideoRtpDepacketizer interface 2019-12-06 15:20:29 +00:00
video_rtp_depacketizer_raw.h Add implementations of the VideoRtpDepacketizer interface 2019-12-06 15:20:29 +00:00
video_rtp_depacketizer_raw_unittest.cc Add implementations of the VideoRtpDepacketizer interface 2019-12-06 15:20:29 +00:00
video_rtp_depacketizer_vp8.cc Move vp8 rtp depacketization to VideoRtpDepacketizerVp8 2019-12-13 15:10:46 +00:00
video_rtp_depacketizer_vp8.h Move vp8 rtp depacketization to VideoRtpDepacketizerVp8 2019-12-13 15:10:46 +00:00
video_rtp_depacketizer_vp8_unittest.cc Move vp8 rtp depacketization to VideoRtpDepacketizerVp8 2019-12-13 15:10:46 +00:00
video_rtp_depacketizer_vp9.cc Move vp9 rtp depacketization to VideoRtpDepacketizerVp9 2019-12-16 17:11:13 +00:00
video_rtp_depacketizer_vp9.h Move vp9 rtp depacketization to VideoRtpDepacketizerVp9 2019-12-16 17:11:13 +00:00
video_rtp_depacketizer_vp9_unittest.cc Move vp9 rtp depacketization to VideoRtpDepacketizerVp9 2019-12-16 17:11:13 +00:00