blob: c66b1c5177fad277470b078a2c64e91f54d53fd0 [file] [log] [blame]
niklase@google.com470e71d2011-07-07 08:21:25 +00001/*
2 * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020011#ifndef MODULES_VIDEO_CODING_INTER_FRAME_DELAY_H_
12#define MODULES_VIDEO_CODING_INTER_FRAME_DELAY_H_
niklase@google.com470e71d2011-07-07 08:21:25 +000013
Niels Möllera12c42a2018-07-25 16:05:48 +020014#include <stdint.h>
niklase@google.com470e71d2011-07-07 08:21:25 +000015
philipel9d3ab612015-12-21 04:12:39 -080016namespace webrtc {
niklase@google.com470e71d2011-07-07 08:21:25 +000017
philipel9d3ab612015-12-21 04:12:39 -080018class VCMInterFrameDelay {
19 public:
20 explicit VCMInterFrameDelay(int64_t currentWallClock);
niklase@google.com470e71d2011-07-07 08:21:25 +000021
philipel9d3ab612015-12-21 04:12:39 -080022 // Resets the estimate. Zeros are given as parameters.
23 void Reset(int64_t currentWallClock);
niklase@google.com470e71d2011-07-07 08:21:25 +000024
philipel9d3ab612015-12-21 04:12:39 -080025 // Calculates the delay of a frame with the given timestamp.
26 // This method is called when the frame is complete.
27 //
28 // Input:
29 // - timestamp : RTP timestamp of a received frame
30 // - *delay : Pointer to memory where the result should be
31 // stored
32 // - currentWallClock : The current time in milliseconds.
33 // Should be -1 for normal operation, only used
34 // for testing.
35 // Return value : true if OK, false when reordered timestamps
36 bool CalculateDelay(uint32_t timestamp,
37 int64_t* delay,
38 int64_t currentWallClock);
niklase@google.com470e71d2011-07-07 08:21:25 +000039
philipel9d3ab612015-12-21 04:12:39 -080040 // Returns the current difference between incoming timestamps
41 //
42 // Return value : Wrap-around compensated difference between
43 // incoming
44 // timestamps.
45 uint32_t CurrentTimeStampDiffMs() const;
niklase@google.com470e71d2011-07-07 08:21:25 +000046
philipel9d3ab612015-12-21 04:12:39 -080047 private:
48 // Controls if the RTP timestamp counter has had a wrap around
49 // between the current and the previously received frame.
50 //
51 // Input:
52 // - timestmap : RTP timestamp of the current frame.
53 void CheckForWrapArounds(uint32_t timestamp);
niklase@google.com470e71d2011-07-07 08:21:25 +000054
philipel9d3ab612015-12-21 04:12:39 -080055 int64_t _zeroWallClock; // Local timestamp of the first video packet received
56 int32_t _wrapArounds; // Number of wrapArounds detected
57 // The previous timestamp passed to the delay estimate
58 uint32_t _prevTimestamp;
59 // The previous wall clock timestamp used by the delay estimate
60 int64_t _prevWallClock;
61 // Wrap-around compensated difference between incoming timestamps
62 int64_t _dTS;
niklase@google.com470e71d2011-07-07 08:21:25 +000063};
64
pbos@webrtc.orgd900e8b2013-07-03 15:12:26 +000065} // namespace webrtc
niklase@google.com470e71d2011-07-07 08:21:25 +000066
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020067#endif // MODULES_VIDEO_CODING_INTER_FRAME_DELAY_H_