• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
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 
11 #ifndef WEBRTC_MODULES_VIDEO_CODING_INTER_FRAME_DELAY_H_
12 #define WEBRTC_MODULES_VIDEO_CODING_INTER_FRAME_DELAY_H_
13 
14 #include "webrtc/typedefs.h"
15 
16 namespace webrtc
17 {
18 
19 class VCMInterFrameDelay
20 {
21 public:
22     VCMInterFrameDelay(int64_t currentWallClock);
23 
24     // Resets the estimate. Zeros are given as parameters.
25     void Reset(int64_t currentWallClock);
26 
27     // Calculates the delay of a frame with the given timestamp.
28     // This method is called when the frame is complete.
29     //
30     // Input:
31     //          - timestamp         : RTP timestamp of a received frame
32     //          - *delay            : Pointer to memory where the result should be stored
33     //          - currentWallClock  : The current time in milliseconds.
34     //                                Should be -1 for normal operation, only used 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);
39 
40     // Returns the current difference between incoming timestamps
41     //
42     // Return value                 : Wrap-around compensated difference between incoming
43     //                                timestamps.
44     uint32_t CurrentTimeStampDiffMs() const;
45 
46 private:
47     // Controls if the RTP timestamp counter has had a wrap around
48     // between the current and the previously received frame.
49     //
50     // Input:
51     //          - timestmap         : RTP timestamp of the current frame.
52     void CheckForWrapArounds(uint32_t timestamp);
53 
54     int64_t         _zeroWallClock; // Local timestamp of the first video packet received
55     int32_t         _wrapArounds;   // Number of wrapArounds detected
56     // The previous timestamp passed to the delay estimate
57     uint32_t        _prevTimestamp;
58     // The previous wall clock timestamp used by the delay estimate
59     int64_t         _prevWallClock;
60     // Wrap-around compensated difference between incoming timestamps
61     int64_t         _dTS;
62 };
63 
64 }  // namespace webrtc
65 
66 #endif // WEBRTC_MODULES_VIDEO_CODING_INTER_FRAME_DELAY_H_
67