# 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",
  ]
}

rtc_library("frame_delay_variation_kalman_filter") {
  sources = [
    "frame_delay_variation_kalman_filter.cc",
    "frame_delay_variation_kalman_filter.h",
  ]
  deps = [ "../../../rtc_base:checks" ]
  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/experiments:field_trial_parser",
    "../../../system_wrappers",
    "//third_party/abseil-cpp/absl/strings:string_view",
  ]
}

rtc_library("rtt_filter") {
  sources = [
    "rtt_filter.cc",
    "rtt_filter.h",
  ]
  deps = [
    "../../../api/units:time_delta",
    "../../../rtc_base:checks",
    "//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:field_trials_view",
    "../../../api/units:time_delta",
    "../../../api/units:timestamp",
    "../../../rtc_base:logging",
    "../../../rtc_base:rtc_numerics",
    "../../../rtc_base/experiments:field_trial_parser",
    "../../../system_wrappers:metrics",
    "//third_party/abseil-cpp/absl/strings:string_view",
  ]
}

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/units:timestamp",
    "../../../api/video:video_frame",
    "../../../api/video:video_rtp_headers",
    "../../../rtc_base:checks",
    "../../../rtc_base:logging",
    "../../../rtc_base:macromagic",
    "../../../rtc_base/synchronization:mutex",
    "../../../system_wrappers",
  ]
}

rtc_library("timing_unittests") {
  testonly = true
  sources = [
    "decode_time_percentile_filter_unittest.cc",
    "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 = [
    ":decode_time_percentile_filter",
    ":frame_delay_variation_kalman_filter",
    ":inter_frame_delay_variation_calculator",
    ":jitter_estimator",
    ":rtt_filter",
    ":timestamp_extrapolator",
    ":timing_module",
    "../../../api:field_trials",
    "../../../api/units:data_size",
    "../../../api/units:frequency",
    "../../../api/units:time_delta",
    "../../../api/units:timestamp",
    "../../../rtc_base:histogram_percentile_counter",
    "../../../system_wrappers",
    "../../../system_wrappers:metrics",
    "../../../test:create_test_field_trials",
    "../../../test:test_support",
  ]
}
