From 26a029d407be480d791972afb5975cf62c9360a6 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Fri, 19 Apr 2024 02:47:55 +0200 Subject: Adding upstream version 124.0.1. Signed-off-by: Daniel Baumann --- .../timing/decode_time_percentile_filter.h | 54 ++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 third_party/libwebrtc/modules/video_coding/timing/decode_time_percentile_filter.h (limited to 'third_party/libwebrtc/modules/video_coding/timing/decode_time_percentile_filter.h') diff --git a/third_party/libwebrtc/modules/video_coding/timing/decode_time_percentile_filter.h b/third_party/libwebrtc/modules/video_coding/timing/decode_time_percentile_filter.h new file mode 100644 index 0000000000..9a6aa5e6a4 --- /dev/null +++ b/third_party/libwebrtc/modules/video_coding/timing/decode_time_percentile_filter.h @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2011 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_TIMING_DECODE_TIME_PERCENTILE_FILTER_H_ +#define MODULES_VIDEO_CODING_TIMING_DECODE_TIME_PERCENTILE_FILTER_H_ + +#include + +#include "rtc_base/numerics/percentile_filter.h" + +namespace webrtc { + +// The `DecodeTimePercentileFilter` filters the actual per-frame decode times +// and provides an estimate for the 95th percentile of those decode times. This +// estimate can be used to determine how large the "decode delay term" should be +// when determining the render timestamp for a frame. +class DecodeTimePercentileFilter { + public: + DecodeTimePercentileFilter(); + ~DecodeTimePercentileFilter(); + + // Add a new decode time to the filter. + void AddTiming(int64_t new_decode_time_ms, int64_t now_ms); + + // Get the required decode time in ms. It is the 95th percentile observed + // decode time within a time window. + int64_t RequiredDecodeTimeMs() const; + + private: + struct Sample { + Sample(int64_t decode_time_ms, int64_t sample_time_ms); + int64_t decode_time_ms; + int64_t sample_time_ms; + }; + + // The number of samples ignored so far. + int ignored_sample_count_; + // Queue with history of latest decode time values. + std::queue history_; + // `filter_` contains the same values as `history_`, but in a data structure + // that allows efficient retrieval of the percentile value. + PercentileFilter filter_; +}; + +} // namespace webrtc + +#endif // MODULES_VIDEO_CODING_TIMING_DECODE_TIME_PERCENTILE_FILTER_H_ -- cgit v1.2.3