blob: 94b73908bb931861718f3d0158f2c8a9ab2ffc87 [file] [log] [blame]
andrew@webrtc.orgb015cbe2012-10-22 18:19:231/*
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
pbos@webrtc.orga557f432013-07-16 12:32:0514#include "webrtc/typedefs.h"
andrew@webrtc.orgb015cbe2012-10-22 18:19:2315
philipelf98b3d12015-12-21 12:12:3916namespace webrtc {
andrew@webrtc.orgb015cbe2012-10-22 18:19:2317
philipelf98b3d12015-12-21 12:12:3918class VCMInterFrameDelay {
19 public:
20 explicit VCMInterFrameDelay(int64_t currentWallClock);
andrew@webrtc.orgb015cbe2012-10-22 18:19:2321
philipelf98b3d12015-12-21 12:12:3922 // Resets the estimate. Zeros are given as parameters.
23 void Reset(int64_t currentWallClock);
andrew@webrtc.orgb015cbe2012-10-22 18:19:2324
philipelf98b3d12015-12-21 12:12:3925 // 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);
andrew@webrtc.orgb015cbe2012-10-22 18:19:2339
philipelf98b3d12015-12-21 12:12:3940 // 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;
andrew@webrtc.orgb015cbe2012-10-22 18:19:2346
philipelf98b3d12015-12-21 12:12:3947 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);
andrew@webrtc.orgb015cbe2012-10-22 18:19:2354
philipelf98b3d12015-12-21 12:12:3955 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;
andrew@webrtc.orgb015cbe2012-10-22 18:19:2363};
64
pbos@webrtc.org3b89e102013-07-03 15:12:2665} // namespace webrtc
andrew@webrtc.orgb015cbe2012-10-22 18:19:2366
philipelf98b3d12015-12-21 12:12:3967#endif // WEBRTC_MODULES_VIDEO_CODING_INTER_FRAME_DELAY_H_