Add RtpSequenceNumberMap::InsertFrame()

This will make code using RtpSequenceNumberMap simpler.

Bug: webrtc:10501
Change-Id: I74b11f3562d5962efb42b5bb7662489d7d411388
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/131386
Commit-Queue: Elad Alon <eladalon@webrtc.org>
Reviewed-by: Niels Moller <nisse@webrtc.org>
Reviewed-by: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#27485}
This commit is contained in:
Elad Alon
2019-04-06 21:09:30 +02:00
committed by Commit Bot
parent 3fcc5be59d
commit 28d13cb886
3 changed files with 81 additions and 18 deletions

View File

@ -12,6 +12,7 @@
#include <algorithm>
#include <iterator>
#include <limits>
#include "absl/algorithm/container.h"
#include "rtc_base/checks.h"
@ -28,7 +29,7 @@ RtpSequenceNumberMap::RtpSequenceNumberMap(size_t max_entries)
RtpSequenceNumberMap::~RtpSequenceNumberMap() = default;
void RtpSequenceNumberMap::Insert(uint16_t sequence_number, Info info) {
void RtpSequenceNumberMap::InsertPacket(uint16_t sequence_number, Info info) {
RTC_DCHECK(associations_.size() < 2 ||
AheadOf(associations_.back().sequence_number,
associations_.front().sequence_number));
@ -79,6 +80,20 @@ void RtpSequenceNumberMap::Insert(uint16_t sequence_number, Info info) {
associations_.front().sequence_number));
}
void RtpSequenceNumberMap::InsertFrame(uint16_t first_sequence_number,
size_t packet_count,
uint32_t timestamp) {
RTC_DCHECK_GT(packet_count, 0);
RTC_DCHECK_LE(packet_count, std::numeric_limits<size_t>::max());
for (size_t i = 0; i < packet_count; ++i) {
const bool is_first = (i == 0);
const bool is_last = (i == packet_count - 1);
InsertPacket(static_cast<uint16_t>(first_sequence_number + i),
Info(timestamp, is_first, is_last));
}
}
absl::optional<RtpSequenceNumberMap::Info> RtpSequenceNumberMap::Get(
uint16_t sequence_number) const {
// To make the binary search easier to understand, we use the fact that