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

source_set("remote_bitrate_estimator") {
  sources = [
    "include/bwe_defines.h",
    "include/remote_bitrate_estimator.h",
    "rate_statistics.cc",
    "rate_statistics.h",
  ]

  configs += [ "../../:common_inherited_config" ]

  deps = [
    ":rbe_components",
    "../..:webrtc_common",
    "../../system_wrappers",
  ]
}

source_set("rbe_components") {
  sources = [
    "aimd_rate_control.cc",
    "aimd_rate_control.h",
    "include/send_time_history.h",
    "inter_arrival.cc",
    "inter_arrival.h",
    "overuse_detector.cc",
    "overuse_detector.h",
    "overuse_estimator.cc",
    "overuse_estimator.h",
    "remote_bitrate_estimator_abs_send_time.cc",
    "remote_bitrate_estimator_single_stream.cc",
    "remote_estimator_proxy.cc",
    "remote_estimator_proxy.h",
    "send_time_history.cc",
    "transport_feedback_adapter.cc",
    "transport_feedback_adapter.h",
  ]

  configs += [ "../..:common_config" ]
  public_configs = [ "../..:common_inherited_config" ]
  deps = [
    "../..:webrtc_common",
  ]

  if (is_clang) {
    # Suppress warnings from Chrome's Clang plugins.
    # See http://code.google.com/p/webrtc/issues/detail?id=163 for details.
    configs -= [ "//build/config/clang:find_bad_constructs" ]
  }
}
