Start moving timing helper classes into timing/ sub-folder.
Putting these classes in a sub folder increases structure and clarifies that they are used as helper classes. Affected classes in this change: * CodecTimer * InterFrameDelay * RttFilter VCMTiming will be moved in a separate CL. Additional changes: * Remove VCM prefix from class names. * Introduce granular BUILD.gn targets. * Update some includes. Bug: webrtc:14111 Change-Id: Ia75128aa955a819033b97d4784cb61904de7230b Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/262960 Commit-Queue: Rasmus Brandt <brandtr@webrtc.org> Reviewed-by: Tomas Gunnarsson <tommi@webrtc.org> Reviewed-by: Åsa Persson <asapersson@webrtc.org> Cr-Commit-Position: refs/heads/main@{#36975}
This commit is contained in:
committed by
WebRTC LUCI CQ
parent
60c67c6377
commit
2377226851
71
modules/video_coding/timing/inter_frame_delay.cc
Normal file
71
modules/video_coding/timing/inter_frame_delay.cc
Normal file
@ -0,0 +1,71 @@
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#include "modules/video_coding/timing/inter_frame_delay.h"
|
||||
|
||||
#include "absl/types/optional.h"
|
||||
#include "api/units/frequency.h"
|
||||
#include "api/units/time_delta.h"
|
||||
#include "modules/include/module_common_types_public.h"
|
||||
|
||||
namespace webrtc {
|
||||
|
||||
namespace {
|
||||
constexpr Frequency k90kHz = Frequency::KiloHertz(90);
|
||||
}
|
||||
|
||||
InterFrameDelay::InterFrameDelay() {
|
||||
Reset();
|
||||
}
|
||||
|
||||
// Resets the delay estimate.
|
||||
void InterFrameDelay::Reset() {
|
||||
prev_wall_clock_ = absl::nullopt;
|
||||
prev_rtp_timestamp_unwrapped_ = 0;
|
||||
}
|
||||
|
||||
// Calculates the delay of a frame with the given timestamp.
|
||||
// This method is called when the frame is complete.
|
||||
absl::optional<TimeDelta> InterFrameDelay::CalculateDelay(
|
||||
uint32_t rtp_timestamp,
|
||||
Timestamp now) {
|
||||
int64_t rtp_timestamp_unwrapped = unwrapper_.Unwrap(rtp_timestamp);
|
||||
if (!prev_wall_clock_) {
|
||||
// First set of data, initialization, wait for next frame.
|
||||
prev_wall_clock_ = now;
|
||||
prev_rtp_timestamp_unwrapped_ = rtp_timestamp_unwrapped;
|
||||
return TimeDelta::Zero();
|
||||
}
|
||||
|
||||
// Account for reordering in jitter variance estimate in the future?
|
||||
// Note that this also captures incomplete frames which are grabbed for
|
||||
// decoding after a later frame has been complete, i.e. real packet losses.
|
||||
uint32_t cropped_last = static_cast<uint32_t>(prev_rtp_timestamp_unwrapped_);
|
||||
if (rtp_timestamp_unwrapped < prev_rtp_timestamp_unwrapped_ ||
|
||||
!IsNewerTimestamp(rtp_timestamp, cropped_last)) {
|
||||
return absl::nullopt;
|
||||
}
|
||||
|
||||
// Compute the compensated timestamp difference.
|
||||
int64_t d_rtp_ticks = rtp_timestamp_unwrapped - prev_rtp_timestamp_unwrapped_;
|
||||
TimeDelta dts = d_rtp_ticks / k90kHz;
|
||||
TimeDelta dt = now - *prev_wall_clock_;
|
||||
|
||||
// frameDelay is the difference of dT and dTS -- i.e. the difference of the
|
||||
// wall clock time difference and the timestamp difference between two
|
||||
// following frames.
|
||||
TimeDelta delay = dt - dts;
|
||||
|
||||
prev_rtp_timestamp_unwrapped_ = rtp_timestamp_unwrapped;
|
||||
prev_wall_clock_ = now;
|
||||
return delay;
|
||||
}
|
||||
|
||||
} // namespace webrtc
|
||||
Reference in New Issue
Block a user