blob: d59c6a4a4e3382e2a245a77915c77e2a75aba7a6 [file] [log] [blame]
nisse191b3592016-06-22 08:36:53 -07001/*
2 * Copyright (c) 2016 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_BASE_TIMESTAMPALIGNER_H_
12#define WEBRTC_BASE_TIMESTAMPALIGNER_H_
13
14#include "webrtc/base/basictypes.h"
15#include "webrtc/base/constructormagic.h"
16#include "webrtc/base/optional.h"
nisse76f91cd2016-08-24 01:58:42 -070017#include "webrtc/base/thread_checker.h"
nisse191b3592016-06-22 08:36:53 -070018
19namespace rtc {
20
21class TimestampAligner {
22 public:
23 TimestampAligner();
24 ~TimestampAligner();
25
26 public:
27 // Update the estimated offset between camera time and system monotonic time.
28 int64_t UpdateOffset(int64_t camera_time_us, int64_t system_time_us);
29
30 int64_t ClipTimestamp(int64_t filtered_time_us, int64_t system_time_us);
31
32 private:
nisse76f91cd2016-08-24 01:58:42 -070033 rtc::ThreadChecker thread_checker_;
34
nisse191b3592016-06-22 08:36:53 -070035 // State for the timestamp translation.
36 int frames_seen_;
37 // Estimated offset between camera time and system monotonic time.
38 int64_t offset_us_;
39
40 // State for timestamp clipping, applied after the filter, to ensure
41 // that translated timestamps are monotonic and not in the future.
42 // Subtracted from the translated timestamps.
43 int64_t clip_bias_us_;
44 rtc::Optional<int64_t> prev_translated_time_us_;
45 RTC_DISALLOW_COPY_AND_ASSIGN(TimestampAligner);
46};
47
48} // namespace rtc
49
50#endif // WEBRTC_BASE_TIMESTAMPALIGNER_H_