1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- /*
- * Copyright (c) 2019 The WebRTC project authors. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license
- * that can be found in the LICENSE file in the root of the source
- * tree. An additional intellectual property rights grant can be found
- * in the file PATENTS. All contributing project authors may
- * be found in the AUTHORS file in the root of the source tree.
- */
- #ifndef MODULES_VIDEO_CODING_UNIQUE_TIMESTAMP_COUNTER_H_
- #define MODULES_VIDEO_CODING_UNIQUE_TIMESTAMP_COUNTER_H_
- #include <cstdint>
- #include <memory>
- #include <set>
- namespace webrtc {
- // Counts number of uniquly seen frames (aka pictures, aka temporal units)
- // identified by their rtp timestamp.
- class UniqueTimestampCounter {
- public:
- UniqueTimestampCounter();
- UniqueTimestampCounter(const UniqueTimestampCounter&) = delete;
- UniqueTimestampCounter& operator=(const UniqueTimestampCounter&) = delete;
- ~UniqueTimestampCounter() = default;
- void Add(uint32_t timestamp);
- // Returns number of different |timestamp| passed to the UniqueCounter.
- int GetUniqueSeen() const { return unique_seen_; }
- private:
- int unique_seen_ = 0;
- // Stores several last seen unique values for quick search.
- std::set<uint32_t> search_index_;
- // The same unique values in the circular buffer in the insertion order.
- std::unique_ptr<uint32_t[]> latest_;
- // Last inserted value for optimization purpose.
- int64_t last_ = -1;
- };
- } // namespace webrtc
- #endif // MODULES_VIDEO_CODING_UNIQUE_TIMESTAMP_COUNTER_H_
|