Move JitterEstimator into timing sub-folder

Bug: webrtc:14111
Change-Id: Ic5c66f35e3cedac7a328fbb6613e5cdf13a8005e
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/263582
Commit-Queue: Rasmus Brandt <brandtr@webrtc.org>
Reviewed-by: Åsa Persson <asapersson@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#37000}
This commit is contained in:
Rasmus Brandt
2022-05-25 10:12:42 +02:00
committed by WebRTC LUCI CQ
parent 4662f53285
commit 10944e61ac
13 changed files with 81 additions and 76 deletions

View File

@ -183,26 +183,6 @@ rtc_library("timing") {
absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
}
rtc_library("jitter_estimator") {
sources = [
"jitter_estimator.cc",
"jitter_estimator.h",
]
deps = [
"../../api:field_trials_view",
"../../api/units:data_size",
"../../api/units:frequency",
"../../api/units:time_delta",
"../../api/units:timestamp",
"../../rtc_base",
"../../rtc_base:safe_conversions",
"../../rtc_base/experiments:jitter_upper_bound_experiment",
"../../system_wrappers",
"timing:rtt_filter",
]
absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
}
rtc_library("video_coding") {
visibility = [ "*" ]
sources = [
@ -250,7 +230,6 @@ rtc_library("video_coding") {
":codec_globals_headers",
":encoded_frame",
":frame_helpers",
":jitter_estimator",
":timing",
":video_codec_interface",
":video_coding_utility",
@ -318,6 +297,7 @@ rtc_library("video_coding") {
"codecs/av1:av1_svc_config",
"svc:scalability_mode_util",
"timing:inter_frame_delay",
"timing:jitter_estimator",
"timing:rtt_filter",
]
absl_deps = [
@ -375,7 +355,6 @@ rtc_library("video_coding_legacy") {
deps = [
":codec_globals_headers",
":encoded_frame",
":jitter_estimator",
":timing",
":video_codec_interface",
":video_coding",
@ -409,6 +388,7 @@ rtc_library("video_coding_legacy") {
"../rtp_rtcp:rtp_video_header",
"../utility",
"timing:inter_frame_delay",
"timing:jitter_estimator",
]
absl_deps = [
"//third_party/abseil-cpp/absl/memory",
@ -1131,7 +1111,6 @@ if (rtc_include_tests) {
"h264_sps_pps_tracker_unittest.cc",
"histogram_unittest.cc",
"jitter_buffer_unittest.cc",
"jitter_estimator_tests.cc",
"loss_notification_controller_unittest.cc",
"nack_module_unittest.cc",
"nack_requester_unittest.cc",
@ -1171,7 +1150,6 @@ if (rtc_include_tests) {
":encoded_frame",
":frame_dependencies_calculator",
":h264_packet_buffer",
":jitter_estimator",
":nack_requester",
":packet_buffer",
":simulcast_test_fixture_impl",
@ -1257,6 +1235,7 @@ if (rtc_include_tests) {
"deprecated:nack_module",
"svc:scalability_structure_tests",
"svc:svc_rate_allocator_tests",
"timing:jitter_estimator",
]
absl_deps = [
"//third_party/abseil-cpp/absl/memory",

View File

@ -25,8 +25,8 @@
#include "api/video/video_timing.h"
#include "modules/video_coding/frame_helpers.h"
#include "modules/video_coding/include/video_coding_defines.h"
#include "modules/video_coding/jitter_estimator.h"
#include "modules/video_coding/timing.h"
#include "modules/video_coding/timing/jitter_estimator.h"
#include "rtc_base/checks.h"
#include "rtc_base/experiments/rtt_mult_experiment.h"
#include "rtc_base/logging.h"

View File

@ -22,8 +22,8 @@
#include "api/sequence_checker.h"
#include "api/video/encoded_frame.h"
#include "modules/video_coding/include/video_coding_defines.h"
#include "modules/video_coding/jitter_estimator.h"
#include "modules/video_coding/timing/inter_frame_delay.h"
#include "modules/video_coding/timing/jitter_estimator.h"
#include "modules/video_coding/utility/decoded_frames_history.h"
#include "rtc_base/event.h"
#include "rtc_base/experiments/field_trial_parser.h"
@ -39,7 +39,7 @@ namespace webrtc {
class Clock;
class VCMReceiveStatisticsCallback;
class VCMJitterEstimator;
class JitterEstimator;
class VCMTiming;
namespace video_coding {
@ -172,7 +172,7 @@ class FrameBuffer {
int64_t latest_return_time_ms_ RTC_GUARDED_BY(mutex_);
bool keyframe_required_ RTC_GUARDED_BY(mutex_);
VCMJitterEstimator jitter_estimator_ RTC_GUARDED_BY(mutex_);
JitterEstimator jitter_estimator_ RTC_GUARDED_BY(mutex_);
VCMTiming* const timing_ RTC_GUARDED_BY(mutex_);
InterFrameDelay inter_frame_delay_ RTC_GUARDED_BY(mutex_);
absl::optional<int64_t> last_continuous_frame_ RTC_GUARDED_BY(mutex_);

View File

@ -19,8 +19,8 @@
#include "api/units/time_delta.h"
#include "api/units/timestamp.h"
#include "modules/video_coding/frame_object.h"
#include "modules/video_coding/jitter_estimator.h"
#include "modules/video_coding/timing.h"
#include "modules/video_coding/timing/jitter_estimator.h"
#include "rtc_base/numerics/sequence_number_util.h"
#include "rtc_base/platform_thread.h"
#include "rtc_base/random.h"

View File

@ -18,9 +18,9 @@
#include "modules/video_coding/include/video_coding.h"
#include "modules/video_coding/internal_defines.h"
#include "modules/video_coding/jitter_buffer_common.h"
#include "modules/video_coding/jitter_estimator.h"
#include "modules/video_coding/packet.h"
#include "modules/video_coding/timing/inter_frame_delay.h"
#include "modules/video_coding/timing/jitter_estimator.h"
#include "rtc_base/checks.h"
#include "rtc_base/logging.h"
#include "system_wrappers/include/clock.h"

View File

@ -25,8 +25,8 @@
#include "modules/video_coding/include/video_coding.h"
#include "modules/video_coding/include/video_coding_defines.h"
#include "modules/video_coding/jitter_buffer_common.h"
#include "modules/video_coding/jitter_estimator.h"
#include "modules/video_coding/timing/inter_frame_delay.h"
#include "modules/video_coding/timing/jitter_estimator.h"
#include "rtc_base/synchronization/mutex.h"
#include "rtc_base/thread_annotations.h"
@ -252,7 +252,7 @@ class VCMJitterBuffer {
// Jitter estimation.
// Filter for estimating jitter.
VCMJitterEstimator jitter_estimate_;
JitterEstimator jitter_estimate_;
// Calculates network delays used for jitter calculations.
InterFrameDelay inter_frame_delay_;
VCMJitterSample waiting_for_completion_;

View File

@ -30,6 +30,26 @@ rtc_library("inter_frame_delay") {
absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
}
rtc_library("jitter_estimator") {
sources = [
"jitter_estimator.cc",
"jitter_estimator.h",
]
deps = [
":rtt_filter",
"../../../api:field_trials_view",
"../../../api/units:data_size",
"../../../api/units:frequency",
"../../../api/units:time_delta",
"../../../api/units:timestamp",
"../../../rtc_base",
"../../../rtc_base:safe_conversions",
"../../../rtc_base/experiments:jitter_upper_bound_experiment",
"../../../system_wrappers",
]
absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
}
rtc_library("rtt_filter") {
sources = [
"rtt_filter.cc",
@ -46,15 +66,24 @@ rtc_library("timing_unittests") {
testonly = true
sources = [
"inter_frame_delay_unittest.cc",
"jitter_estimator_unittest.cc",
"rtt_filter_unittest.cc",
]
deps = [
":inter_frame_delay",
":jitter_estimator",
":rtt_filter",
"../../../api:array_view",
"../../../api/units:data_size",
"../../../api/units:frequency",
"../../../api/units:time_delta",
"../../../api/units:timestamp",
"../../../rtc_base:histogram_percentile_counter",
"../../../rtc_base:stringutils",
"../../../rtc_base:timeutils",
"../../../rtc_base/experiments:jitter_upper_bound_experiment",
"../../../system_wrappers:system_wrappers",
"../../../test:scoped_key_value_config",
"../../../test:test_support",
]
absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]

View File

@ -8,7 +8,7 @@
* be found in the AUTHORS file in the root of the source tree.
*/
#include "modules/video_coding/jitter_estimator.h"
#include "modules/video_coding/timing/jitter_estimator.h"
#include <math.h>
#include <string.h>
@ -49,8 +49,8 @@ constexpr double kNoiseStdDevOffset = 30.0;
} // namespace
VCMJitterEstimator::VCMJitterEstimator(Clock* clock,
const FieldTrialsView& field_trials)
JitterEstimator::JitterEstimator(Clock* clock,
const FieldTrialsView& field_trials)
: fps_counter_(30), // TODO(sprang): Use an estimator with limit based on
// time, rather than number of samples.
time_deviation_upper_bound_(
@ -62,10 +62,10 @@ VCMJitterEstimator::VCMJitterEstimator(Clock* clock,
Reset();
}
VCMJitterEstimator::~VCMJitterEstimator() = default;
JitterEstimator::~JitterEstimator() = default;
// Resets the JitterEstimate.
void VCMJitterEstimator::Reset() {
void JitterEstimator::Reset() {
theta_[0] = 1 / (512e3 / 8);
theta_[1] = 0;
var_noise_ = 4.0;
@ -95,9 +95,9 @@ void VCMJitterEstimator::Reset() {
}
// Updates the estimates with the new measurements.
void VCMJitterEstimator::UpdateEstimate(TimeDelta frame_delay,
DataSize frame_size,
bool incomplete_frame /* = false */) {
void JitterEstimator::UpdateEstimate(TimeDelta frame_delay,
DataSize frame_size,
bool incomplete_frame /* = false */) {
if (frame_size.IsZero()) {
return;
}
@ -178,7 +178,7 @@ void VCMJitterEstimator::UpdateEstimate(TimeDelta frame_delay,
}
// Updates the nack/packet ratio.
void VCMJitterEstimator::FrameNacked() {
void JitterEstimator::FrameNacked() {
if (nack_count_ < kNackLimit) {
nack_count_++;
}
@ -187,8 +187,8 @@ void VCMJitterEstimator::FrameNacked() {
// Updates Kalman estimate of the channel.
// The caller is expected to sanity check the inputs.
void VCMJitterEstimator::KalmanEstimateChannel(TimeDelta frame_delay,
double delta_frame_size_bytes) {
void JitterEstimator::KalmanEstimateChannel(TimeDelta frame_delay,
double delta_frame_size_bytes) {
double Mh[2];
double hMh_sigma;
double kalmanGain[2];
@ -265,7 +265,7 @@ void VCMJitterEstimator::KalmanEstimateChannel(TimeDelta frame_delay,
// Calculate difference in delay between a sample and the expected delay
// estimated by the Kalman filter
double VCMJitterEstimator::DeviationFromExpectedDelay(
double JitterEstimator::DeviationFromExpectedDelay(
TimeDelta frame_delay,
double delta_frame_size_bytes) const {
return frame_delay.ms() - (theta_[0] * delta_frame_size_bytes + theta_[1]);
@ -273,8 +273,7 @@ double VCMJitterEstimator::DeviationFromExpectedDelay(
// Estimates the random jitter by calculating the variance of the sample
// distance from the line given by theta.
void VCMJitterEstimator::EstimateRandomJitter(double d_dT,
bool incomplete_frame) {
void JitterEstimator::EstimateRandomJitter(double d_dT, bool incomplete_frame) {
Timestamp now = clock_->CurrentTime();
if (last_update_time_.has_value()) {
fps_counter_.AddSample((now - *last_update_time_).us());
@ -322,7 +321,7 @@ void VCMJitterEstimator::EstimateRandomJitter(double d_dT,
}
}
double VCMJitterEstimator::NoiseThreshold() const {
double JitterEstimator::NoiseThreshold() const {
double noiseThreshold = kNoiseStdDevs * sqrt(var_noise_) - kNoiseStdDevOffset;
if (noiseThreshold < 1.0) {
noiseThreshold = 1.0;
@ -331,7 +330,7 @@ double VCMJitterEstimator::NoiseThreshold() const {
}
// Calculates the current jitter estimate from the filtered estimates.
TimeDelta VCMJitterEstimator::CalculateEstimate() {
TimeDelta JitterEstimator::CalculateEstimate() {
double retMs =
theta_[0] * (max_frame_size_.bytes() - avg_frame_size_.bytes()) +
NoiseThreshold();
@ -355,17 +354,17 @@ TimeDelta VCMJitterEstimator::CalculateEstimate() {
return ret;
}
void VCMJitterEstimator::PostProcessEstimate() {
void JitterEstimator::PostProcessEstimate() {
filter_jitter_estimate_ = CalculateEstimate();
}
void VCMJitterEstimator::UpdateRtt(TimeDelta rtt) {
void JitterEstimator::UpdateRtt(TimeDelta rtt) {
rtt_filter_.Update(rtt);
}
// Returns the current filtered estimate if available,
// otherwise tries to calculate an estimate.
TimeDelta VCMJitterEstimator::GetJitterEstimate(
TimeDelta JitterEstimator::GetJitterEstimate(
double rtt_multiplier,
absl::optional<TimeDelta> rtt_mult_add_cap) {
TimeDelta jitter = CalculateEstimate() + OPERATING_SYSTEM_JITTER;
@ -408,7 +407,7 @@ TimeDelta VCMJitterEstimator::GetJitterEstimate(
return std::max(TimeDelta::Zero(), jitter);
}
Frequency VCMJitterEstimator::GetFrameRate() const {
Frequency JitterEstimator::GetFrameRate() const {
TimeDelta mean_frame_period = TimeDelta::Micros(fps_counter_.ComputeMean());
if (mean_frame_period <= TimeDelta::Zero())
return Frequency::Zero();

View File

@ -8,8 +8,8 @@
* be found in the AUTHORS file in the root of the source tree.
*/
#ifndef MODULES_VIDEO_CODING_JITTER_ESTIMATOR_H_
#define MODULES_VIDEO_CODING_JITTER_ESTIMATOR_H_
#ifndef MODULES_VIDEO_CODING_TIMING_JITTER_ESTIMATOR_H_
#define MODULES_VIDEO_CODING_TIMING_JITTER_ESTIMATOR_H_
#include "absl/types/optional.h"
#include "api/field_trials_view.h"
@ -24,13 +24,12 @@ namespace webrtc {
class Clock;
class VCMJitterEstimator {
class JitterEstimator {
public:
explicit VCMJitterEstimator(Clock* clock,
const FieldTrialsView& field_trials);
virtual ~VCMJitterEstimator();
VCMJitterEstimator(const VCMJitterEstimator&) = delete;
VCMJitterEstimator& operator=(const VCMJitterEstimator&) = delete;
explicit JitterEstimator(Clock* clock, const FieldTrialsView& field_trials);
virtual ~JitterEstimator();
JitterEstimator(const JitterEstimator&) = delete;
JitterEstimator& operator=(const JitterEstimator&) = delete;
// Resets the estimate to the initial state.
void Reset();
@ -163,4 +162,4 @@ class VCMJitterEstimator {
} // namespace webrtc
#endif // MODULES_VIDEO_CODING_JITTER_ESTIMATOR_H_
#endif // MODULES_VIDEO_CODING_TIMING_JITTER_ESTIMATOR_H_

View File

@ -7,6 +7,8 @@
* be found in the AUTHORS file in the root of the source tree.
*/
#include "modules/video_coding/timing/jitter_estimator.h"
#include <stdint.h>
#include <memory>
@ -17,7 +19,6 @@
#include "api/units/data_size.h"
#include "api/units/frequency.h"
#include "api/units/time_delta.h"
#include "modules/video_coding/jitter_estimator.h"
#include "rtc_base/experiments/jitter_upper_bound_experiment.h"
#include "rtc_base/numerics/histogram_percentile_counter.h"
#include "rtc_base/strings/string_builder.h"
@ -28,18 +29,17 @@
namespace webrtc {
class TestVCMJitterEstimator : public ::testing::Test {
class TestJitterEstimator : public ::testing::Test {
protected:
TestVCMJitterEstimator() : fake_clock_(0) {}
TestJitterEstimator() : fake_clock_(0) {}
virtual void SetUp() {
estimator_ =
std::make_unique<VCMJitterEstimator>(&fake_clock_, field_trials_);
estimator_ = std::make_unique<JitterEstimator>(&fake_clock_, field_trials_);
}
SimulatedClock fake_clock_;
test::ScopedKeyValueConfig field_trials_;
std::unique_ptr<VCMJitterEstimator> estimator_;
std::unique_ptr<JitterEstimator> estimator_;
};
// Generates some simple test data in the form of a sawtooth wave.
@ -66,7 +66,7 @@ class ValueGenerator {
};
// 5 fps, disable jitter delay altogether.
TEST_F(TestVCMJitterEstimator, TestLowRate) {
TEST_F(TestJitterEstimator, TestLowRate) {
ValueGenerator gen(10);
TimeDelta time_delta = 1 / Frequency::Hertz(5);
for (int i = 0; i < 60; ++i) {
@ -79,7 +79,7 @@ TEST_F(TestVCMJitterEstimator, TestLowRate) {
}
}
TEST_F(TestVCMJitterEstimator, TestLowRateDisabled) {
TEST_F(TestJitterEstimator, TestLowRateDisabled) {
test::ScopedKeyValueConfig field_trials(
field_trials_, "WebRTC-ReducedJitterDelayKillSwitch/Enabled/");
SetUp();
@ -96,7 +96,7 @@ TEST_F(TestVCMJitterEstimator, TestLowRateDisabled) {
}
}
TEST_F(TestVCMJitterEstimator, TestUpperBound) {
TEST_F(TestJitterEstimator, TestUpperBound) {
struct TestContext {
TestContext()
: upper_bound(0.0),
@ -143,8 +143,8 @@ TEST_F(TestVCMJitterEstimator, TestUpperBound) {
for (int i = 0; i < 100; ++i) {
estimator_->UpdateEstimate(gen.Delay(), gen.FrameSize());
fake_clock_.AdvanceTime(time_delta);
estimator_->FrameNacked(); // To test rtt_mult.
estimator_->UpdateRtt(kRtt); // To test rtt_mult.
estimator_->FrameNacked(); // To test rtt_mult.
estimator_->UpdateRtt(kRtt); // To test rtt_mult.
context.percentiles.Add(
estimator_
->GetJitterEstimate(context.rtt_mult, context.rtt_mult_add_cap_ms)

View File

@ -103,7 +103,6 @@ rtc_library("video") {
"../modules/video_coding",
"../modules/video_coding:codec_globals_headers",
"../modules/video_coding:frame_helpers",
"../modules/video_coding:jitter_estimator",
"../modules/video_coding:nack_requester",
"../modules/video_coding:packet_buffer",
"../modules/video_coding:timing",
@ -353,6 +352,7 @@ rtc_library("frame_buffer_proxy") {
"../modules/video_coding:timing",
"../modules/video_coding:video_codec_interface",
"../modules/video_coding/timing:inter_frame_delay",
"../modules/video_coding/timing:jitter_estimator",
"../rtc_base:checks",
"../rtc_base:logging",
"../rtc_base:macromagic",

View File

@ -24,6 +24,7 @@
#include "modules/video_coding/frame_buffer2.h"
#include "modules/video_coding/frame_helpers.h"
#include "modules/video_coding/timing/inter_frame_delay.h"
#include "modules/video_coding/timing/jitter_estimator.h"
#include "rtc_base/checks.h"
#include "rtc_base/logging.h"
#include "rtc_base/thread_annotations.h"
@ -500,8 +501,7 @@ class FrameBuffer3Proxy : public FrameBufferProxy {
const std::unique_ptr<FrameDecodeScheduler> frame_decode_scheduler_
RTC_GUARDED_BY(&worker_sequence_checker_);
VCMJitterEstimator jitter_estimator_
RTC_GUARDED_BY(&worker_sequence_checker_);
JitterEstimator jitter_estimator_ RTC_GUARDED_BY(&worker_sequence_checker_);
InterFrameDelay inter_frame_delay_ RTC_GUARDED_BY(&worker_sequence_checker_);
bool keyframe_required_ RTC_GUARDED_BY(&worker_sequence_checker_) = false;
std::unique_ptr<FrameBuffer> buffer_

View File

@ -46,7 +46,6 @@
#include "modules/video_coding/include/video_codec_interface.h"
#include "modules/video_coding/include/video_coding_defines.h"
#include "modules/video_coding/include/video_error_codes.h"
#include "modules/video_coding/jitter_estimator.h"
#include "modules/video_coding/timing.h"
#include "modules/video_coding/utility/vp8_header_parser.h"
#include "rtc_base/checks.h"