# Copyright (c) 2022 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.

import("../../../webrtc.gni")

rtc_library("decode_time_percentile_filter") {
  sources = [
    "decode_time_percentile_filter.cc",
    "decode_time_percentile_filter.h",
  ]
  deps = [ "../../../rtc_base:rtc_numerics" ]
}

rtc_library("inter_frame_delay_variation_calculator") {
  sources = [
    "inter_frame_delay_variation_calculator.cc",
    "inter_frame_delay_variation_calculator.h",
  ]
  deps = [
    "../..:module_api_public",
    "../../../api/units:frequency",
    "../../../api/units:time_delta",
    "../../../api/units:timestamp",
    "../../../rtc_base:rtc_numerics",
  ]
  absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
}

rtc_library("frame_delay_variation_kalman_filter") {
  sources = [
    "frame_delay_variation_kalman_filter.cc",
    "frame_delay_variation_kalman_filter.h",
  ]
  deps = [
    "../../../api/units:data_size",
    "../../../api/units:time_delta",
  ]
  visibility = [
    ":jitter_estimator",
    ":timing_unittests",
  ]
}

rtc_library("jitter_estimator") {
  sources = [
    "jitter_estimator.cc",
    "jitter_estimator.h",
  ]
  deps = [
    ":frame_delay_variation_kalman_filter",
    ":rtt_filter",
    "../../../api:field_trials_view",
    "../../../api/units:data_size",
    "../../../api/units:frequency",
    "../../../api/units:time_delta",
    "../../../api/units:timestamp",
    "../../../rtc_base:checks",
    "../../../rtc_base:logging",
    "../../../rtc_base:rolling_accumulator",
    "../../../rtc_base:rtc_numerics",
    "../../../rtc_base:safe_conversions",
    "../../../rtc_base/experiments:field_trial_parser",
    "../../../system_wrappers",
  ]
  absl_deps = [
    "//third_party/abseil-cpp/absl/strings",
    "//third_party/abseil-cpp/absl/types:optional",
  ]
}

rtc_library("rtt_filter") {
  sources = [
    "rtt_filter.cc",
    "rtt_filter.h",
  ]
  deps = [ "../../../api/units:time_delta" ]
  absl_deps = [
    "//third_party/abseil-cpp/absl/algorithm:container",
    "//third_party/abseil-cpp/absl/container:inlined_vector",
  ]
}

rtc_library("timestamp_extrapolator") {
  sources = [
    "timestamp_extrapolator.cc",
    "timestamp_extrapolator.h",
  ]
  deps = [
    "../../../api/units:timestamp",
    "../../../modules:module_api_public",
    "../../../rtc_base:rtc_numerics",
  ]
  absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
}

rtc_library("timing_module") {
  sources = [
    "timing.cc",
    "timing.h",
  ]
  deps = [
    ":decode_time_percentile_filter",
    ":timestamp_extrapolator",
    "../../../api:field_trials_view",
    "../../../api/units:time_delta",
    "../../../api/video:video_frame",
    "../../../api/video:video_rtp_headers",
    "../../../rtc_base:logging",
    "../../../rtc_base:macromagic",
    "../../../rtc_base:rtc_numerics",
    "../../../rtc_base/experiments:field_trial_parser",
    "../../../rtc_base/synchronization:mutex",
    "../../../system_wrappers",
  ]
  absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
}

rtc_library("timing_unittests") {
  testonly = true
  sources = [
    "frame_delay_variation_kalman_filter_unittest.cc",
    "inter_frame_delay_variation_calculator_unittest.cc",
    "jitter_estimator_unittest.cc",
    "rtt_filter_unittest.cc",
    "timestamp_extrapolator_unittest.cc",
    "timing_unittest.cc",
  ]
  deps = [
    ":frame_delay_variation_kalman_filter",
    ":inter_frame_delay_variation_calculator",
    ":jitter_estimator",
    ":rtt_filter",
    ":timestamp_extrapolator",
    ":timing_module",
    "../../../api:array_view",
    "../../../api:field_trials",
    "../../../api/units:data_size",
    "../../../api/units:frequency",
    "../../../api/units:time_delta",
    "../../../api/units:timestamp",
    "../../../rtc_base:histogram_percentile_counter",
    "../../../rtc_base:timeutils",
    "../../../system_wrappers:system_wrappers",
    "../../../test:scoped_key_value_config",
    "../../../test:test_support",
  ]
  absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
}